An unofficial desktop client for Eufy Security cameras and doorbells, for Windows and macOS. It brings the parts of the mobile app you actually want at your desk:
- Native desktop notifications with a snapshot when a camera detects motion, a person, a package, or someone rings the doorbell (hero image toasts on Windows; image attachment on macOS).
- Device dashboard with the latest snapshot per camera, battery level and one-click live view.
- Event feed with thumbnails, per-device filtering and day grouping. The feed combines real-time push events (persisted locally, so it keeps building across restarts), the latest recording per camera read from your HomeBase, cloud recording history (subscription accounts), and station database history where the firmware still answers those queries. Note: current HomeBase 3 firmware no longer serves retroactive history to third-party clients, so on HB3 the feed starts from when you first run the app and grows from there.
- Live view — H.264 via MSE (JMuxer) and H.265 via hardware WebCodecs decoding.
- Live monitor wall — all cameras on one screen. Stations can't sustain many simultaneous full-quality P2P streams (the official app's grid uses sub-streams that aren't exposed to third parties), so by default one camera streams live while the rest show fresh snapshots. Click any tile to make it the live one, or raise "Live at once" if your setup can handle more. Setting Settings → Live stream quality to Low helps a lot.
- Recording playback from the event feed (play button on the thumbnail) for events that carry a recording reference. Caveat: current HomeBase 3 firmware ignores third-party playback requests entirely (a known limitation of the underlying library — it needs Eufy's new encrypted P2P protocol); recordings on HomeBase 2, camera SD cards and Eufy Cloud play fine, and HB3 will light up when the library adds support.
- Sign in with your Eufy account — including captcha and two-factor (email code) flows.
Credentials are stored encrypted with the OS keychain (Electron
safeStorage); the session token is reused so you are not re-prompted on every launch. - Closing the window keeps the app in the tray, so notifications keep arriving — and Settings → Start with your PC launches it silently in the tray at login.
It is built on eufy-security-client, the reverse-engineered library that also powers the Home Assistant, Homebridge and ioBroker integrations.
Heads-up: Eufy is migrating its cloud platform ("Eufy Mega") and has begun retiring the legacy APIs this library uses. Everything works today (the library added a new transport in mid-2026 specifically to keep push notifications alive), but treat this as software that may need a library swap when the community's successor library lands. The Eufy integration is isolated in
src/main/eufy.tsbehind a small interface for exactly that reason.
- Node.js 24+ and npm (the
eufy-security-clientlibrary requires Node 24; Electron 43 bundles Node 24 at runtime). - A Eufy Security account. Tip: the Eufy cloud only tolerates one app session per account — if you use your main account here, your phone app may get signed out. Best practice: create a second Eufy account and invite it as an admin from your main account (Family & Guests in the mobile app), then sign in here with the second account.
Grab the Windows installer from the Releases page and run it. For macOS, build from source on a Mac (see below).
The installed app updates itself: it checks this repository's releases on startup and
every six hours, downloads new versions in the background, and applies them on restart (or
immediately when it's idling in the tray). Publishing a new version is just
npm version patch && npm run dist:win and uploading the installer, .blockmap and
latest.yml to a new GitHub release.
npm install
npm run dev # launches the app with hot reload
npm run typecheck # TypeScript checks for main + renderernpm run dist:win # Windows NSIS installer -> release/
npm run dist:mac # macOS DMG (run on a Mac) -> release/- Windows: notifications with images require the installed (NSIS) build or dev mode; a bare unzipped portable exe cannot register toasts.
- macOS: build on your MacBook (
npm install && npm run dist:mac). Since Electron 42, macOS notifications require the app to be code-signed — an ad-hoc signature is enough for personal use:codesign --force --deep -s - "release/mac-arm64/Eufy Desktop.app".
- Choose the country your Eufy account was created in — a mismatch logs in fine but shows zero devices.
- Eufy may show a captcha or email you a verification code; the app walks you through both. After one successful 2FA, this computer is remembered as a trusted device.
- For snappy notification snapshots, open Settings → Fast snapshot delivery → Optimize. Cameras set to "Most Efficient" notifications only produce a snapshot ~60 s after the event; this switches them to "Include Thumbnail" (same as the mobile app setting).
- No audio in live view — Eufy cameras mostly ship AAC-ELD audio, which browsers cannot decode. Video is unaffected.
- H.265 cameras need a GPU with HEVC decode (virtually all recent Intel/AMD/NVIDIA/Apple hardware has it). If yours lacks it, set the camera's streaming quality in the Eufy app so it uses H.264.
- Battery cameras wake in 2–5 s for live view and may end streams on their own to save power; the player offers one-click reconnect. Streams auto-stop after 10 minutes.
- Very new (2026 Matter-era) devices are not yet recognized by the underlying library.
src/main/eufy.ts— wrapper aroundeufy-security-client: login/captcha/2FA, push event coordination (waits briefly for the event snapshot before notifying), device summaries, station P2P connections, event history (cloud + station database + latest-info seeding), P2P livestream piping.src/main/event-store.ts— persistent local event feed (live pushes accumulate here).src/main/notifications.ts— Windows toast XML with hero image / macOS image attachment.src/main/index.ts— window, tray, IPC wiring, encrypted credential storage.src/preload/index.ts— typedwindow.eufybridge (contextIsolation on).src/renderer/— React UI (login, device grid, event feed, live player, settings).src/shared/types.ts— the IPC contract shared by all layers.
Not affiliated with Anker or Eufy. Use at your own risk and in accordance with Eufy's terms.