Enterprise-grade Windows crash dump analyzer powered by Google's Gemini AI. Instantly diagnose Blue/Black Screen of Death errors with advanced machine learning technology. Supports both classic blue screens and Windows 11's modern black screens.
- 🔍 Intelligent Analysis: Leverages Google Gemini AI to analyze crash dumps
- 🌐 Grounded Advanced Analysis: Uses Google Search grounding in debugging tools for up-to-date information
- 📊 Detailed Reports: Provides probable causes, culprit drivers, and actionable recommendations
- 🛠️ Advanced Debugging: WinDbg-style commands (!analyze -v, lm kv, !process 0 0, !vm)
- 📦 Multiple Formats: Supports both .dmp files and .zip archives
- 🔒 Secure Architecture: API keys protected server-side with proxy implementation
- ⚡ Real-time Processing: Client-side binary analysis with server-side AI inference
- Node.js 18+
- Google Cloud account (for deployment)
- Gemini API key from Google AI Studio
-
Clone the repository
git clone https://github.com/faratech/bsod-analyzer.git cd bsod-analyzer -
Install dependencies
npm install
-
Set up environment
# Create .env.local file echo "GEMINI_API_KEY=your-gemini-api-key" > .env.local
-
Start development server
npm run dev
This runs both the backend (port 8080) and frontend concurrently.
npm run dev- Start both backend and frontend serversnpm run dev:backend- Start backend server onlynpm run dev:frontend- Start frontend dev server onlynpm run build- Build production frontendnpm start- Run production server
The application uses a secure client-server architecture where sensitive API operations are proxied through a backend server:
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Browser │────▶│ Express │────▶│ Gemini API │
│ (React) │◀────│ Server │◀────│ (Google) │
└─────────────┘ └─────────────┘ └──────────────┘
Frontend Backend AI Service
- Frontend (
App.tsx): React application handling file uploads and UI - Backend (
server.js): Express server that proxies Gemini API calls - Proxy Service (
services/geminiProxy.ts): Frontend service that routes API calls through backend - Binary Processing: Client-side extraction of strings and hex dumps from crash dumps
- User uploads .dmp or .zip files via the web interface
- Files are categorized as 'minidump' or 'kernel' (5MB threshold)
- Binary data is processed client-side:
- ASCII and UTF-16LE string extraction
- Hex dump generation (first 1KB)
- Processed data sent to backend proxy endpoint
- Backend authenticates with Gemini API and forwards request
- AI analysis results returned and displayed with interactive reports
- API Key Protection: Gemini API key stored server-side only
- Proxy Pattern: All AI requests routed through
/api/gemini/generateContent - No File Storage: Crash dumps processed in-memory, never stored
- Secret Manager: Production deployments use Google Secret Manager
This application uses a zero-trust security model where no secrets are stored in the codebase:
- All secrets are stored in Google Secret Manager
- Cloud Run automatically injects secrets as environment variables
- No
.envfile exists or is needed in production - The application reads secrets via
process.envvariables:GEMINI_API_KEY- For Gemini AI API accessTURNSTILE_SECRET_KEY- For Cloudflare Turnstile verificationSESSION_SECRET- For secure session management
For local development, you need to set environment variables:
-
Using environment variables directly:
export GEMINI_API_KEY="your-key-here" export TURNSTILE_SECRET_KEY="your-secret-here" export SESSION_SECRET="any-random-string" npm run dev
-
Using
.envfile (optional, for convenience):# Copy the example and add your keys cp .env.example .env # Edit .env with your actual values npm run dev
Note: The
.envfile is gitignored and should never be committed.
setup-all-secrets.sh- Initial setup of all secrets in Google Secret Managerupdate-turnstile-secret.sh- Update Turnstile secret when regenerating keysdeploy-with-secret.sh- Deploy to Cloud Run with secrets from Secret Manager
- Never commit secrets: The
.envfile is gitignored - Rotate secrets regularly: Use the update scripts to rotate secrets
- Use Secret Manager in production: All Cloud Run deployments use Google Secret Manager
- Principle of least privilege: Secrets are only accessible to the running service
| Secret | Purpose | How to Obtain |
|---|---|---|
GEMINI_API_KEY |
AI analysis via Google Gemini | Google AI Studio |
TURNSTILE_SECRET_KEY |
CAPTCHA verification | Cloudflare Dashboard |
SESSION_SECRET |
Session security | Auto-generated or any random string |
# Set your project ID
export PROJECT_ID="your-gcp-project-id"
# Create API key secret
echo -n "your-gemini-api-key" | gcloud secrets create gemini-api-key --data-file=-
# Deploy using the provided script
./deploy-with-secret.sh-
Build Docker image
docker build -t us-east1-docker.pkg.dev/$PROJECT_ID/bsod-analyzer/app:latest .
-
Push to Artifact Registry
docker push us-east1-docker.pkg.dev/$PROJECT_ID/bsod-analyzer/app:latest -
Deploy to Cloud Run
gcloud run deploy bsod-analyzer \ --image us-east1-docker.pkg.dev/$PROJECT_ID/bsod-analyzer/app:latest \ --region us-east1 \ --allow-unauthenticated \ --update-secrets GEMINI_API_KEY=gemini-api-key:latest
The repository includes cloudbuild.yaml for automated deployments:
# Submit a build
gcloud builds submit --config cloudbuild.yaml
# Set up automatic deployments on push
gcloud builds triggers create github \
--repo-name=bsod-analyzer \
--repo-owner=faratech \
--branch-pattern="^main$" \
--build-config=cloudbuild.yaml- Frontend: React 19, TypeScript, Vite
- Backend: Express.js with ES modules
- AI Service: Google Gemini 3 Pro with grounding via @google/generative-ai SDK
- Styling: Custom CSS with animations
- File Processing: FileReader API, JSZip
- Markdown: react-markdown with GitHub Flavored Markdown
- Deployment: Docker, Google Cloud Run, Secret Manager
Proxies requests to Google's Gemini API with automatic field name transformation.
Request Body:
{
"model": "gemini-3-pro",
"contents": "...",
"config": {
"responseMimeType": "application/json",
"responseSchema": {...},
"temperature": 0.1
},
"tools": [{
"googleSearch": {}
}]
}-
API Key Errors
- Ensure
GEMINI_API_KEYis set in.env.localfor local development - For production, verify the secret exists:
gcloud secrets list
- Ensure
-
Container Start Failures
- Check logs:
gcloud logging read --limit 50 - Verify PORT environment variable is set to 8080
- Check logs:
-
Build Failures
- Ensure all dependencies are installed:
npm install - Check Node.js version (requires 18+)
- Ensure all dependencies are installed:
View Cloud Run logs:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=bsod-analyzer" --limit 50- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -am 'Add your feature' - Push to branch:
git push origin feature/your-feature - Submit a pull request
For issues and feature requests, please use the GitHub issue tracker.
This project is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).
- Share — copy and redistribute the material in any medium or format
- Adapt — remix, transform, and build upon the material for any purpose, even commercially
- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made
When using this software, please include:
BSOD Analyzer by the BSOD Analyzer Contributors, licensed under CC BY 4.0
Source: https://github.com/faratech/bsod-analyzer
See the LICENSE file for full details.
Contributions are welcome! By contributing to this project, you agree to license your contributions under the same CC BY 4.0 license.
- Powered by Google Gemini AI for intelligent crash analysis
- Built with React, TypeScript, and Vite
- Deployed on Google Cloud Run