Releases: khaleel-git/K9-Web-Protection
Release list
macOS: K10 Web Protection
Free, open-source parental control and web filtering — built exclusively for macOS.
Blocks adult content, malware, and distracting websites silently and persistently in the background, without a monthly subscription.Platform: macOS 12 Monterey or later · Apple Silicon (M1/M2/M3/M4) and Intel
Support This Project
K10 Web Protection is free and open source. To distribute it without Gatekeeper warnings, an Apple Developer ID is required — this costs €99/year.
💛 Donate via PayPal — any amount appreciated
🍎 Goal: Raise €99 for an Apple Developer ID so future releases install without security warnings
⚠️ Important — Read Before Installing
Gatekeeper Warning (macOS Security)
This build is not signed with an Apple Developer certificate. When you download and open the .pkg, macOS will block it with a dialog:
"K10WebProtection-1.0.0.pkg" Not Opened — Apple could not verify it is free of malware…
This is normal. It is a standard macOS requirement for all software distributed outside the App Store. K10 Web Protection is open source — you can inspect every line of code in this repository.
How to open it — two options
Note: On macOS 13 Ventura and later, right-clicking → Open no longer bypasses this warning. Use one of the methods below.
Option A — System Settings (no Terminal required)
- Click Done to close the warning (do not click "Move to Bin")
- Open System Settings → Privacy & Security
- Scroll down to the Security section
- You will see: "K10WebProtection-1.0.0.pkg was blocked"
- Click Open Anyway and enter your Mac password
- Double-click the
.pkgagain — the installer opens normally
Option B — Terminal (one command, fastest)
Open Terminal (search "Terminal" in Spotlight) and paste:
xattr -d com.apple.quarantine ~/Downloads/K10WebProtection-1.0.0.pkgThen double-click the .pkg — no warning will appear.
This is a one-time step. Once installed, the app runs silently with no further warnings.
⚠️ Important — How to Safely Remove K10
K10 Web Protection is designed to be tamper-resistant — it locks its own files to prevent easy removal. Because of this, do not try to drag the app to Trash. That will fail and may leave the system proxy enabled, breaking your internet.
The correct way to uninstall:
- Open K10 Web Protection
- Go to Setup → Password & Settings
- Scroll to Danger Zone
- Click Uninstall K10 Web Protection…
- Enter your admin password — the app closes and removes itself completely
If K10 is already gone from /Applications and you need to force-clean:
# Run this in Terminal (will ask for your password)
sudo bash -c '
launchctl bootout gui/$(id -u) /Library/LaunchAgents/com.k10webprotection.watchdog.plist 2>/dev/null
launchctl bootout gui/$(id -u) /Library/LaunchAgents/com.k10webprotection.plist 2>/dev/null
chflags -R nouchg "/Applications/K10 Web Protection.app" 2>/dev/null
rm -rf "/Applications/K10 Web Protection.app"
rm -f /Library/LaunchAgents/com.k10webprotection.plist
rm -f /Library/LaunchAgents/com.k10webprotection.watchdog.plist
rm -f /usr/local/bin/k10_watchdog.sh
pfctl -a k10webprotection -F rules 2>/dev/null
sed -i "" "/k10webprotection/d" /etc/pf.conf 2>/dev/null
rm -f /etc/pf.anchors/k10webprotection
networksetup -listallnetworkservices | grep -v "An asterisk" | grep -v "^$" | while read svc; do
networksetup -setwebproxystate "$svc" off
networksetup -setsecurewebproxystate "$svc" off
done
rm -rf ~/.k10webprotection
'Download & Install
- Download
K10WebProtection-1.0.0.pkgfrom the release assets below - Right-click → Open → Open (see Gatekeeper warning above)
- Follow the installer — enter your Mac password when prompted
- K10 Web Protection opens automatically when done
Default Admin Password
k9.khaleel.eu
Change it immediately after install: Setup → Password & Settings → New Password
What It Does
K10 Web Protection sits silently between your browser and the internet. Every website request passes through it. Blocked sites never load — the user sees a clean block page instead.
It works across Safari, Chrome, Firefox, and every other browser because it operates at the network layer, not as a browser extension.
Three layers of protection
| Layer | Technology | What it catches |
|---|---|---|
| Content Proxy | Local HTTP/HTTPS proxy on port 8080 | All web requests — blocks by category, domain, URL pattern, or keyword |
| QUIC Firewall | PF packet filter rule | Chrome's HTTP/3 (UDP) traffic that would otherwise bypass the proxy |
| HTTPS Interception | TLS MITM with per-host certificates | Delivers the block page over HTTPS; enforces SafeSearch on Google & Bing |
Features
Content Filtering
Block websites by category from a database of 932,000+ domains across 29 categories:
| Category | Examples |
|---|---|
| Pornography | Adult video sites, escort sites |
| Adult / Mature | Mixed-adult content |
| Gambling | Online casinos, sports betting |
| Malware / Spyware | Known malware-hosting domains |
| Phishing | Fake banking, scam sites |
| Hacking | Exploit tools, warez |
| P2P / Piracy | Torrent sites |
| Proxy Bypass | VPN providers, web proxies, DoH servers |
| Violence / Hate | Extremist content |
| Illegal Drugs | Drug marketplaces |
| Weapons | Illegal firearms sites |
| Social Networking | Facebook, Twitter, TikTok, Reddit |
| Messaging / Chat | Chat platforms |
| Dating | Personals and dating sites |
| … and 15 more | Alcohol, Tobacco, Gambling, LGBT, etc. |
Choose a pre-set Filter Level or go fully custom:
| Level | What it blocks |
|---|---|
| Minimal | Pornography + Malware + Phishing only |
| Moderate | Adds Gambling, Hacking, Drugs, Violence |
| Default | Adds Adult, Nudity, Alt. Sexuality, Dating, Proxy Bypass, and more |
| High | Everything — including Social Media, Forums, Image Search, YouTube |
| Custom | You choose exactly which categories to block |
Focus Mode
Temporarily block distracting social media sites with one click. Built-in sites include Facebook, Instagram, Twitter/X, TikTok, YouTube, Reddit, Discord, Twitch, Snapchat, Pinterest, LinkedIn, Telegram, and more. Add your own custom sites anytime.
Set a countdown timer — Focus Mode automatically deactivates when time is up.
Time Restrictions
Schedule when internet access is allowed. Set a daily time window (e.g. 08:00–22:00) for each day of the week independently. Outside those hours, all non-essential browsing is blocked.
- Supports overnight windows (e.g. 22:00 → 06:00)
- Enable or disable individual days
- Defaults: Mon–Fri 08:00–22:00, weekends configurable
SafeSearch Enforcement
Forces Google and Bing into strict SafeSearch mode — even if someone is logged in to a Google account and has SafeSearch turned off. The SafeSearch preference screen is blocked so it cannot be changed.
Website Exceptions
Override the filter for specific domains:
- Allow list — always let through (e.g. a school website that shares a domain with blocked content)
- Block list — always block, regardless of filter level (e.g. a specific game site)
URL Keywords
Block any URL that contains a specific word or phrase — even on sites not in the database. Examples: sex, nude, torrent, /adult/. Applies to both HTTP and HTTPS connections.
Activity Log
Every blocked request is recorded with the domain, category, and timestamp. View recent activity and a chart of your Top Blocked Categories to see what the filter is catching.
Persistence & Tamper Resistance
K10 is designed to stay running even if someone tries to stop it:
- LaunchAgent restarts the app automatically after a force-quit
- Watchdog process re-enables the system proxy and re-applies firewall rules every 10 seconds if they are removed
- Immutable flag (
uchg) on the binary and launch files prevents deletion without the admin password - Password gate on all changes — disable, uninstall, change settings, and change the password all require the current admin password
How to Use
First Launch
After installation, K10 opens automatically. You'll see the Dashboard:
- Blocked Today — requests blocked since midnight
- Total Blocked — all-time count
- Protection Modules — status of each protection layer
- Top Blocked Categories — chart of what's being caught
Changing the Filter Level
- Go to Setup → Web Categories to Block
- Select a level (Minimal / Moderate / Default / High / Custom)
- Click Save
Setting Up Time Restrictions
- Go to Setup → Time Restrictions
- Toggle Enable Time Restrictions on
- Set a From/To time window for each day
- Enable the days you want restricted
- Click Save
Starting Focus Mode
- Click Focus Mode in the top navigation
- Toggle the sites you want to block on/off
- Optionally set a timer (30 min, 1 hour, 2 hours, etc.)
- Click Start Focus Mode
Adding a Custom Blocked Site
- Go to Setup → Web Site Exceptions
- Under Block List, type the domain (e.g.
reddit.com) - Click Add
Temporarily Disabling Protection
Click Logout → enter your password → protection pauses. Click Enable Protection to resume.
You can set a Disable Delay (Setup → Password & Settings) to require a waiting period before protection can be disabled — useful for prev...
K9 Web Protection V2.0.0
K9 Web Protection v2.0 — Windows & macOS
Inspired by the original K9 Web Protection. Free, open-source, built for the community.
Both platforms are now native desktop apps built with Go and Wails. No Python. No screenshots. No screen recording permission. Protection runs entirely at the network level.
What's New in v2.0
- Rebuilt from scratch — Go + Wails replaces the Python/screenshot engine on both platforms
- Native desktop UI — Dashboard, Block List, Allow List, Keywords, Settings
- No screen recording permission — protection runs at the OS network level
- Works in every browser — Chrome, Firefox, Safari, Brave, any browser, even incognito
- Built-in database — thousands of domains, URL patterns, and keywords embedded in the binary
- Content toggles — individually switch adult content, image search, YouTube, and Safe Search
- Password protection — password-gate all destructive actions
- Focus Mode — timed lock (30 min to 8 hours) that prevents disabling during a session (macOS)
- Disable Delay — require a waiting period before protection can be turned off (macOS)
- Watchdog — background agent re-locks files and re-enables the proxy every 10 seconds (macOS)
- Auto-start for all users — HKLM Run key so protection starts with Windows (Windows)
How it works
Two independent protection layers activate together:
| Layer | Mechanism | What it blocks |
|---|---|---|
| Layer 1 - Hosts | System hosts file | Domains — every app on the system, even offline |
| Layer 2 - Proxy | Local HTTP proxy on 127.0.0.1:8080 |
URLs, keywords, adult database, image search, YouTube |
Both layers survive browser switches, incognito mode, and app changes.
Downloads
| File | Platform | Description |
|---|---|---|
K9WebProtection-setup.exe |
Windows 10/11 | Double-click to install — standard setup wizard |
K9-Web-Protection-macOS.dmg |
macOS 12+ | Drag to Applications, run install.sh |
Default password: k9.khaleel.eu — change it in Settings after first launch.
Windows Install (v2.0)
- Download
K9WebProtection-setup.exe - Double-click and follow the setup wizard
- K9 launches automatically and starts with Windows
The installer requires Administrator privileges. Windows may show a UAC prompt — click Yes.
If SmartScreen warns about unknown publisher:
Click More info then Run anyway. The app is open source — you can review the full source code on GitHub. A verified publisher certificate is pending approval.
macOS Install (v2.0)
Step 1 — Run the installer:
sudo bash /Volumes/K9\ Web\ Protection/install.shThe installer copies the app to /Applications, configures the system proxy, installs the LaunchAgent for auto-start, and locks the binary.
Step 2 — If Gatekeeper blocks the app:
sudo xattr -cr "/Applications/K9 Web Protection.app"Then: System Settings → Privacy & Security → Allow Anyway
Step 3 — Open the app and click Enable Protection.
Requirements
Windows v2.0: Windows 10 or 11 (64-bit) — no additional dependencies
macOS v2.0: macOS 12 Monterey or later — Apple Silicon or Intel — no additional dependencies
Privacy
- All processing is 100% local — no data, URLs, or stats leave your machine
- Built-in blocklists are embedded in the binary at build time
- No telemetry, no accounts, no internet required to function
- Config stored locally:
%APPDATA%\K9WebProtection\(Windows) or~/.k9webprotection/(macOS)
If your internet stops after enabling
Windows — run in PowerShell:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /fOr: Control Panel → Internet Options → Connections → LAN settings → uncheck Use a proxy server
macOS — run in Terminal:
networksetup -listallnetworkservices | grep -v "An asterisk" | grep -v "^$" | while read svc; do
networksetup -setwebproxystate "$svc" off
networksetup -setsecurewebproxystate "$svc" off
doneOr: System Settings → Network → Details → Proxies → uncheck Web Proxy and Secure Web Proxy
Build from source
Windows:
# Requires Go, Node.js, Wails, and NSIS — see windows/README.md
powershell -ExecutionPolicy Bypass -File .\windows\build.ps1macOS:
# Requires Go and Wails
cd mac/app
wails build
cd ..
sudo bash install.shKnown issues
- Port conflict — if something else uses port 8080, the proxy will fail to start. Change the port in Settings.
- Unsigned binary (macOS) — Gatekeeper warning on first launch. Follow Step 2 above.
- Unsigned installer (Windows) — SmartScreen warning until publisher certificate is verified. Application submitted.
Documentation
License
Open source — free for personal and community use.
Disclaimer: K9 is a tool, not a complete solution. It works best combined with intention, accountability, and community support.
Windows: v2.0.0 - Go + Wails + NSIS
macOS: v2.0.0 - Go + Wails
Support: hello@khaleel.eu
Updated: May 2026