Familiar syntax
If you can write a docker-compose.yml, you can write a banyan.yaml. Same fields, same structure.
Banyan separates control and data planes for scalability and simplicity:
┌─────────────────────────────────────────────────────────────────────────────┐│ Banyan Architecture │├─────────────────────────────────────────────────────────────────────────────┤│ ││ ┌──────────────────┐ ││ │ banyan-cli │ ← Developer/DevOps ││ │ (Client Tool) │ ││ └────────┬─────────┘ ││ │ gRPC ││ │ deploy/status/logs ││ ▼ ││ ┌──────────────────────────────────────────────────────────────────────┐ ││ │ banyan-engine (Control Plane) │ ││ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ ││ │ │ gRPC │ │ Scheduler │ │ Store │ │ Registry │ │ ││ │ │ Server │ │ │ │ (Badger/ │ │ (Built-in │ │ ││ │ │ │ │ │ │ Redis/ │ │ OCI) │ │ ││ │ │ │ │ │ │ etcd) │ │ │ │ ││ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ ││ └──────────────────────────────────────────────────────────────────────┘ ││ │ ││ │ gRPC ││ │ task assignment ││ │ health monitoring ││ ▼ ││ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ││ │ banyan-agent │ │ banyan-agent │ │ banyan-agent │ ││ │ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │ ││ │ │containerd │ │ │ │containerd │ │ │ │containerd │ │ ││ │ │+ nerdctl │ │ │ │+ nerdctl │ │ │ │+ nerdctl │ │ ││ │ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │ ││ │ Worker Node 1 │ │ Worker Node 2 │ │ Worker Node N │ ││ └──────────────────┘ └──────────────────┘ └──────────────────┘ ││ ││ Optional VPC Networking (etcd only): ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Flannel VXLAN Overlay + DNS Service Discovery │ ││ └─────────────────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────────────────────┘How it works:
banyan.yaml manifest to Engine via gRPCYou know Docker Compose. You write a docker-compose.yml, run docker compose up, and everything works on one machine.
Then your app grows. You want your services spread across separate servers, or running multiple replicas to handle load. Either way, you need more than one machine.
Banyan makes that step simple. Use the same YAML syntax you already know, and Banyan distributes your services across your servers.
docker-compose.yml — everything on one machine:
services: web: build: ./web ports: - "80:80"
api: build: ./api ports: - "8080:8080" environment: - DB_HOST=db
db: image: postgres:15-alpinebanyan.yaml — distributed across your cluster:
name: my-app
services: web: build: ./web ports: - "80:80"
api: build: ./api deploy: replicas: 3 ports: - "8080:8080" environment: - DB_HOST=db
db: image: postgres:15-alpineSame services. Same build. Same ports. Same environment. Add name: and deploy.replicas, and Banyan spreads them across your servers automatically.
# On your control plane serversudo banyan-engine start
# On each worker serversudo banyan-agent start --node-name agent-1
# From anywherebanyan-cli deploy -f banyan.yamlNo package managers. No plugins. Three focused binaries — engine, agent, and CLI.
Familiar syntax
If you can write a docker-compose.yml, you can write a banyan.yaml. Same fields, same structure.
Single-binary components
Three small, focused binaries. Download, run, done. No complex setup or configuration management required.
Built-in image registry
No Docker Hub, no private registry setup. Use build: in your manifest and Banyan builds, stores, and distributes your images automatically. Deploy to a cluster as easily as running locally.
Automatic distribution
Services are automatically distributed across your servers. Add a node, it picks up work on the next deployment.
Built-in VPC
Secure cross-node networking using Flannel with VXLAN overlay and built-in DNS service discovery. Services on different servers communicate as if they were on the same network.
Proven foundations
Built on battle-tested technologies: BadgerDB, etcd, containerd, gRPC, and Prometheus metrics (coming soon).
Banyan is built for teams who: