April 2026 Releases
This page archives releases published in April 2026.
2026-04
v0.5.1
Release Scope
- Patch Release focused on
any_matchquick-setup dependency analysis andquery_recorderpagination and cleanup boundaries.
Changes
- Fixed
any_matchdependency analysis so quick-setup matcher expressions are preserved and expanded correctly. Expressions such asqname $providerandqtype 1now keep their original meaning during startup and dependency analysis. - Fixed
query_recorderretention cleanup and pagination cursor boundaries. Cleanup cutoff time now uses real timestamps, and paginated listing fetches one extra row to detect whether another page exists. - Adjusted
query_recordertimestamp storage and read paths to avoid unnecessary unsigned conversions around record creation time. - Updated the
upgradeCLI default cache and backup directories to./upgrade-cacheand./upgrade-backups, and fixed the matching default-value tests.
Compatibility and Upgrade Notes
- This release does not introduce new configuration fields. Existing
v0.5.0configurations can be upgraded directly. - Upgrading to
v0.5.1is recommended for deployments that usequery_recorderor quick-setup expressions insideany_match. query_recorderremains Experimental, and its API surface or configuration fields may still change in future releases.
v0.5.0
Release Scope
- Minor Release adding query auditing, aggregate matcher support, and HTTP/3 discovery improvements.
Changes
- Added the
query_recorderexecutor for persisted query logging with retention cleanup, plus plugin API endpoints for stats, paginated record listing, and single-record details. - Added the
any_matchmatcher so one matcher can aggregate multiple matcher expressions and return true when any branch matches, including negated expressions like!$tag. - When HTTP/3 is enabled on the HTTP server, HTTP/2 responses now automatically advertise
Alt-Svc: h3=":<listen-port>"; ma=86400so clients can discover and upgrade to H3. - Fixed dependency tracking for negated matchers, for example
!$has_resp, insidesequence, so quick setup and dependency analysis no longer miss those references (Closed #75). - Unified time handling around
jiff + AppClock, making cron scheduling, log time formatting, and system-time access paths more consistent.
Compatibility and Upgrade Notes
- This release does not require global config migrations. Existing
v0.4.xconfigurations can be upgraded directly. query_recorderis currently Experimental. Its API surface and configuration fields may change in upcoming minor releases.- To enable query auditing, insert
query_recorderinto thesequencechain and tune retention parameters according to disk budget. - For automatic HTTP/3 discovery by DoH clients, ensure
enable_http3: trueis set and TLS certificate/key are configured correctly.
v0.4.2
Release Scope
- Patch Release fixing connection release in upstream race scenarios and adding automatic upgrade support.
Changes
- Fixed an issue where some connections were not properly released in upstream race scenarios, such as when multiple concurrent upstreams were configured or fallback was enabled.
- Added the
upgradeCLI tool and plugin to support automatic updates and binary replacement. - When the application is running as a Linux service,
upgradecan also restart it automatically after the update.
Compatibility and Upgrade Notes
- This release does not introduce new required configuration fields.
- Deployments that rely on concurrent upstream racing, fallback, or automatic upgrade flows can upgrade to
v0.4.2.
v0.4.1
Release Scope
- Patch Release fixing an upstream
request_mapmemory leak and improving DoH HTTP response compatibility.
Changes
- Fixed an upstream
request_mapmemory leak during connection close, request timeout, and abnormal cleanup paths, preventing pending query waiters and senders from being retained over time. - Reworked
request_mapinto a fixed-capacity sparse table so each connection no longer reserves the fullu16DNS ID space. - Fixed DoH response header generation so
application/dns-messagereplies carry the correctContent-Length, andCache-Control: max-age=...is derived from the actual DNS TTL. - Common
NoError,NXDOMAIN, andNODATADoH responses now derive HTTP cache lifetime from answer TTLs or SOA negative TTLs. Refusal-style replies no longer advertise misleading cache headers.
Compatibility and Upgrade Notes
- This release does not add new configuration fields. Existing
v0.4.0configs can be upgraded directly tov0.4.1. - Because this release fixes an upstream
request_mapmemory leak, upgrading tov0.4.1is recommended for long-running deployments with many persistent or concurrent upstream connections. - For DoH access through
dig +https://..., browsers, reverse proxies, or HTTP caches, the upgrade also improves HTTP response compatibility.
v0.4.0
Release Scope
- Minor Release adding provider-scoped hot reload and reworking provider composition and initialization.
Changes
- Added the
reload_providerexecutor plus the provider-scoped management APIPOST /plugins/<provider_tag>/reload. After downloading or overwriting rule files, OxiDNS can refresh only the affected providers instead of forcing a full application reload. - Reworked provider composition so
domain_setandip_setcompile only their own local rules and keep querying referenced providers fromsetsat runtime. - Runtime initialization now skips providers that have no live dependents, so unused rule sets no longer spend startup time on file reads, dat parsing, or memory allocation.
- Expanded quick-setup dependency analysis into runtime reference paths such as
sequenceandcron, making plugin dependency graphs and init ordering more accurate. - Added docs for targeted provider reload through both the API and the new
reload_providerexecutor, including chained download-and-refresh examples.
Compatibility and Upgrade Notes
- Existing workflows that run
downloadand then a fullreloadcan usually switch todownload -> reload_providerto avoid rebuilding unrelated plugins. reload_provideronly refreshes an existing provider's config snapshot and external data files. Ifconfig.yaml, provider tags,setstopology, or the plugin list changes, keep using the fullreloadpath.- Providers that are not reachable from any live runtime path are no longer inserted into the runtime registry. Deployments that rely on a provider's runtime API surface or behavior must reference it directly or indirectly from a live
server,executor, ormatcher.
v0.3.2
Release Scope
- Patch Release reducing false warning logs from normal connection lifecycles and improving debug output.
Changes
- Adjusted UDP, TCP, DoT, and DoQ upstream pool initialization so OxiDNS no longer pre-creates idle connections during startup, reducing false EOF / reset warnings when upstreams close idle sockets on their own.
- Expected TCP upstream lifecycle events such as EOF, connection recycling, and invalid-connection eviction are now logged at
debuginstead ofwarn. - Downgraded DoH server-side TLS, HTTP/2, and HTTP/3 handshake aborts plus client-closed response-send failures to
debug. - Debug request/response logging now prints DNS
questions, message IDs, EDNS data, and answers directly.Recordnow has a more readableDebug/Displayrepresentation.
Compatibility and Upgrade Notes
- This release does not introduce new configuration fields. Existing
0.3.xconfigs can be upgraded as-is. - Warning-count based alerting should see a noticeable drop in noise after
v0.3.2because normal upstream disconnects and DoH client aborts are no longer treated as warnings.
v0.3.1
Release Scope
- Patch Release fixing
sequencebuiltin control-flow semantics and completing release metadata.
Changes
- Fixed
sequencebuiltin control-flow semantics soaccept/rejectstop the current chain consistently,returnexplicitly resumes the caller, and nestedjump/gotobehavior is more consistent. - Removed the old internal flow-state dependency from control-flow propagation and now relies on
ExecStepdirectly, reducing ambiguity whensequence,with_nextexecutors, and nested calls are combined. - Expanded unit and integration coverage around
sequence, includingaccept,return,reject,jump,goto, andadguard_rule/questiondriven branches. - Added the metadata, README files, repository links, and versioned dependency declarations needed to publish
oxidns-proto,oxidns-zoneparser, andoxidns-ripsetto crates.io cleanly. - Refreshed the
configuration,executor, andmatcherdocs to explain builtinsequencecontrol flow,marksyntax, and numericqtype/qclassforms more clearly.
Compatibility and Upgrade Notes
- For policy layouts that depend on nested
sequencecalls orjump/goto/returncombinations,v0.3.1is the recommended upgrade for predictable control-flow behavior. - This release does not introduce new config fields; it focuses on control-flow fixes, test hardening, and release metadata cleanup.
v0.3.0
Release Scope
- Minor Release adding HTTP callbacks, config checking, dat export, zone parsing, and Linux netlink integration.
Changes
- Added the
http_requestexecutor for synchronous or asynchronoushttp/httpscallbacks in either thebeforeorafterphase, with template placeholders,json/form/bodypayloads, SOCKS5, redirect handling, and configurable error modes. - Added the
checkandexport-datCLI commands.check --graphperforms static validation and prints the plugin dependency graph, whileexport-datcan export selected rules fromgeosite.dat/geoip.datinto OxiDNS or original text formats. - Aligned
hostsbehavior with mosdns semantics, and upgradedarbitrarywith a fuller zone parser that supports$ORIGIN,$TTL,$INCLUDE,$GENERATE, RFC3597, and broader record syntax. - Switched the Linux
ipset/nftsetexecutors to an embedded Rust netlink backend, removing the runtime dependency on theipset/nftshell commands. - Split protocol, zone parsing, and Linux integration internals into three workspace crates:
oxidns-proto,zoneparser, andripset. Added a reusable wire-buffer pool on the network hot path and tuned UDP/TCP/upstream socket parameters. - Added a dedicated CLI docs page and refreshed the
executor,provider,quickstart,benchmarks, andreleaseschapters.
Compatibility and Upgrade Notes
- Unprefixed
hostsrules now behave asfull:rules; positive local answers now use a fixed TTL of10; and a name hit without a matching address family now returnsNoError + empty answer + fake SOAinstead of falling through the rest of the executor chain. arbitraryno longer provides the old quick-setup syntax. Migrate those cases to explicitrules/filesconfiguration when upgrading.- Quickstart added a Docker Compose example and clarified Docker image registry, Windows release assets, and service deployment guidance.
v0.2.1
Release Scope
- Patch Release fixing DoH over HTTP/2 upstream GET handling and updating quickstart documentation.
Changes
- Fixed a DoH over HTTP/2 bug where GET requests did not close the request stream, causing some upstreams to time out after 5 seconds.
- Completed the
QuestionDisplayimplementation so logs and debug output render DNS questions consistently. - Relaxed the cache TTL unit test to tolerate cross-second timing drift in CI.
- Removed the Docker
linux/arm/v7support note from quickstart and added adocker composedeployment example.
Compatibility and Upgrade Notes
- This release does not introduce new configuration fields.
- Upgrading to
v0.2.1is recommended for deployments using DoH over HTTP/2 upstream GET requests.
v0.2.0
Release Scope
- Feature Release adding subscription download, scheduled jobs, script execution, and geodata provider support.
Changes
- Added the
downloadexecutor for downloading remotehttp/httpsfiles to local storage, with SOCKS5 proxying, HTTP redirect following, and startup bootstrap for missing files. - Added the
cronexecutor for background jobs with interval or standard 5-field cron triggers. - Added the
reloadexecutor for full application reloads. - Added the
scriptexecutor for running external commands with injected context fields. - Added
geoip,geosite, andadguard_ruleproviders, plus thequestionmatcher. Extendedqnamematching to supportadguard_rulerule sets directly. - Cache now supports stale lazy refresh, rule matcher internals were split and optimized, and configurable log file rotation was added.
- Expanded documentation for
executor,matcher,provider,server,quickstart, andscenarios, and added docs-site CI.
Compatibility and Upgrade Notes
startup_if_missingis enabled by default for smoother first-deployment and rule-file bootstrap behavior.ros_address_listsupportsfixed_ttl=0for no-timeout behavior.- Added
short_circuitsupport to quick setup forhosts,black_hole, andcache. - Removed the
hostsquick setup to tighten early quick-setup behavior. - Migrated from
serde_ymltoserde_yaml_ng, with several dependency and CI tooling updates.