The guardian of your network.

Warden is Purge.cc's DNS resolver: it brings the blocklists home and keeps every device encrypted, private, and under your control.

warden  ·  tui live
A DNS Filter

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
Built in Rust

Written in Rust with no external runtime dependenciesone static binary, tuned to resolve fast on hardware as small as a Pi.

See how it's built
Built for Security

Security is the design constraint, not a feature: encrypted upstreams, validated answers, and a resolver that fails closed rather than leaking.

See the features
Open Source

Released under AGPL-3.0 — free to run, fork, audit and modify, and any hosted derivative has to stay open too.

See the code
Your Own Lists or Rules

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
Declarative

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
From lab to enterprise

One base, ready for every scale and challenge.

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.

HOMELAB

Homelab

Self-hosted · one network

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.

  • 01Single binary — drop it on a Raspberry Pi, a VM, or a NAS.
  • 02Per-person profiles and time slots, from the living room to the kids' room.
  • 03TUI via SSH — live logs and block rate straight from the router.
  • 04Your rules, your blocklists. Nothing ever leaves the network.
Explore homelab features
ENTERPRISE

Enterprise

Self-hosted · on-prem

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.

  • 01Keep user privacy on — filtering stays active, tracking is not recorded.
  • 02Per-department policies, by group or VLAN, from the TUI.
  • 03Extensive logging — every query and every rule, so you can debug and stay in control.
  • 04On-prem or private cloud. Your DNS traffic stays yours.
Explore enterprise features
A Built-in TUI

A TUI to help you monitor.

No web app to open. Dashboard, query log, network, filters — the whole resolver on one terminal, even over SSH from the router.

warden  ·  dashboard live
Warden TUI · dashboard Warden TUI · query log Warden TUI · network Warden TUI · filters
  1. Global Monitor

    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.

    • Block rate — 1h, 8h, 24h and 7d, side by side, so you can see how the filter is holding and spot an anomaly before it settles in
    • Live volume — query rate and record types as they land, so a quiet evening is obvious, and a sudden climb or a burst of unusual types is the first sign a device is misbehaving
    • Top offenders — which list is catching the most, and which devices are sending the most queries, so you can start to understand what the network is actually doing
    • Resolver health — cache hit rate, peak load and daemon poll, so you know the resolver is answering — not just that the filter is blocking
  2. Every Query in Detail

    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.

    • Every query — time, client, domain, type, result and RTT, so you can see who asked, what was decided, and how long it took
    • Filter by device — every query from one host, then narrow by domain, time, or blocked-only, so you can follow a single device without the rest of the LAN in the way
    • Query type — A, AAAA, HTTPS and the rest on each row, so you can tell IPv4 lookups from IPv6, and see how a device is trying to connect
    • Act on the row — take the name on the row and write it into a custom allow or block list, then mount that list on the profiles that should use it
  3. Document Your Network

    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.

    • Map a device — pick a host on the LAN and give it a name, so you read kids-ipad, not 192.168.1.107
    • Catalog in layers — owner, type, department and group on the same host, so you can segment kids from work laptops, or one department from another
    • Traffic and block rate — queries today and blocked % on every row, so you can see what a device is actually doing, not only that it exists
    • The whole LAN — mapped and still unmapped, last seen a minute ago or last week, so a new phone or a forgotten gadget cannot hide
  4. Build Your Own Rules

    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.

    • Profiles on groups — write a profile and attach it to a group of devices, so the kids' tablets and the work laptops do not share one policy
    • Flip the nature — a list that blocks on one profile can allow on another, so the same feed is not the same rule everywhere
    • One list, many settings — inherit, invert, or make it inert for a profile, without copying the file
    • A whole subnet — attach a profile to a CIDR, so a lab range or the guest Wi-Fi gets the rules without naming every host
Under the hood

Developed with security
at the core.

Every layer is built to keep resolution safe — how it blocks, how it encrypts, how you configure it, and how you stay in control.

Blocking methods

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.

Disguised trackers don't get through.

CNAME chasing.

Warden walks the CNAME chain — up to 16 hops — and blocks the tracker even when it hides behind a first-party name.

source src/filter/cname.rs

A subscribed list can't un-block itself.

External-list sandbox.

Lists you subscribe to cannot smuggle an allow, $important, or regex rule. Only the rules you write get those powers.

source src/lists/parser.rs

Security

The hop to the upstream can be encrypted. Queries that look like a tunnel get refused.

Encrypted DNS, when you choose it.

DNS over HTTPS or TLS.

Cache misses can go out over DoH or DoT — you pick the upstreams. A fresh install uses plain DNS.

source src/upstream/resolver.rs

Tunnels get refused, not resolved.

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.

source src/security/tunneling.rs

Configurable

One resolver, many people and many names. Everything bends to your rules — without touching the global lists.

Different profiles for different people.

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.

source src/config/schema/profile.rs

Name your own boxes.

Custom local DNS.

Create internal aliases — nas.home, printer.home — resolved on the LAN. A and AAAA, plus auto PTR.

source src/dns/local.rs

Control

Policy that follows the clock, and a resolver that devices can't walk around.

Bedtime is bedtime.

Time-based schedules.

A schedule swaps a device or group onto another profile for a window — nights, school hours, weekends. Midnight wrap included.

source src/config/schema/schedule.rs

Devices can't skip the filter.

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.

source src/security/anti_bypass.rs
Install