mrkeyoor.com_
Sun 27 Sept 17:33 UTC
Self-Hostedevaluationupdated 27 Sept 2026

dae review

dae is a Linux transparent proxy that uses eBPF inside the kernel to split traffic by domain, address, process, protocol, or device. It can send selected connections through proxy nodes while letting direct traffic bypass the proxy process; the project maintains both English and Chinese documentation.

Verdict

Our dae run installed 501 npm packages and found 27 vulnerabilities, but that manifest only checks documentation, so the result says nothing about the Go daemon or eBPF datapath. dae is worth choosing when Linux kernel routing is exactly what you want and you can test it on the actual router before cutover. For a desktop proxy, an appliance with a fixed kernel, or a network without rollback access, choose a less kernel-dependent option.

We ran it

Lab card: what happened when we ran daeScreenshot of dae (github.com/daeuniverse/dae)
Install✓ · 22s501 packages · 79 MB
Buildn/ano build script
Testsn/ano test script
Known vulns271 critical · 17 high · 7 moderate · 2 low (npm audit)
Repo643 files~131,972 lines of source · 36 MB · 17 CI workflows · Dockerfile

Answers from our run

Does dae build from source?

Dependencies installed in 22 seconds (501 packages), and the project has no separate build step. We cloned commit b59e375 into a clean Debian container with 3 CPUs and no project-specific setup.

Does dae have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does dae have known vulnerabilities in its dependencies?

npm audit flagged 27 known advisories in the dependency tree, including 1 critical at the time of our run.

Who should not use dae?

Hosts below Linux 5.17 or kernels missing the required BPF, BTF, cgroup, ingress, and egress options documented by dae.

What are the alternatives to dae?

sing-box, Xray-core, v2rayA. Our dae run installed 501 npm packages and found 27 vulnerabilities, but that manifest only checks documentation, so the result says nothing about the Go daemon or eBPF datapath.

Setup2/5Packages help, but kernel flags, privileges, DNS, and rules are yours
Docs4/5Detailed bilingual install, kernel, DNS, routing, and build guides
Community4/56,243 stars with current releases and active issue investigation
Maturity3/5v2.1.1 is current, but kernel and validation failures remain open

Who it’s for

Linux router operators who understand interfaces, DNS policy, systemd, and eBPF kernel requirements.
Users who want process-aware rules on one host or MAC-address rules for LAN clients.
Network tinkerers prepared to test TCP, UDP, IPv4, IPv6, and DNS behavior after every kernel or dae update.
AGPL-compatible teams that prefer a configurable daemon over a desktop-first proxy app.

Who it’s NOT for

Hosts below Linux 5.17 or kernels missing the required BPF, BTF, cgroup, ingress, and egress options documented by dae.
Operators who need a friendly desktop workflow: dae is a privileged network service driven by configuration, while v2rayA or another client is a better fit for a GUI.
Anyone who treats dae validate as proof the daemon will start: open issue 1119 shows malformed fixed_domain_ttl values passing validation and failing at runtime.
Appliance owners who cannot change kernels: an open report says dae does not proxy correctly on an RK3528 Armbian device with kernel 6.1.115.
Networks where an untested routing change can take users offline: a current report shows eBPF loading failing before readiness on Linux 7.2.7.

Setup reality

Our sandbox installed 501 npm packages in 22 seconds and used 79 MB. There was no npm build or test target, so both steps were skipped. That package manifest only powers Markdown checks; our run did not compile the Go daemon, load eBPF, or exercise routing. Npm audit found 27 known vulnerabilities: 1 critical, 17 high, 7 moderate, and 2 low.

A real deployment needs Linux kernel 5.17 or newer for LAN or WAN binding, the listed BPF and BTF kernel options, suitable privileges, a network-interface choice, DNS policy, and proxy nodes or subscriptions. Packages exist for several distributions, with systemd configuration under /etc/dae; Docker still uses the host kernel.

The 36 MB checkout contained 643 files and about 131,972 source lines. It had 17 CI workflows, a Dockerfile, and Compose configuration, but no tests directory. English and Chinese quick starts are available. Recent kernel-specific startup reports show why the documented minimum version is only the first compatibility check.

dae moves traffic decisions into the Linux kernel

dae is a transparent proxy for Linux hosts and routers. Its rules can split traffic by process name on the local machine, MAC address on the LAN, destination, domain, protocol, and inverted matches. Proxy groups can select nodes using measured connection latency. DNS has its own request and response routing, which lets an operator keep name resolution and connection policy in the same configuration.

The distinguishing mechanism is eBPF. Direct connections can remain on a kernel path instead of passing through a user-space proxy forwarder. That design is appealing on a router where most local traffic should stay direct and selected destinations should use a proxy. We did not measure throughput or resource use, so the project's performance claims should be tested with your traffic mix, network interfaces, and kernel.

The 22-second npm install only checked documentation tools

Our sandbox cloned commit b59e375 and installed 501 npm packages in 22 seconds. Those packages occupied 79 MB. The repository's package.json contains Markdown linting and link-check commands; dae itself is a Go project with C code for its kernel path. The npm result therefore describes the documentation toolchain, not an installation of the proxy daemon.

