An open-source project has turned the inexpensive ESP32-C3 microcontroller into a DNS-based network ad blocker by storing its blocklist in flash memory instead of loading domain names into scarce RAM. The design is intended to bring Pi-hole-style filtering to hardware without PSRAM while retaining a local dashboard and wireless updates.
The project's central technique converts blocked domains into fixed five-byte, 40-bit FNV-1a hashes. Those hashes are sorted in flash and searched whenever the device handles a DNS request. The developer reports that a list of more than 140,000 domains occupies about 0.7MB, uses roughly 50KB of RAM and can be checked in about 10 milliseconds. A larger configuration can hold about 537,000 entries, subject to the device's partition layout.
This approach trades expressiveness for a smaller footprint. A hash list can match domains and their subdomains, but it cannot reproduce every feature in common filter-list syntax. Regular expressions, wildcards, modifier rules and cosmetic page-element filters are skipped. Hash collisions can also cause an unrelated domain to be blocked, although the developer estimates the 40-bit format produces about one collision at the largest advertised list size.
Flash capacity introduces another compromise. On a 4MB board, keeping two application slots for over-the-air firmware updates leaves roughly 1.3MB for the list, or about 250,000 domains. The larger list requires a single-application partition and therefore gives up firmware OTA. Both firmware and blocklist updates can otherwise be delivered over Wi-Fi after initial USB setup.
The software starts a captive setup portal if it cannot connect to a configured network. Its dashboard exposes status information, while state-changing endpoints require HTTP Basic Authentication. Network firmware updates use a separate password. Those controls matter because a device answering DNS requests occupies a trusted position on a local network.
The repository includes PlatformIO build instructions, a blocklist-building utility and a printable enclosure model for an ESP32-C3 SuperMini. The developer cautions that users need a current PlatformIO release and says a failed source download stops list generation by default, preventing an unexpectedly incomplete filter set.
The design is best understood as a compact engineering demonstration rather than a complete replacement for every established filtering appliance. Its value lies in showing that large exact-domain lists can be searched directly from flash, allowing a small microcontroller to provide useful network-level blocking without external storage or a larger single-board computer.
Because filtering happens at DNS level, the device blocks lookups for listed hosts across clients that use it as their resolver. It does not remove page elements or evaluate content inside encrypted connections. Operators would also need to maintain allowlists and update sources when a broad parent-domain rule blocks something they need.



