The heartbeat of your GitHub pull requests, on your desktop.
PR Pulse is a developer-focused Electron widget for macOS, Windows, and Linux that keeps your GitHub pull request activity quietly visible while you work. Terminal-inspired, ambient, and keyboard-friendly.
"PR Pulse" is an independent open-source project and is not affiliated with, endorsed by, or sponsored by GitHub, Inc.
- Frameless, transparent floating panel with a neon-green terminal aesthetic
- Three window modes:
- desktop — pinned to the macOS desktop layer, behind app windows (like the native Weather widget)
- floating — always on top of other windows
- normal — regular z-order
- macOS vibrancy so the widget blends into the wallpaper
- Tray entry point with refresh, settings, and quick toggle
- Global shortcut
⌥⌘G(Ctrl+Alt+Gon Windows/Linux) to show/hide the widget - Optional launch-at-login mode (starts hidden so notifications continue in background)
- Three PR sections:
- Review requested from you
- Assigned to you
- Authored by you
- Dedicated approved by me lane plus an
approved-onlyfilter toggle - Native desktop notifications for:
- new review requests / assignments
- new comments on your PRs
- new commits pushed to open PRs
- stale approvals after new pushes
- draft → ready-for-review transitions
- approvals
- changes requested, merged, or closed PRs
- Persisted window position, size, opacity, notification preferences, and mode
Add a screenshot of the widget on your desktop here before publishing.
Grab the latest PR Pulse-<version>-arm64.dmg (Apple Silicon) or
PR Pulse-<version>-x64.dmg (Intel) from the releases page and drag
PR Pulse.app into /Applications.
On first launch macOS will show a Gatekeeper warning because the app is unsigned.
Right-click the app in /Applications → Open → Open to allow it. Only
needed once.
git clone https://github.com/vasilisnakos/pr-pulse.git
cd pr-pulse
npm install
npm run dev # develop with hot reloadOutput is placed in the builds/ directory.
| Command | Output | Requires |
|---|---|---|
npm run dist:mac |
.dmg (macOS installer) |
macOS |
npm run dist:win |
.exe (NSIS installer) |
Windows |
npm run dist:linux |
.AppImage + .deb |
Linux |
Pushing a version tag triggers the CI workflow which builds all three platforms in parallel and attaches the artifacts to a GitHub Release automatically.
git tag v0.1.0 && git push origin v0.1.0The workflow (.github/workflows/release.yml) runs three jobs in parallel:
| Job | Runner | Output |
|---|---|---|
build-mac |
macos-latest |
.dmg |
build-win |
windows-latest |
.exe |
build-linux |
ubuntu-latest |
.AppImage + .deb |
Once all three complete, a release job creates a GitHub Release at the pushed tag with all artifacts attached and auto-generated release notes.
You can also trigger a build without creating a release via Actions → Build & Release → Run workflow on GitHub.
Requires Docker with the Compose plugin.
Artifacts are written to ./builds on the host.
macOS
.dmgbuilds cannot be produced inside Docker due to Apple licensing restrictions.
# Linux — AppImage + .deb
docker compose run --rm linux
# Windows — NSIS .exe (cross-compiled via Wine)
docker compose run --rm windows
# Both
docker compose run --rm linux && docker compose run --rm windowsCreate a classic or fine-grained personal access token that can read pull requests and issue metadata. For a classic PAT these scopes are sufficient:
reporead:user
Paste the token into the widget's settings panel on first launch; it is stored
locally via electron-store under your user's app-support directory and is
never transmitted anywhere except to api.github.com.
| Action | How |
|---|---|
| Toggle widget visibility | ⌥⌘G (macOS) / Ctrl+Alt+G (Win/Linux), tray click, or :q button |
| Open settings | header settings button, or tray menu |
| Refresh now | header refresh button, or tray menu |
| Open a PR | click the PR card |
- Main process (
src/main/) — Electron lifecycle, window management, tray, GitHub polling, notifications, persistence. - Preload (
src/preload/) — contextIsolation-safe bridge that exposes a typed IPC surface (window.widgetApi). - Renderer (
src/renderer/) — React + Vite; the UI the user sees inside the panel. - Shared types (
src/shared/) — type definitions shared by main and renderer.
Built with:
- Electron 41,
electron-vite,electron-builder - React 19
@octokit/restfor the GitHub APIelectron-storefor persistence
- Code signing / notarization are not configured. macOS Gatekeeper and Windows SmartScreen warnings are expected for these unsigned builds. Signing requires an Apple Developer Program membership (macOS) and a code-signing certificate (Windows).
- Windows "desktop" mode is a best-effort fallback. Electron does not expose a stable
HWND-to-Progman parenting API, so on Windows the
desktopmode degrades to a non-topmost floating window. - Not a WidgetKit widget. Apple's Notification Center widget gallery requires a native Swift companion. PR Pulse is a standalone Electron app that behaves like one.
MIT