# asciimoth/ygg (Yggdrasil fork)

`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](https://github.com/yggdrasil-network/yggdrasil-go/issues/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:
- **`ygglib` package 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
- **`gonnect` and `gonnect-netstack` companion 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]].
