A lightweight desktop overlay that pops a live camera feed in the corner of your screen the moment Frigate detects an object — like the camera notifications on a TV, but for your computer.
- Live WebRTC feed (sub-second latency) the instant Frigate detects something
- Shows the detected object, score, recognized face, license plate, and entered zones
- Optional instant snapshot so there is no black frame while the live feed connects
- Menu bar app: pick which cameras notify, toggle sound, set the dismiss delay
- Frameless, always-on-top, translucent card that slides in and out
- Cross-platform: macOS and Windows
- Connects to your existing MQTT broker and Frigate — no server-side change
- Optional support for Frigate's authenticated port (8971) over HTTPS, with certificate pinning
- Optional update checks, off by default, with a notification and an installer
Frigate ──(MQTT frigate/events)──► main process ──IPC──► overlay window
│ │
└──(WebRTC via /live/webrtc/api/ws)────────────────────────┘
- Node.js 18+ (to run from source)
- A running Frigate instance with MQTT enabled
On first launch a setup window opens automatically and asks for your Frigate host and MQTT broker details — no file editing required. The settings are saved to the app's user data folder and can be changed anytime from the menu bar (Settings…).
To configure from source or by hand instead:
npm install
cp config.example.json config.jsonEdit config.json:
| Key | Description |
|---|---|
mqtt |
MQTT connection string, e.g. mqtt://user:pass@host:1883 |
frigateUrl |
Base URL of Frigate, e.g. http://host:5000, or https://host:8971 for the authenticated port |
frigateUser |
Frigate username for the authenticated port (optional) |
frigatePassword |
Frigate password for the authenticated port (optional) |
topicPrefix |
Frigate MQTT topic prefix (default frigate) |
cameras |
Map of camera name to display name. Leave {} to show all cameras |
labels |
Only notify for these labels, e.g. ["person", "car"]. Empty = all |
minScore |
Ignore detections below this score (0–1) |
corner |
top-right, top-left, bottom-right, bottom-left |
margin |
Distance from the screen edge, in pixels |
width, height |
Overlay size in pixels |
dismissSeconds |
Seconds to keep the card after the event ends |
When packaged, config.json is read from the app's user data folder (use the
Open config folder menu item to locate it).
If your Frigate uses the authenticated port (usually 8971), add your Frigate username and password in the setup window. Peek logs in, pins your Frigate's certificate, and loads snapshots and the live stream over HTTPS. Leave the fields empty to use the open port 5000.
Peek can check GitHub for new releases and update from inside the app. This is off by default, so Peek makes no outside connection unless you enable it in the setup window or the menu bar. When on, it shows a notification and an installer, and you can skip a version.
npm startnpm run dist # current platform
npm run dist:mac # macOS .dmg + .zip
npm run dist:win # Windows installer + portableTagging a release (git tag v0.1.0 && git push --tags) builds macOS and Windows
on CI and attaches the binaries to a GitHub Release.
Builds before 0.3.1 had a broken signature seal that macOS reports as "damaged" on Apple Silicon once the download is quarantined. Update to 0.3.1 or later. For a copy already downloaded, clear the quarantine flag after moving the app to Applications:
xattr -dr com.apple.quarantine /Applications/Peek.appmacOS: the menu bar icon is hidden behind the notch
On Macs with a notch, macOS can place the menu bar icon behind it once the bar is full, leaving Settings out of reach. Launch Peek again from Spotlight or the Applications folder to reopen Settings, or enable "Keep an icon in the Dock" in Settings for a permanent entry point.
Live streaming uses the go2rtc video-rtc
web component (MIT), vendored in src/renderer/vendor.
MIT
