Warden is Purge.cc's DNS resolver: it brings the blocklists home and keeps every device encrypted, private, and under your control.
A DNS resolver for your home or company: it answers every query on your own network and drops trackers and threats before they ever resolve.
See how it works →Written in Rust with no external runtime dependencies — one static binary, tuned to resolve fast on hardware as small as a Pi.
See how it's built →Security is the design constraint, not a feature: encrypted upstreams, validated answers, and a resolver that fails closed rather than leaking.
See the features →Released under AGPL-3.0 — free to run, fork, audit and modify, and any hosted derivative has to stay open too.
See the code →Purge.cc lists ship with Warden — yours to enable. Pick the ones you want, add any blocklist you already trust, or write the rules yourself.
See how rules work →The whole configuration lives in one TOML file. Version it, diff it, deploy it — no hidden state, nothing to reproduce by clicking.
See the config →One resolver, built to filter DNS the secure, efficient way — simple enough for a homelab on a Pi or a VM, and ready to clean an organization's traffic at scale.
Warden for the home network. It runs on a Raspberry Pi, a VM, or a NAS and protects every device that touches the Wi-Fi — no cloud, no account, no fees.
The same resolver, at organization scale. Per-department policies, filtering without recording user tracking, and logs built for debug and control — on hardware you run.
No web app to open. Dashboard, query log, network, filters — the whole resolver on one terminal, even over SSH from the router.
The opening dashboard is the whole network at a glance: block rate, query volume and resolver health. Counters update as queries land, so you can keep traffic under watch in real time.
The live log is every query from every device, as it lands. Isolate a host, read the type and the result, then write an allow or a block from the row itself — onto a list you can mount on a profile.
Warden already sees every client. Map a host so you recognize it, catalog it by owner, type and department, then read how much it talks and how much of that is blocked.
Profiles pick the lists. Attach a profile to a group of devices — or to a whole subnet — then decide, per profile, whether a feed is a blocklist, an allowlist, or silent.
Every layer is built to keep resolution safe — how it blocks, how it encrypts, how you configure it, and how you stay in control.
Trackers hide behind friendly names. A list you didn't write can try to un-block itself. Warden walks the chain and sandboxes what it didn't author.
CNAME chasing.
Warden walks the CNAME chain — up to 16 hops — and blocks the tracker even when it hides behind a first-party name.
sourcesrc/filter/cname.rs
External-list sandbox.
Lists you subscribe to cannot smuggle an allow, $important, or regex rule. Only the rules you write get those powers.
sourcesrc/lists/parser.rs
The hop to the upstream can be encrypted. Queries that look like a tunnel get refused.
DNS over HTTPS or TLS.
Cache misses can go out over DoH or DoT — you pick the upstreams. A fresh install uses plain DNS.
sourcesrc/upstream/resolver.rs
DNS tunneling detection.
A burst of unique, cache-missing names under one domain is the usual shape of DNS exfil. Warden refuses those queries. On by default.
sourcesrc/security/tunneling.rs
One resolver, many people and many names. Everything bends to your rules — without touching the global lists.
Per-person policies.
Each profile picks its lists, exceptions, and block-all. Unknown clients take the default profile — or get refused if you leave it unset.
sourcesrc/config/schema/profile.rs
Custom local DNS.
Create internal aliases — nas.home, printer.home — resolved on the LAN. A and AAAA, plus auto PTR.
sourcesrc/dns/local.rs
Policy that follows the clock, and a resolver that devices can't walk around.
Time-based schedules.
A schedule swaps a device or group onto another profile for a window — nights, school hours, weekends. Midnight wrap included.
sourcesrc/config/schema/schedule.rs
Anti-bypass.
Name the DoH or DoT resolvers you don't want resolved. Queries for those names are refused, and a blocklist cannot override them. Warden ships no list of its own — you add the names.
sourcesrc/security/anti_bypass.rs
One command. The installer detects your system and walks you through the rest. Packages and a source build are here if you want a specific route.
$ curl -fsSL https://get.purge.cc | sudo sh
Clone the repository, run cargo build, and launch the binary yourself.
Build guide →Install the .rpm with dnf on Fedora 40 or newer, then start the service.
Install on Fedora →Install the .deb with apt on Debian 13+ or Ubuntu 24.04+, then start the service.
Install guide →