- Overview
- Features
- Screenshots
- App concept
- Requirements
- Development setup
- Running the application
- Testing the application
- Formatting project code
- Releasing the application
- F-Droid metadata
- Licence
- Contributing
- Developer notes
- Other projects
- Support
ClearNet is a free and open-source content-control app built with Flutter and Android system services. It blocks harmful websites and chosen apps and needs a PIN before it can be switched off or uninstalled.
| Feature | Description |
|---|---|
| Uninstall protection | Setting the uninstall PIN asks for device administrator access, which stops Android uninstalling ClearNet. Settings shows whether protection is active and ClearNet asks again if access is turned off. With an uninstall PIN set, opening the Settings screens that could remove it (its device administrator page, the deactivate dialogue or its accessibility page) shows the uninstall PIN screen instead. The correct PIN allows them for 2 minutes. |
| App blocking | Chosen apps are closed when they're opened. |
| Website blocking | A local VPN checks every DNS lookup on the device. Lookups for blocked domains fail straight away; everything else is forwarded to your DNS server. Comes with a built-in blocklist of about 950,000 adult domains from The Block List Project and you can add your own. Whitelisted sites are never blocked. |
| Keyword filtering | Blocks domains that contain your keywords and shows the blocked page when they appear on screen in a browser. |
| Browser checks | The accessibility service checks the address bar and page text in any web browser, including Brave, Firefox Focus, Opera Mini and Tor, and shows the blocked page when a blocked domain or keyword appears. These checks keep working when another VPN app is on. |
| SafeSearch | Google, Bing and YouTube searches are sent to their SafeSearch versions. Other Google services, such as Gmail and the Play Store, work normally. |
| Blocklist import and export | Back up and restore your domains and keywords as a .backup file (JSON inside), e.g. clearnet-backup-20261024-143205.backup. |
| Custom DNS | Use your own DNS server (e.g. Quad9). By default, allowed lookups go to UncensoredDNS, AdGuard DNS or Quad9. |
| App disguise | Show ClearNet as a Calculator or Notes app on the home screen. |
| App lock | Optionally ask for an 8 to 16 digit app PIN when ClearNet starts. ClearNet closes itself after you leave it (immediately, after 1 minute or after 5 minutes), so the PIN is needed again. The app PIN must be different from the uninstall PIN. |
| Forgotten app PIN | Tap Forgot PIN? on the PIN screen. With an uninstall PIN set, entering it lets you set a new app PIN. Without one, the app PIN is removed after a 24-hour wait; entering the right PIN before then cancels the reset. |
| Settings PIN lock | Settings can be locked behind the app PIN. |
| Disable confirmation | Turning blocking off requires typing three sentences of hard words exactly, with no word repeated. Any mistake starts again with new sentences. |
| Statistics | Daily, weekly and monthly counts of blocked websites and apps. |
| Themes | Light, dark and system themes. |
| Privacy | No accounts, analytics or adverts. Settings and lists stay on the device. |
| Updates and links | GitHub update checker (not in F-Droid builds), changelog, source code and donation links in Settings. |
-
Translations - move strings to flutter_localizations + ARB files then, host them on Weblate (free for FOSS)
-
Add more public lists like StevenBlack and OISD alongside The Block List Project, recording each list's source and licence. Some can be CC-BY-SA which comes with attribution and share-alike duties.
| Protection | Blocked content | Blocked apps | Settings (1) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Settings (2) | Settings (3) | Guide | Blocked page |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Changelog | Disable confirmation | App disguise | Support |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Reset content |
|---|
![]() |
| Protection | Blocked content | Blocked apps | Settings (1) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Settings (2) | Settings (3) | Guide | Blocked page |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Changelog | Disable confirmation | App disguise | Support |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Reset content |
|---|
![]() |
ClearNet targets parents who want a safe device environment for their kids and organisations that need basic app and site filtering.
- A parent installs ClearNet.
- They set an uninstall PIN and allow device administrator access when asked, so ClearNet cannot be uninstalled without the PIN.
- They choose which apps and websites to block.
- They switch blocking on. ClearNet combines the built-in blocklist with their entries and starts a local VPN that checks every DNS lookup on the device:
- Blocked domains and domains containing blocked keywords get a "not found" answer, so they do not load.
- Google, Bing and YouTube get their SafeSearch addresses.
- Everything else is forwarded to the chosen DNS server (UncensoredDNS, AdGuard DNS or Quad9 by default).
- In any web browser, the accessibility service also checks the address bar and page text and shows ClearNet's blocked page when something matches.
- Private DNS: if Android's Private DNS is set to a specific provider, websites won't load while blocking is on. ClearNet stops encrypted DNS so it cannot be used to get around the filter. Set Private DNS to Off or Automatic.
- Secure DNS in browsers: encrypted DNS to well-known providers (such as Google, Cloudflare, Quad9 and NextDNS) is blocked, so browsers fall back to normal DNS, which ClearNet filters.
- Other VPNs: Android allows one VPN at a time, so ClearNet's DNS filter stops when another VPN app is turned on. ClearNet shows a notification when this happens. App blocking and the browser checks keep working, but SafeSearch isn't enforced until ClearNet's VPN is turned back on.
- After a restart or update: blocking starts again by itself if it was on. If Android stops it anyway, open ClearNet once. For the strongest protection, also set ClearNet as the Always-on VPN in Android's VPN settings.
- Flutter SDK: Stable channel (
^3.8.1or higher). - Dart SDK:
^3.8.1. - Android Studio / Android SDK: For compilation and testing.
# Fetch all dependencies
flutter pub get
# Check environment health
flutter doctor
flutter clean
flutter pub get
flutter runflutter runstarts a local server instance and provides you with a clickable UR f you do not have Google Chrome installed locally or prefer to preview/debug your web application inside your choice of an alternate browser (like Firefox or Brave), flutter run -d web-server OR Identify the path to ghromee $(which google-chrome || which chromium-browser || which chromium)
Replace '/usr/bin/google-chrome' the with the result echo 'export CHROME_EXECUTABLE="/usr/bin/google-chrome"' >> ~/.bashrc source ~/.bashrc
cd ~/Android/Sdk/cmdline-tools/latest/bin/
./sdkmanager --licenses
flutter testdart format .
dart format lib test
flutter analyze
# Preview proposed changes
dart fix --dry-run
# Apply lint
dart fix --apply
fdroid lint
reuse lint
# Sort package imports
dart run import_sorter:mainThis project uses GitHub Actions for automated releases. Pushing a tag matching v* to the main branch will trigger a build and create a release with a signed APK and app bundle.
git tag v1.0.0
git push origin v1.0.0This project includes Fastlane compatible metadata under fastlane/metadata/android/en-GB/ to ensure F-Droid repository listing compliance.
The F-Droid build recipe lives in metadata/com.asptechinc.clearnet.yml.
F-Droid delivers app updates itself, so F-Droid builds hide the in-app GitHub update checker. This is controlled by a compile-time flag:
flutter build apk --release --dart-define=FDROID_BUILD=trueBuilds without the flag (such as GitHub releases) keep the update checker.
This project is licensed under the MIT Licence.
Contributions are welcome! Please read CONTRIBUTING.md for guidelines on code style, testing and pull requests.
For a detailed breakdown of technical workflows, local testing guides and setup steps, see the DEVELOPER_NOTES.md file.
View other projects by ASPTechnologies Incorporation on GitHub.
Developed by ASPTechnologies Incorporation.


























