Pi-hole FTL v6.5, Web v6.4.1 and Core v6.4 Released!

Pi-hole FTL v6.5, Web v6.4.1 and Core v6.4 Released!

As always, please read through the changelogs before updating with pihole -up

Don’t forget, you can use Teleporter to export your configuration. It can be found under the settings menu of the web interface or on the command line with pihole-FTL --teleporter

This release has also been tagged on Docker as 2026.02.0

Highlights

Security fixes

Two security vulnerabilities in the web interface have been patched in this release.

Performance improvements

Faster startup (FTL #2725)

FTL now imports historical queries from the database asynchronously on startup. Previously, DNS resolution was blocked until the entire query history had been loaded into memory. Now, FTL begins accepting DNS queries immediately and imports history in a dedicated background thread. The garbage collector is held off until the import is complete to ensure data consistency.

Low-memory hardware optimizations (FTL #2757)

A new database.forceDisk configuration option forces FTL’s in-memory SQLite3 database to live on disk instead of in RAM. This can notably reduce FTL’s memory footprint, which is beneficial on resource-constrained hardware such as older Raspberry Pi models. On NVMe-backed systems no measurable performance difference was observed, though some slowdown may be seen on slower storage.

Faster gravity updates (FTL #2710)

Several cumulative efficiency gains have been applied to the main domain validation loop that runs during pihole -g. While each individual improvement is modest, they add up across every entry in your blocklists and allowlists:

  • A lookup table now validates domain characters using a single comparison per character, replacing multiple branching comparisons
  • IP address testing is short-circuited: IPv4 tests only run if the token starts with a digit, and IPv6 tests only run if a colon is present within the first 5 characters
  • The unicode BOM check is now performed once per file rather than once per line

In testing with ~5 million domains across several lists, gravity update time dropped from ~27s to ~23s (roughly a 16% reduction in real time, and ~22% reduction in CPU time).

FTL v6.5

What’s Changed

  • Tweak undocumented wait-for option subtly by @DL6ER in #2707
  • update gravity – improve domain validation processing speed by @rrobgill in #2710
  • Update embedded SQLite3 to 3.51.1 by @DL6ER in #2731
  • Update embedded dnsmasq to 2.92rc1 by @DL6ER in #2730
  • Fix documentation – Do not use equal sign with pihole-FTL --config command by @rdwebdesign in #2736
  • Add dns.cache.rrtype by @Manakuremati in #2740
  • Enhancements to the documentation markdown generator by @PromoFaux in #2741
  • Network Overview – obtain MAC and hostname from dhcp.leases by @rrobgill in #2727
  • fix: make get_domains parameters optional by @tien in #2278
  • Escape unprintable characters in invalid host names by @DL6ER in #2601
  • Implement better allOf handling in API verifier by @DL6ER in #2745
  • Update build containers to Alpine 3.23 by @DL6ER in #2743
  • Add option to hide network connection errors by @DL6ER in #2749
  • Harden default Content Security Policy (CSP) by @Erasure5959 in #2754
  • Fix computation of NTP server’s root delay by @DL6ER in #2760
  • Teleporter: Fix for custom gravity.db path by @DL6ER in #2758
  • Upgrade embedded Lua to 5.5 by @DL6ER in #2626
  • Add missing [forwarded] property in GET /api/history/database by @DL6ER in #2750
  • Update SQLite3 to 3.51.2 by @DL6ER in #2761
  • Low-memory hardware optimizations by @DL6ER in #2757
  • Reduce startup delay by @DL6ER in #2725
  • home.arpa and internal TLDs may be non-local without revServer by @DL6ER in #2772

New Contributors

Full Changelogv6.4.1…v6.5

Web v6.4.1

What’s Changed

  • Set the end date for live query update to end of epoch by @rrobgill in #3677
  • Improve initial loading of Query Log by @DL6ER in #3715

Full Changelogv6.4…v6.4.1

Core v6.4

What’s Changed

Full Changelogv6.3…v6.4