dae-wing

November 29, 2025 ยท View on GitHub

A lightweight GraphQL API wrapper for dae โ€” the high-performance eBPF-based proxy solution.

License Go Version Release GitHub Stars


โœจ Features

  • ๐Ÿš€ GraphQL API โ€” Modern, type-safe API for managing dae
  • ๐Ÿ”„ Hot Reload โ€” Switch configs without restarting
  • ๐Ÿ“ฆ Subscription Management โ€” Import and manage proxy subscriptions
  • ๐Ÿณ Docker Ready โ€” Easy deployment with Docker/Docker Compose
  • ๐Ÿ”Œ Extensible โ€” Perfect backend for building custom dashboards

๐Ÿ“‹ Prerequisites

DependencyVersionRequired
Go>= 1.22โœ…
Clang>= 15โœ…
LLVM>= 15โœ…
GitLatestโœ…
DockerLatestOptional

๐Ÿš€ Quick Start

Clone the Repository

git clone https://github.com/daeuniverse/dae-wing
cd dae-wing
git submodule update --init --recursive

Run Locally

API Only Mode (for development):

make deps
go run . run -c ./ --api-only

Full Mode (with dae proxy):

make deps
go run -exec sudo . run

Run with Docker

Pull the prebuilt image:

docker pull ghcr.io/daeuniverse/dae-wing

Or build from source:

# Using Docker Compose (recommended)
docker compose up -d

# Or using Docker CLI
docker build -t dae-wing .
docker run -d \
    --privileged \
    --network=host \
    --pid=host \
    --restart=always \
    -v /sys:/sys \
    -v /etc/dae-wing:/etc/dae-wing \
    --name=dae-wing \
    dae-wing

๐Ÿ“– API Documentation

dae-wing uses GraphQL for its API.

Export Schema

go build -o dae-wing
./dae-wing export schema > schema.graphql

GraphQL Playground

Use GraphQL Playground for interactive API exploration:

  1. Open GraphQL Playground
  2. Set endpoint to http://localhost:2023/graphql
  3. Explore the schema and test queries

Export Config Outline

./dae-wing export outline > outline.json

๐Ÿ’ก Tip: Use dae-outline2config to convert outlines to dae config format.

๐Ÿ—๏ธ Architecture

Config

Configs include global, dns, and routing sections from dae.

  • Multiple Configs โ€” Switch between different configurations
  • Shared Resources โ€” Nodes, subscriptions, and groups are shared across configs
  • Hot Reload โ€” Selecting a new config automatically reloads dae

Subscription

A subscription contains:

  • Source link (URL)
  • Collection of resolved nodes

Node

Nodes represent proxy profiles imported via links. They can exist:

  • Independently (manually added)
  • Within subscriptions (auto-imported)

โš ๏ธ Nodes are deduplicated by link within the same collection.

Group

Groups serve as routing outbounds with:

  • A collection of subscriptions and nodes
  • Node selection policy for connections
  • Preserved nodes during subscription updates

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

๐Ÿ“„ License

This project is licensed under the AGPL-3.0 License.


Made with โค๏ธ by the dae universe team