# A Pi-hole-class DNS ad-blocker on an ESP32-C3 (no PSRAM)

DevFeed: [A Pi-hole-class DNS ad-blocker on an ESP32-C3 (no PSRAM)](<https://devfeed.tech/articles/a-pi-hole-class-dns-ad-blocker-on-an-esp32-c3-no-psram-66785.md>)

Original publisher: [Read original article](<https://blog.adafruit.com/2026/10/07/a-pi-hole-class-dns-ad-blocker-on-an-esp32-c3-no-psram/>)

Author: Anne Barela

Published: 2026-10-07T19:18:02Z

Content type: news

Language: en

Sources: [Adafruit Industries](<https://devfeed.tech/sources/adafruit-industries-makers-hackers-artists-designers-and-engineers.md>)

Topics: [ESP32](<https://devfeed.tech/topics/esp32.md>), [PSRAM](<https://devfeed.tech/topics/psram.md>), [Domain Name System (DNS)](<https://devfeed.tech/topics/dns-resolution-process.md>), [uBlock Origin Filters](<https://devfeed.tech/topics/ublock-origin-filters.md>)

Tags: [ad-blocker](<https://devfeed.tech/tags/ad-blocker.md>), [captive-portal](<https://devfeed.tech/tags/captive-portal.md>), [dashboard](<https://devfeed.tech/tags/dashboard.md>), [dns](<https://devfeed.tech/tags/dns.md>), [esp32](<https://devfeed.tech/tags/esp32.md>), [esp32-c3](<https://devfeed.tech/tags/esp32-c3.md>), [espressif](<https://devfeed.tech/tags/espressif.md>), [flash](<https://devfeed.tech/tags/flash.md>), [ota](<https://devfeed.tech/tags/ota.md>), [partition-table](<https://devfeed.tech/tags/partition-table.md>), [pihole](<https://devfeed.tech/tags/pihole.md>), [psram](<https://devfeed.tech/tags/psram.md>), [udp](<https://devfeed.tech/tags/udp.md>)

## AI overview

A DNS ad blocker for the ESP32-C3 stores sorted 40-bit FNV-1a hashes in flash and binary-searches them, fitting more than 140,000 domains in about 0.7 MB while using about 50 KB of RAM. It also includes a UDP DNS sinkhole, web dashboard, captive portal setup, and OTA updates. The 4 MB board can hold roughly 250,000 domains with dual app slots; the larger 537,000-domain list requires a single-app partition table.

## Source excerpt

Zed (@M-Abozaid) published a DNS ad-blocker on GitHub that runs on a $2 ESP32-C3 with no PSRAM. Most ESP32 DNS sinkholes load blocklist domain strings into RAM, which is why they need PSRAM. This one stores each domain as a sorted 40-bit FNV-1a hash in flash and binary-searches it. Over 140,000 domains fit in about [...]