Blocky is a DNS proxy and ad-blocker for the local network, written in Go by the developer behind the 0xERR0R GitHub account. It sits between your devices and the public DNS, answering lookups from its own cache, filtering names against ad, tracker and malware lists that it refreshes on a schedule, and forwarding everything else to upstream resolvers that you choose. Unlike a browser extension it protects the whole network — phones, televisions, smart speakers and IoT gadgets that offer no extension mechanism of their own — and unlike a plain hosts file it is considerably more than a blocklist: per-client policies, conditional forwarding, custom local records, DNSSEC and modern encrypted transports (DoT, DoH, DoQ and DoH3) all live in the same single YAML file. It is stateless by design — no database, no temporary files — and ships as one static binary or a multi-arch container image. The current release is v0.35.0 (September 2026).
CNAME found inside the upstream answer, and on the response IP address against IP lists, so a tracker reached through a rebranded alias is still caught.fritz.box to the router and everything else upstream, with an optional fallback), per-client-group upstream resolvers, rewrite rules, and DNS rebinding protection that re-inspects cached answers.sdns://…) accepted for upstream configuration and certificate pinning.blocky query, blocky lists refresh, blocky blocking enable|disable, blocky stats, blocky healthcheck) for scripting and container health checks.Network-wide blocking is the only approach that covers the devices you cannot install software on, and Blocky is the option to reach for when you want that filtering to stay yours: the lists, the upstreams and the query logs all live on your own hardware, and the resolver reports to nobody. Because it is stateless and a single binary, it fits where a full Pi-hole-style stack would be overkill — an OpenWrt router, an ARM single-board computer, a container alongside the rest of a Compose stack, or a Kubernetes cluster through the community Helm chart. The per-client-group model is what sets it apart from simpler blockers: you can enforce a strict list on the children’s devices, keep a light one on your own workstation, and exempt whatever breaks when a domain is blocked — all from the same process and the same configuration file.
printer.lan or nas.home from custom mappings and forward internal domains to the network’s own resolver, with a fallback to the upstream for names that server does not know.Linux, macOS, FreeBSD, NetBSD and OpenBSD builds are published for x86-64, ARM (32- and 64-bit) and MIPS, so it runs on a Raspberry Pi, an OpenWrt router or a small VPS · distributed as a single static binary and as spx01/blocky / ghcr.io/0xerr0r/blocky container images (the image runs as unprivileged UID 100 with NET_BIND_SERVICE permitted, so it starts even under a restricted runtime that drops all capabilities) · community packages exist for the AUR, Alpine, FreeBSD ports, Gentoo GURU, NixOS, Homebrew, TrueNAS SCALE and Kubernetes via Helm · needs to bind port 53 (or a port above 1024 when run unprivileged) plus an HTTP port for the API and metrics.
Apache-2.0 — free and open source, permissive, with no feature gating, account or paid tier. Development is funded by voluntary donations (GitHub Sponsors, Liberapay, Ko-fi, PayPal); Blocky collects no telemetry and no usage statistics.
0xerr0r.github.io/blocky · source on GitHub · releases · also see the Security & Privacy category and the full directory for more tools that keep a network honest, including AdGuard Home for a GUI-first network-wide blocker and Unbound for a validating recursive resolver to put in front of it.