Desktop app for enabling a “lockdown” mode and managing per-domain allow/deny lists. On macOS it programs PF and `/etc/hosts`; on Windows it programs `netsh advfirewall` rules and `hosts`, keeping the UI, backend, and system rules in sync.
- One-click lockdown that blocks all outbound traffic except whitelisted domains.
- Per-domain allow/deny lists with normalization to avoid duplicates.
- macOS: PF anchor +
/etc/hostsentries; Windows:netsh advfirewallrules +hosts. - Electron shell bundles the React frontend and backend service for offline use.
frontend/— React + Vite UI (Tailwind 4, Zustand, Radix).backend/— Bun/Express service that applies firewall/hosts rules.desktop/— Electron wrapper that runs the backend and serves the packaged UI.bun.lock,package.json— workspace tooling.
- Bun ≥ 1.3
- Node.js ≥ 18 (needed by Electron and when running the backend as a service)
- macOS 12+ or Windows 10/11 for system rule control
- Windows: run KidsProtect (or your dev terminal) as administrator so firewall and hosts changes can be applied.
bun install
bun dev # runs frontend, backend, and desktop togetherThe backend listens on http://localhost:8787 and the frontend dev server on http://localhost:5173 by default.
# frontend
cd frontend && bun run build
# backend
cd backend && bun run build
# desktop (Electron)
cd desktop && bun run dist # or from desktop: bun run build-allArtifacts land in desktop/release/ (DMG on macOS, NSIS installer on Windows when built on that platform).
- Download the latest release from GitHub Releases (DMG for macOS, NSIS installer for Windows).
- macOS: open the DMG and drag KidsProtect to Applications. First launch may prompt for admin rights to apply PF/hosts rules.
- Windows: run the installer. The app requests elevation at launch so UAC will prompt once, allowing it to create firewall rules and update
hosts. The backend listens on localhost for the Electron UI.
- The backend is unauthenticated; run it bound to
127.0.0.1and keep it firewalled when elevated. - Avoid shipping personal state; do not bundle local
backend/state.jsonin releases if it contains your data.
KidsProtect is provided "as is" without warranty of any kind. It modifies system networking rules and may disrupt connectivity or other software. Use at your own risk; ensure you have the necessary admin rights and backups. See the GPL-3.0 LICENSE for warranty and liability terms.
See Contributing.md for development flow and PR guidelines.
GPL-3.0 — see LICENSE.

