{"id":20299541,"url":"https://github.com/daeuniverse/dae-wing","last_synced_at":"2025-10-19T03:21:34.223Z","repository":{"id":103173040,"uuid":"607265303","full_name":"daeuniverse/dae-wing","owner":"daeuniverse","description":"dae-wing is a backend of dae, provides a method to bundle arbitrary frontend and dae into one binary.","archived":false,"fork":false,"pushed_at":"2023-12-19T15:05:29.000Z","size":338,"stargazers_count":12,"open_issues_count":9,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2023-12-19T16:36:04.254Z","etag":null,"topics":["dae","ebpf","graphql","proxy","transparent-proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daeuniverse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-02-27T16:45:44.000Z","updated_at":"2023-12-26T12:44:55.226Z","dependencies_parsed_at":"2023-11-15T07:30:55.303Z","dependency_job_id":"c81c469a-90eb-4665-877d-4959b264b842","html_url":"https://github.com/daeuniverse/dae-wing","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daeuniverse%2Fdae-wing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daeuniverse%2Fdae-wing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daeuniverse%2Fdae-wing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daeuniverse%2Fdae-wing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daeuniverse","download_url":"https://codeload.github.com/daeuniverse/dae-wing/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248406823,"owners_count":21098304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dae","ebpf","graphql","proxy","transparent-proxy"],"created_at":"2024-11-14T16:15:19.289Z","updated_at":"2025-10-19T03:21:34.126Z","avatar_url":"https://github.com/daeuniverse.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dae-wing\n\n\u003cp align=\"left\"\u003e\n    \u003cimg src=\"https://custom-icon-badges.herokuapp.com/github/license/daeuniverse/dae-wing?logo=law\u0026color=orange\" alt=\"License\"/\u003e\n    \u003cimg src=\"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fdaeuniverse%2Fdae-wing\u0026count_bg=%234E3DC8\u0026title_bg=%23555555\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=hits\u0026edge_flat=false\" /\u003e\n    \u003cimg src=\"https://custom-icon-badges.herokuapp.com/github/issues-pr-closed/daeuniverse/dae-wing?color=purple\u0026logo=git-pull-request\u0026logoColor=white\"/\u003e\n    \u003cimg src=\"https://custom-icon-badges.herokuapp.com/github/last-commit/daeuniverse/dae-wing?logo=history\u0026logoColor=white\" alt=\"lastcommit\"/\u003e\n\u003c/p\u003e\n\n## Prerequisites\n\n[Git](https://git-scm.com), [Docker](https://www.docker.com), [Golang](https://go.dev), [GNU GCC](https://gcc.gnu.org)\n\n## Fetch the source code\n\n\u003e Clone the repository with git submodules (dae-core) using git\n\n```shell\ngit clone https://github.com/daeuniverse/dae-wing\ncd dae-wing\n\n# Initialize git submodules\ngit submodule update --init --recursive\n```\n\n## Run Locally\n\nTo run the api only:\n\n```bash\nmake deps\ngo run . run -c ./ --api-only\n# go build -o dae-wing \u0026\u0026 ./dae-wing run -c ./ --api-only\n```\n\nTo run with dae:\n\n```bash\nmake deps\ngo run -exec sudo . run\n# go build -o dae-wing \u0026\u0026 sudo ./dae-wing run -c ./ --api-only\n```\n\n## Run with Docker\n\n\u003e This feature is implemented for container orchestration with the dashboards that call this API, which also facilitates testing and development.\n\nPrebuilt image is available at `ghcr.io`. To pull this prebuilt image, you can replace image name into `ghcr.io/daeuniverse/dae-wing`.\n\nTo build container from source:\n\n```bash\n# use docker compose\nsudo docker compose up -d\n\n# Or you can build then run with CLI\n# build image\nsudo docker build -t dae-wing .\n\n# run container\nsudo docker run -d \\\n    --privileged \\\n    --network=host \\\n    --pid=host \\\n    --restart=always \\\n    -v /sys:/sys \\\n    -v /etc/dae-wing:/etc/dae-wing \\\n    --name=dae-wing \\\n    dae-wing\n```\n\n## API\n\nAPI is powered by [GraphQL](https://graphql.org/). UI developers can export schema and write queries and mutations easily.\n\n```bash\ngit clone https://github.com/daeuniverse/dae-wing\ngo build -o dae-wing\n./dae-wing export schema \u003e schema.graphql\n```\n\n[graphql-playground](https://github.com/graphql/graphql-playground) is recommended for developers. It integrates docs and debug environment for API. Choose `URL ENDPOINT` and fill in `http://localhost:2023/graphql` to continue.\n\n### Config generator\n\nAlternatively, you can use [raw format inputs](https://github.com/daeuniverse/dae/blob/main/example.dae), use [dae-outline2config](https://github.com/daeuniverse/dae-outline2config) to generate config related raw format.\n\nTo generate outline:\n\n```bash\ngit clone https://github.com/daeuniverse/dae-wing\ngo build -o dae-wing .\n./dae-wing export outline \u003e outline.json\n```\n\n## Structure\n\n### Config\n\nConfig defined in dae-wing includes `global`, `dns` and `routing` sections in [dae](https://github.com/daeuniverse/dae).\n\nUsers can switch between multiple configs. Nodes, subscriptions and groups are selectively shared by all configs.\n\n**Run**\n\nSelected config is the running config or config to run. If dae is not running, you can select a config and invoke run. If dae is already running with a config, selecting a new config will cause automatic switching and reloading, and removing the running config will cause to stop running.\n\n### Subscription\n\nSubscription consists of its link and the collection of nodes resolved by the link.\n\n### Node\n\nA generalized node refer to a proxy profile, which can be imported by link. A node can be in a subscription or not. It depends on how it is imported. Nodes in the same collection must have unique links, which means nodes will be deduplicated by dae-wing before being added to a collection.\n\n### Group\n\nA group has the following features:\n\n- A group is as an outbound of routing.\n- A group consists of subscriptions, nodes and a node selection policy for every new connection.\n\nIf a node in a subscription also belongs to a group, it will be preserved when the subscription is updated.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaeuniverse%2Fdae-wing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaeuniverse%2Fdae-wing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaeuniverse%2Fdae-wing/lists"}