v2.0.0-rc10

emscripten-core/emscriptenv2.0.0-rc10Dec 22, 2025by qdm12

Upgrading?

Release notes summary

Release candidate 10 introduces DNS-over-TLS connection pooling for TCP reuse, along with new health server and rebinding protection configuration options. It also fixes local DNS handling, IPv6 error reporting, and updates the Grafana dashboard. The release includes Go API breaking changes to the nameserver package.

Key Highlights

  • DNS over TLS now uses a pool of connections to reuse TCP connections when possible
  • New HEALTH_SERVER_ADDRESS option defaulting to 127.0.0.1:9999
  • New REBINDING_PROTECTION_EXEMPT_HOSTNAMES option
  • Filter middleware now logs blocked elements with a reason
  • i/o timeout errors are logged at debug level by default

Breaking Changes

  • pkg/nameserver GetDNSServers no longer returns localhost IPs when no nameserver is found
  • pkg/nameserver GetDNSServers now returns an eventual error
  • pkg/nameserver GetDNSServers returns []netip.Addr instead of []netip.AddrPort

New Features

  • DNS over TLS connection pooling for TCP reuse
  • HEALTH_SERVER_ADDRESS configuration option
  • REBINDING_PROTECTION_EXEMPT_HOSTNAMES configuration option
  • Debug-level logging for common i/o timeout errors
  • Filter middleware logs blocked elements with reasons

Full Release Notes

## Features

- DNS over TLS now uses a pool of connections to re-use TCP connections when possible (#150)
- `HEALTH_SERVER_ADDRESS` option, defaulting to `127.0.0.1:9999`
- by default log i/o timeout errors are logged at debug level because these are fairly common
- `REBINDING_PROTECTION_EXEMPT_HOSTNAMES` option
- `pkg/middlewares/filter`: log blocked elements with a reason

## Fixes

- `internal/local`: "site" and "network" TLDs are public, not local
- `pkg/middlewares/localdns`:
  - do not log request twice on errors
  - do not debug log NXDOMAIN coded responses since these happen often especially with search domains
- `internal/support/ipv6`: handle Windows error message
- Grafana dashboard plain DNS section updated

## Go API breaking changes

- `pkg/nameserver`: `GetDNSServers`
  - does not return localhost IPs if no nameserver is found 
  - returns an eventual error
  - returns []netip.Addr instead of []netip.AddrPort since it can only be an ip address without port

## Maintenance

- Grafana JSON dashboard upgraded to newer schema version 3
- Fix documentation URLs and CI links check
- bump markdownlint from v11 to v21

Related Repositories