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 bottleneck
To fetch updates, run
git fetch upstream
- Install dependencies:
npm install
Important: 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 dist
bottleneck/
βββ 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.ts
make sure the React DevTools installation includesallowFileAccess
(and optionallyforceDownload
to refresh stale caches):await installExtension(REACT_DEVELOPER_TOOLS, { loadExtensionOptions: { allowFileAccess: true }, forceDownload: true, });
-
Clear the cached extension β Remove the
fmkadmapgofadopljbjfkapdkoienihi
folder 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 + I
to 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