asciimoth/ygg (Yggdrasil fork)
- title
- asciimoth/ygg (Yggdrasil fork)
- type
- entity
- summary
- Fork of yggdrasil-go separating the library (ygglib) from the daemon (yggd) and adding an embedded userspace TCP/IP stack for in-process networking
- tags
- networking, go, fork
- created
- 2026-05-10
- updated
- 2026-05-10
asciimoth/ygg is a fork of yggdrasil-network/yggdrasil-go that exists because upstream rejected feature requests as "not a goal of Yggdrasil" (specifically issue #1060). The fork's stated mission is library-style consumption: embedding yggdrasil-network inside other Go applications without the daemon assumption.
What changed from upstream:
ygglibpackage separation โ Core, transports, addressing, autopeering, multicast all importable independently- In-process userspace TCP/IP stack (
vtun) โ replaces the system TUN interface, so embedding doesn't require root or kernel support - Pluggable carrier networks โ swap in SOCKS, in-memory loopback, or custom transports per host pattern
gonnectandgonnect-netstackcompanion libraries โ reusable network abstractions
The author also maintains a web demo (asciimoth.github.io/ygg) that runs Yggdrasil inside the browser via WASM, which is the strongest argument for the embedding effort.
Status: active fork, single maintainer, branching from the official codebase but with substantial divergence. The upstream-vs-fork dynamic is the standard "we want X, upstream said no" pattern that produces the best forks (compare Vaultwarden vs Bitwarden, see vaultwarden).
Cross-references: yggdrasil-network, yggdrasil-embedded-go.