There was no npm build script and no npm test script, so both lab steps were skipped. We did not compile Go, load an eBPF program, change routes, or send traffic through a proxy node. That distinction matters because a clean JavaScript install can look like setup success while leaving the product's important code untouched. The 36 MB checkout contained 643 files and about 131,972 lines of source.

What happened when we ran it

Our 3-CPU, 8 GB Debian container completed the npm install in 22 seconds and had no build or test target to execute. Npm audit reported 27 known vulnerabilities in the 501-package tree: 1 critical, 17 high, 7 moderate, and 2 low. Those dependencies support documentation checks, so the audit is maintenance debt in the repository toolchain rather than evidence of an exploitable flaw in dae's running Go binary.

The checkout had 17 CI workflow files, a Dockerfile, and a Compose file. It did not have a tests directory. Go projects often keep tests beside implementation files, so that directory signal alone does not establish that dae lacks tests. The important limitation is simpler: our supplied run never invoked them. No build time, test count, or routing result can be claimed for the daemon from this sandbox record.

Linux 5.17 is a floor, not a compatibility guarantee

The English quick start requires kernel 5.17 for binding LAN or WAN traffic and 5.15 for dae trace. It also lists BPF, BPF JIT, BTF debug information, cgroups, kprobes, and traffic-control options that the kernel must expose. Mainstream desktop distributions commonly include them. Embedded distributions may remove some to save space, which is why an apparently recent kernel can still be unsuitable.

Two current reports show both sides of that problem. Issue 1126 says an RK3528 Armbian device on kernel 6.1.115 could not proxy traffic even though the same configuration worked on a newer x86 host. Issue 1127 records an eBPF CO-RE relocation failure on Linux 7.2.7 caused by a BTF header error. A version number clears the first check; a real start and traffic test on the target kernel clears the useful one.

Installation packages do not remove network ownership

The documentation covers APT and RPM repositories, Arch packages, NixOS, Gentoo, Alpine, Docker, an installer, and source builds. A packaged systemd service reads configuration from /etc/dae. English and Chinese manuals include a minimal idle configuration plus examples for interfaces, proxy subscriptions, DNS upstreams, groups, and routing rules. The breadth is good, especially for a networking tool where one copied interface name can cut off access.

A working setup still needs choices the installer cannot make. You choose the LAN or WAN interface, decide how DNS requests leave the box, add proxy nodes or subscription URLs, and define a direct fallback. The README specifically warns operators running a UDP server on the same public host to add a must_direct rule for its source port. Remote changes should have console access or another rollback path.

Configuration validation can still miss a startup failure

Open issue 1119 documents a narrow but important gap in dae validate. Malformed fixed_domain_ttl entries can pass the check, then stop dae run when the value is parsed during control-plane creation. The report includes empty, missing, and nonnumeric TTL examples. Until that path is fixed, validation should be followed by a supervised service start and checks for DNS, direct traffic, and proxied traffic.

Release v2.1.1 arrived on September 18, 2026, with a datapath and control-plane rework, DNS fixes, a WAN egress fix, updated outbound code, and rewritten English and Chinese manuals. GitHub recorded another push on September 25. The repository had 6,243 stars and 135 open issues and pull requests when fetched, which pairs current maintenance with a sizable support surface.

The right buyer has a test router and a rollback route

dae gives experienced Linux operators unusually precise control over where traffic travels. The cost is that its most interesting behavior depends on kernel facilities, network topology, DNS choices, and configuration details that our 501-package npm install never touched. A spare router, a representative client, and scripted checks for TCP, UDP, and DNS are better evaluation tools than a successful package install.

Choose dae when eBPF-based traffic splitting is the reason for the project, not a technical decoration. Keep the old service and configuration ready until v2.1.1 starts cleanly on the actual kernel and your direct routes remain direct. If you mainly want to paste a subscription into a desktop interface, v2rayA or another managed client will ask less of you.

Alternatives

ProjectWhat it isPick it when
sing-box gh↗A general proxy platform supporting many inbound, outbound, and routing combinations.pick this instead when cross-platform protocol breadth matters more than dae's Linux eBPF traffic path.
Xray-core gh↗A widely used proxy core with a large protocol and transport ecosystem.pick this instead when existing Xray clients and configuration knowledge matter more than kernel-level direct routing.
v2rayAA web-managed transparent proxy client built around its own Xray-based core.pick this instead when a browser interface and easier day-to-day management outweigh dae's eBPF design.

What people are saying

  1. [github-trending] daeuniverse/dae

Sources

  1. dae repository and README
  2. dae English quick start
  3. dae v2.1.1 release notes
  4. Issue 1119: validation misses malformed TTL values
  5. Issue 1126: Armbian kernel 6.1 report
  6. Issue 1127: Linux 7.2.7 BTF loading report

More self-hosted reviews

yuvomi · mlmvpn_windows · teable · distribution · reth · umbrel · the whole board →