A private, no-root firewall with clear per-app network controls.
Built with Kotlin Multiplatform, Compose, and Material 3.
QuietGuard lets you decide which Android apps can use Wi-Fi or mobile data. It runs entirely on your device through Android's VPN API: no root access, remote proxy, account, tracking, or analytics required.
It is a modern Kotlin and Compose evolution of NetGuard, with a redesigned interface and clearer workflows for rules, logs, and settings.
- On-device filtering: Uses Android
VpnService; your traffic is never sent through a QuietGuard server. - Per-app control: Allow or block Wi-Fi and mobile data independently for each app.
- Readable activity logs: Quickly understand what connected, what was blocked, and why.
- Modern adaptive UI: A Compose and Material 3 interface designed for phones, tablets, and foldables.
- Local-first and open source: No account, advertisements, tracking, or analytics.
- Web demo: Explore the interface in a browser without installing the Android app.
If you're coming from the original NetGuard, here are the major differences you'll notice:
- A complete Kotlin and Jetpack Compose rewrite.
- A focused Material 3 interface with clearer controls and feedback.
- Adaptive two-pane layouts for tablets and foldables.
- Redesigned traffic logs that distinguish allowed and blocked connections at a glance.
- Better-organized settings with less legacy clutter.
- A smaller, more intentional feature set centered on the core firewall experience.
QuietGuard operates as a local-only application. It uses Android's built-in VpnService to route your device's traffic through a local sinkhole.
Traffic stays on your device. QuietGuard evaluates outbound connection attempts and allows or drops them according to your per-app rules. The local VPN is the mechanism Android provides for filtering traffic without root; it is not a remote VPN service and does not change your public location.
QuietGuard dynamically scales to take advantage of larger screens, offering a dedicated two-pane layout for comfortable viewing on tablets and foldables.
- JDK 17 or higher.
- Android Studio (current stable) with the Android SDK (API 26+ target).
./gradlew :app:assembleDebug
./gradlew :app:installDebugYou can also build a release variant configured for production checks and shrinker behavior by running ./gradlew :app:assembleRelease.
./gradlew :webApp:wasmJsBrowserDevelopmentRunProduction wasm bundle:
./gradlew :webApp:wasmJsBrowserDistributionSimulate the CI build locally:
./scripts/simulate-web-ci.shDeploy manually (after vercel login or with a token):
./scripts/verify-web-deploy.sh --ci
VERCEL_TOKEN=... VERCEL_ORG_ID=... VERCEL_PROJECT_ID=... ./scripts/deploy-web-vercel.shPushes and pull requests run the Android and web checks in GitHub Actions. The Vercel Git integration deploys previews from branches and deploys main to quietguard.vercel.app. The verified bundle can also be deployed manually with ./scripts/deploy-web-vercel.sh.
- This app is local-first and does not proxy traffic through a third-party backend.
- Some device manufacturers apply stricter VPN policies; behavior can vary.
- Certain background/network capabilities depend on notification, battery optimization, and device permissions.



