{"id":45094420,"url":"https://github.com/fertile-org/banyan","last_synced_at":"2026-03-07T09:24:03.088Z","repository":{"id":339148846,"uuid":"1051567703","full_name":"fertile-org/banyan","owner":"fertile-org","description":"Banyan - Container orchestration you already know","archived":false,"fork":false,"pushed_at":"2026-03-05T17:39:35.000Z","size":134718,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-05T20:23:13.374Z","etag":null,"topics":["container-orchestration","deployment","docker-compose","monitoring","observability","orchestrator"],"latest_commit_sha":null,"homepage":"https://getbanyan.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fertile-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-06T09:09:25.000Z","updated_at":"2026-03-05T17:39:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fertile-org/banyan","commit_stats":null,"previous_names":["fertile-org/banyan"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/fertile-org/banyan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fertile-org%2Fbanyan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fertile-org%2Fbanyan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fertile-org%2Fbanyan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fertile-org%2Fbanyan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fertile-org","download_url":"https://codeload.github.com/fertile-org/banyan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fertile-org%2Fbanyan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30210761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["container-orchestration","deployment","docker-compose","monitoring","observability","orchestrator"],"created_at":"2026-02-19T18:10:43.347Z","updated_at":"2026-03-07T09:24:03.078Z","avatar_url":"https://github.com/fertile-org.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"website/public/shipping-banner-transparent.png\" alt=\"Banyan — containers distributed across servers\" width=\"100%\"\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003eBanyan\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eContainer orchestration you already know.\u003c/strong\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fertile-org/banyan/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/fertile-org/banyan/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/fertile-org/banyan\"\u003e\u003cimg src=\"https://codecov.io/gh/fertile-org/banyan/branch/main/graph/badge.svg\" alt=\"Coverage\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/fertile-org/banyan/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/fertile-org/banyan?label=release\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/go-1.24-00ADD8?logo=go\" alt=\"Go 1.24\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eRun containers across multiple servers with the Docker Compose syntax you already know.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://getbanyan.dev/\"\u003eDocumentation\u003c/a\u003e \u0026middot;\n  \u003ca href=\"https://getbanyan.dev/getting-started/quickstart/\"\u003eQuickstart\u003c/a\u003e \u0026middot;\n  \u003ca href=\"https://getbanyan.dev/roadmap/\"\u003eRoadmap\u003c/a\u003e \u0026middot;\n  \u003ca href=\"./DEVELOPMENT.md\"\u003eDevelopment\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" valign=\"top\"\u003e\n      \u003csub\u003e\u003cstrong\u003eSECURED BY\u003c/strong\u003e\u003c/sub\u003e\u003cbr\u003e\u003cbr\u003e\n      \u003cimg src=\"website/public/wireguard.webp\" alt=\"WireGuard\" height=\"100\"\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" valign=\"top\"\u003e\n      \u003csub\u003e\u003cstrong\u003eBUILT WITH\u003c/strong\u003e\u003c/sub\u003e\u003cbr\u003e\u003cbr\u003e\n      \u003cimg src=\"website/public/containerd-logo.png\" alt=\"containerd\" height=\"40\"\u003e\n      \u0026nbsp;\u0026nbsp;\n      \u003cimg src=\"website/public/nerdctl-logo.webp\" alt=\"nerdctl\" height=\"40\"\u003e\n      \u003cbr\u003e\u003cbr\u003e\n      \u003cimg src=\"website/public/etcd-logo.png\" alt=\"etcd\" height=\"40\"\u003e\n      \u0026nbsp;\u0026nbsp;\n      \u003cimg src=\"website/public/go_logo.png\" alt=\"Go\" height=\"40\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e **Under experiment.** Banyan is not yet production-ready. We encourage you to experiment, break things, and [share feedback](https://github.com/fertile-org/banyan/issues).\n\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cvideo src=\"https://github.com/user-attachments/assets/26d4e454-48b8-402f-b837-5cc00a251738\" autoplay loop muted playsinline\u003e\u003c/video\u003e\n  \u003csub\u003e\u003ccode\u003ebanyan-cli dashboard\u003c/code\u003e — monitor your entire cluster from the terminal\u003c/sub\u003e\n\u003c/div\u003e\n\n## From one server to many\n\nYou know Docker Compose. You write a `docker-compose.yml`, run `docker compose up`, and it works — on one machine.\n\nThen you need more. More servers, more replicas, more availability. The usual next step involves weeks of learning, dozens of new concepts, and infrastructure that's heavier than your application.\n\n**Banyan takes a different approach.** Same YAML syntax you already write, distributed across your servers. No new language to learn. No templating. No 50-page getting started guide.\n\n## One manifest, production-ready\n\n```yaml\nname: my-app\n\nservices:\n  caddy:\n    image: caddy:latest\n    command: caddy reverse-proxy --from example.com --to api:8080\n    deploy:\n      placement:\n        node: gateway-*       # ← pin to your public-facing servers\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n\n  api:\n    build: ./api\n    deploy:\n      replicas: 3             # ← scale what you need\n    ports:\n      - \"8080:8080\"\n    environment:\n      - DB_HOST=db\n\n  db:\n    image: postgres:15-alpine\n```\n\nSame `services`, `build`, `ports`, `environment` you already know from Docker Compose. Add `deploy.replicas` to scale, `deploy.placement.node` to pin services to specific servers. One command to deploy: `banyan-cli up -f banyan.yaml`.\n\n## What you get\n\n- **The YAML you already know** — `services`, `build`, `image`, `ports`, `environment`, `depends_on`. Same fields, same structure, same muscle memory.\n- **Three binaries, nothing else** — No package managers, no plugins, no Helm charts. Download `banyan-engine`, `banyan-agent`, and `banyan-cli`. That's the entire stack.\n- **Built-in image registry** — Use `build:` in your manifest and Banyan builds, stores, and distributes images across your cluster. No Docker Hub account, no Harbor, no ECR setup.\n- **Containers talk across servers** — Services on different machines communicate as if they were on the same network. Banyan handles the overlay network and DNS.\n- **Live terminal dashboard** — `banyan-cli dashboard` opens a real-time TUI that shows engine health, agents, deployments, container status, and cluster events — all updating live. Navigate with keyboard shortcuts, drill into any agent or deployment, and use the command palette to jump between views. No Grafana setup, no browser, no YAML config. Your monitoring is one command away.\n- **Open source, self-hosted** — Apache 2.0. No vendor lock-in, no usage-based pricing. Run it on your own servers.\n\n## Who is Banyan for?\n\n**Teams who've outgrown a single server but don't need — or don't want — Kubernetes.**\n\nYou might be a team of 5 who needs your API on 3 servers. Or a team of 50 who wants a lighter option for staging environments and internal tools. Either way, you want to write a YAML file and ship, not operate a platform.\n\nBanyan handles the orchestration so you can focus on the software you're building.\n\n## Install\n\n```bash\n# Engine node (control plane)\ncurl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bash -s -- --role engine\n\n# Worker nodes\ncurl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bash -s -- --role agent\n```\n\nOr [build from source](https://getbanyan.dev/getting-started/installation/).\n\n## Getting started\n\nOne-time setup (run once per machine):\n\n```bash\n# Control plane\nsudo banyan-engine init        # Generate keypair, configure etcd\nsudo banyan-engine start       # Starts the engine, etcd, and image registry\n\n# Each worker\nsudo banyan-agent init         # Generate keypair, set engine address\n# Copy agent's public key to engine: echo '\u003ckey\u003e' \u003e /etc/banyan/whitelisted-keys/worker-1.pub\nsudo banyan-agent start        # Register and start accepting containers\n\n# Your machine\nsudo banyan-cli init           # Generate keypair, set engine address\n# Copy CLI's public key to engine: echo '\u003ckey\u003e' \u003e /etc/banyan/whitelisted-keys/cli.pub\n```\n\nThen deploy — every time, one command:\n\n```bash\nbanyan-cli deploy -f banyan.yaml\n```\n\nAfter the initial setup, deploying is always one command. See the [Quickstart](https://getbanyan.dev/getting-started/quickstart/) for a complete walkthrough.\n\n## Architecture\n\n```mermaid\ngraph TD\n    CLI[fa:fa-terminal banyan-cli] --\u003e|gRPC| Engine\n\n    subgraph Engine[fa:fa-server banyan-engine]\n        Store[(fa:fa-database etcd)]\n        Registry[fa:fa-box-open Image Registry]\n    end\n\n    Engine --\u003e|gRPC| Agent1\n    Engine --\u003e|gRPC| Agent2\n    Engine --\u003e|gRPC| AgentN\n\n    subgraph VPC[fa:fa-network-wired Banyan VPC]\n        subgraph G1[Gateway]\n            Agent1[fa:fa-cube banyan-agent]\n            C1{{fa:fa-box container: caddy-0}}\n            Agent1 ~~~ C1\n        end\n\n        subgraph A2[Worker 1]\n            Agent2[fa:fa-cube banyan-agent]\n            C2{{fa:fa-box container: api-0}}\n            C3{{fa:fa-box container: api-1}}\n            Agent2 ~~~ C2\n            Agent2 ~~~ C3\n        end\n\n        subgraph AN[Worker 2]\n            AgentN[fa:fa-cube banyan-agent]\n            C4{{fa:fa-box container: api-2}}\n            C5{{fa:fa-box container: db-0}}\n            AgentN ~~~ C4\n            AgentN ~~~ C5\n        end\n    end\n\n    CLI ~~~ Prom(fa:fa-chart-line Prometheus-compatible)\n    Engine -.-|/metrics| Prom\n```\n\nThe **CLI** sends your manifest to the **Engine**, which stores state in etcd and schedules containers across **Agents**. Each Agent runs containerd and pulls images from the Engine's built-in registry. All gRPC communication is authenticated via public key whitelist and optionally encrypted through a WireGuard control tunnel (port 51821/UDP).\n\n## Documentation\n\nFull documentation at **[getbanyan.dev](https://getbanyan.dev/)**.\n\n- [Installation](https://getbanyan.dev/getting-started/installation/)\n- [Quickstart](https://getbanyan.dev/getting-started/quickstart/)\n- [Manifest Reference](https://getbanyan.dev/reference/manifest/)\n- [Multi-Node Setup](https://getbanyan.dev/guides/multi-node/)\n- [CLI Reference](https://getbanyan.dev/reference/cli/)\n- [Troubleshooting](https://getbanyan.dev/reference/troubleshooting/)\n\n## Roadmap\n\nSee the [Roadmap](https://getbanyan.dev/roadmap/) — Prometheus metrics, resource-aware scheduling, auto-scaling, and more.\n\n## Contributing\n\nSee the [Development Guide](./DEVELOPMENT.md) for project structure, build commands, and architecture.\n\n## License\n\nApache License 2.0. See [LICENSE](./LICENSE) for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffertile-org%2Fbanyan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffertile-org%2Fbanyan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffertile-org%2Fbanyan/lists"}