Skip to main content

Roadmap

OxiDNS's complete development roadmap since v0.1.0. Upcoming work appears at the top; completed milestones and past versions follow in reverse chronological order.

Soon
3

For users who don't want to touch YAML: a set of preset scenario templates (ad blocking, anti-poisoning, family filtering, split-tunnel acceleration) configured entirely through forms and toggles, with an escape hatch back to the full editor for advanced rules. The target experience matches AdGuard Home's simple admin UI, bringing OxiDNS's setup bar close to out-of-the-box.

Soon
2

Apply the rule "per-entity / status / action → API; counters / histograms / low-cardinality gauges → metrics" and fill in runtime management APIs (upstream probe, job pause / run-now, rule enumeration, hot-client buckets, cache top-N, …) for existing plugins such as forward, cron, download, script, ip_selector, cache, and rate_limiter. Wire each endpoint into a corresponding WebUI detail panel and round out Prometheus metrics along the same boundary to improve observability and day-2 operations.

Soon
1

On top of the existing one-way push, add pulling RouterOS address lists as an OxiDNS data source and actively pushing local IP sets to RouterOS — bidirectional DNS-policy and routing-policy integration.

2026-07-02

Added luci-app-oxidns: OpenWrt users can install the OxiDNS core, manage the init service, edit configuration, and view logs from LuCI under Services -> OxiDNS. The LuCI app does not embed the OxiDNS core; on first install it downloads and verifies the official Linux musl release archive from GitHub Releases. Future core upgrades continue to use OxiDNS's built-in upgrade capability.

2026-06-03

Test multiple A/AAAA addresses from a DNS response in parallel and return the lowest-latency IP to the client, improving real-world access speed. Implementation is complete and ships with v1.2.0.

2026-06-03

A new learn_domain executor paired with the dynamic_domain_set provider: the executor captures matching query names from the resolver pipeline and writes them to dynamic_domain_set, which persists to disk and hot-reloads — no manual rule list maintenance. The WebUI adds a Detail tab for dynamic_domain_set to browse, add, remove, and clear rules in place, and every config field of learn_domain / dynamic_domain_set ships with field-level documentation.

2026-06-03

Split compilation by plugin module — users fork the repo, pick only the plugins they need, and produce a lean custom binary.

minimal / standard / full presets are live. Every protocol stack and management surface is feature-gated — api / webui / metrics, server-dot/doh/doq/doh3, upstream-dot/doh/doq/doh3, plus MikroTik, query_recorder, ipset/nftset, cron, script, upgrade, download, http_request, reverse_lookup, geo providers, and adguard_rule. AppController / LogBuffer now live under src/infra/ as runtime infrastructure, so minimal excludes hyper / rustls / quinn and lands at ~40% of full (≈ 8.9 MB vs 21 MB).

2026-05

Fixed nftset interval encoding (EINVAL) and ipset byte-order; query_recorder history clearing; WebUI mobile polish; Monaco editor self-hosted; provider/matcher memory further optimized.

2026-05-25

Config ${ENV_VAR} placeholders; upgrade fully supports Windows in-place update; query_recorder aggregate stats and rankings.

2026-05-20

Full WebUI first release: live log viewer, config history (save / apply / rollback), per-plugin metrics, cache management, query_recorder execution waterfall, offline config editing.

2026-04-27

query_recorder rebuilt as a streaming pipeline; added execution path stats; unified time handling with jiff.

2026-04-19

Reduced provider memory; added any_match, upgrade CLI subcommand; HTTP/3 Alt-Svc advertisement.

2026-04-14

New http_request plugin; introduced wire-buffer object pool to cut per-query allocations.

2026-04-02

Added script executor, download (SOCKS5 supported), adguard_rule matching, and reload hot-reload executor.

2026-03-28

First public release: dual-stack UDP/TCP, multi-upstream forwarding, local caching, base rule-matching framework.

Long-term direction: plugin ecosystem

  • WebAssembly plugins: Explore WASM-based third-party plugins so developers can write and distribute plugins in any language without modifying OxiDNS, with sandboxing by default.
  • Dynamic library plugins: Explore native plugin loading via shared libraries (.so / .dylib) for the highest-performance scenarios, with independent compile and distribute, loaded at runtime.