Bottleneck is a code review powertool for AI native teams. It's a native Electron app that reproduces the core GitHub PR experience while being dramatically faster and optimized for parallelized background agents like Claude Code, Cursor, Devin, and Codex.
Bottleneck_walkthrough.mp4
Demo in action: https://screen.studio/share/o6sCO1uS
- ⚡ Lightning Fast - Near-instant navigation, diff rendering, and branch checkout
- 🔄 Smart Sync - Incremental updates via GitHub GraphQL with intelligent caching
- 👥 Bulk Actions - Multi-select PRs for batch operations (merge, close, label, etc.)
- 🏷️ Prefix Grouping - Automatically groups PRs by common prefixes (feat/, fix/, etc.)
- 📝 Monaco Editor - VSCode-powered diff viewer with syntax highlighting
- 💾 Offline Support - SQLite-based local cache for offline access
- ⌨️ Shortcuts for Everything - Comprehensive keyboard shortcuts for power users
- Electron - Cross-platform desktop app
- React 18 - UI framework with TypeScript
- Monaco Editor - Code diff viewing
- SQLite - Local data persistence
- GitHub API - PR and repository management
- Tailwind CSS - Styling
- Zustand - State management
- Node.js 18+ and npm
- Git
- GitHub account with appropriate permissions
- Fork (and star) the repository:
gh repo fork areibman/bottleneck --clone
git remote add upstream https://github.com/areibman/bottleneck.git
cd bottleneckTo fetch updates, run
git fetch upstream- Install dependencies:
npm installImportant: You must use npm. Bun is known not to work.
- Run in development mode:
npm run dev- Build for production:
npm run build
npm run distbottleneck/
├── src/
│ ├── main/ # Electron main process
│ │ ├── index.ts # Main entry point
│ │ ├── database.ts # SQLite operations
│ │ ├── auth.ts # GitHub OAuth
│ │ └── git.ts # Git operations
│ ├── renderer/ # React app
│ │ ├── components/ # UI components
│ │ ├── views/ # Page views
│ │ ├── stores/ # Zustand stores
│ │ ├── services/ # API services
│ │ └── utils/ # Utilities
│ └── shared/ # Shared types/constants
├── dist/ # Compiled output
└── release/ # Packaged apps
npm run dev- Start development server with hot reloadnpm run build- Build for productionnpm run dist- Package the app for distributionnpm run electron- Run the built app
If the React DevTools Profiler tab is missing inside Electron DevTools, walk through the following steps:
-
Update the installer call – In
src/main/index.tsmake sure the React DevTools installation includesallowFileAccess(and optionallyforceDownloadto refresh stale caches):await installExtension(REACT_DEVELOPER_TOOLS, { loadExtensionOptions: { allowFileAccess: true }, forceDownload: true, });
-
Clear the cached extension – Remove the
fmkadmapgofadopljbjfkapdkoienihifolder so Electron downloads the updated bundle on the next run.- macOS:
~/Library/Application Support/Electron/extensions/ - Windows:
%APPDATA%\Electron\extensions\ - Linux:
~/.config/Electron/extensions/
Delete only the React DevTools folder (keep other extensions if you rely on them).
- macOS:
-
Restart the dev environment – Run
npm run dev, open the window, and pressCmd/Ctrl + Option + Ito open DevTools. You should now see both ⚛️ Components and ⚛️ Profiler tabs.
Cmd/Ctrl + B- Toggle sidebarCmd/Ctrl + Shift + B- Toggle right panelCmd/Ctrl + Shift + P- Command paletteCmd/Ctrl + /- Show keyboard shortcuts
Cmd/Ctrl + P- Go to PRCmd/Ctrl + T- Go to fileCmd/Ctrl + [- Previous PRCmd/Ctrl + ]- Next PRAlt + Up- Previous fileAlt + Down- Next file
Cmd/Ctrl + Enter- Submit commentCmd/Ctrl + Shift + A- Approve PRCmd/Ctrl + Shift + R- Request changesV- Mark file as viewedD- Toggle diff viewW- Toggle whitespace
- PR list render: <300ms from cache, <1.5s cold fetch
- First diff paint: <150ms for typical files
- Handle 1k+ files / 50k+ changed lines smoothly
- 60 FPS scrolling in all views
- Virtualized lists and diff rendering
- Web workers for diff computation
- Incremental syntax highlighting
- Smart caching with ETags
- Concurrent API requests with rate limiting
Contributions are welcome! Please feel free to submit a Pull Request.
MIT
- Built with Electron, React, and Monaco Editor
- Inspired by the need for faster PR reviews
- Optimized for teams using agent-based development