Requirements
Hardware, software, platform and port requirements for self-hosting Future AGI with Docker Compose (Standalone or Distributed) or Helm on Kubernetes.
In this page
Check four things before you install:
- A host that meets the sizing for the setup you choose
- The required software: Docker and Git, or Kubernetes and Helm for the chart
- Privileged containers, only if you run Distributed’s
code-executor, Standalone’s optionalsandboxprofile or Helm’s optional code sandbox - Host ports that are free, or remapped
Get these right and the Installation run works on the first try.
Standalone (the default) needs 2 vCPUs, 4 GB of Docker memory (3 GB minimum) and 10 GB of free disk. Distributed needs 4+ vCPUs, 12-16 GB of Docker memory (6 GB minimum) and 20 GB. Both need Docker Engine 24.0+, Docker Compose v2.24+ and Git, on linux/amd64 or linux/arm64. Helm needs Kubernetes 1.27+ and Helm 3.10+ or Helm 4.
Hardware
Size the host for the setup you choose. For Docker Compose, memory means the Docker VM’s memory, not the host’s: on macOS and Windows, Docker runs in a VM and the stack gets only what that VM has.
| Standalone | Distributed | Helm | |
|---|---|---|---|
| CPU | 2 vCPU | 4+ vCPU | About 4 CPUs free |
| Docker memory | 4 GB (3 GB minimum) | 12-16 GB (6 GB minimum) | About 8 GiB free in the cluster |
| Disk | 10 GB free | 20 GB free | A default StorageClass: the bundled datastores use PersistentVolumeClaims |
| Privileged containers | Only for the optional sandbox profile | Needed by code-executor | Only for the optional code sandbox, off by default |
| Architecture | linux/amd64 or linux/arm64 | linux/amd64 or linux/arm64 | linux/amd64 or linux/arm64 |
The Helm column is an evaluation install with bundled datastores. Production on Kubernetes is sized per service: see Install for production. Disk use grows with your data from the numbers above.
What a fresh Compose install downloads, compressed:
| Standalone | Distributed | |
|---|---|---|
| First download | About 800 MB: futureagi/standalone, postgres:16 and clickhouse/clickhouse-server:25.3-alpine. The ml profile adds about 450 MB, sandbox about 185 MB | The Future AGI images plus Postgres, ClickHouse, Redis, MinIO, Temporal, Kafka and PeerDB |
| Disk for images | About 2.5-3 GB unpacked | Several GB more; keep 20 GB free |
Standalone and Distributed share no backend image layers, so switching between them downloads the backend again. Upgrades download only the layers that changed.
./bin/install measures the Docker VM’s memory and CPUs with a small probe container before it starts anything. Below the minimum it stops and prints the fix for your runtime (--force continues anyway); below the recommended size it warns. Re-running the installer on an existing Distributed install only warns, whatever the size. Standalone idles at about 1 GB. The optional ml profile (model serving) adds a large image and a few GB of memory once its models load, and ./bin/install --from-source wants an 8 GB VM for the frontend build.
Tip
Size the Docker VM before you install: 4 GB of memory for Standalone (3 GB minimum), 12-16 GB for Distributed (6 GB minimum). Colima starts with 2 GB and Docker Desktop with a share of the host’s RAM, so check the size first. Docker Desktop on Mac: Settings → Resources, where the disk setting covers every image and volume on the VM, not only this stack’s. On Windows with WSL 2 those sliders don’t apply, so set the limit in .wslconfig as shown in the Windows tab below.
Software
| Requirement | Minimum | Verify |
|---|---|---|
| Docker Engine | 24.0+ | docker --version |
| Docker Compose | v2.24+ | docker compose version |
| Git | Any | git --version |
Compose v2.24 is a hard floor, not a recommendation: docker-compose.yml declares its env files with the long path / required form, which older Compose can’t parse. On v2.23 or below the stack fails at parse time, before a single image is pulled.
Run Docker with Docker Desktop, Colima or OrbStack on macOS, Docker Desktop on Windows, or Docker Engine on Linux. The installer warns when it finds only the legacy docker-compose v1. For Kubernetes you need a 1.27+ cluster and Helm 3.10+ or Helm 4 instead: see Helm.
Install the tools with Homebrew, then start Colima:
brew install docker docker-compose colima git
colima start --cpu 4 --memory 8 --disk 64 Install the tools with apt, then enable the Docker daemon:
sudo apt-get install -y docker.io docker-compose-v2 git
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # log out and back in Install Docker Desktop for Windows with the WSL 2 backend, then set the memory limit in WSL, not Docker’s UI (the Settings → Resources sliders apply only to the Hyper-V backend). In %UserProfile%\.wslconfig, set memory=4GB and processors=2 for Standalone, or memory=12GB and processors=4 for Distributed:
[wsl2]
memory=4GB
processors=2Then apply it:
wsl --shutdownOn Windows the installer is .\bin\install.ps1, which you run from PowerShell in the cloned repository.
Platform compatibility
Privileged containers are needed only by Distributed’s code-executor, Standalone’s optional sandbox profile and Helm’s optional code sandbox. A default Standalone install runs Python code evals in an unprivileged sandbox inside its app container.
| Platform | Supported | Notes |
|---|---|---|
| Linux VM or bare metal with Docker Engine (EC2, GCE, Azure VMs) | Yes | Standalone and Distributed |
| macOS with Docker Desktop, Colima or OrbStack | Yes | Standalone and Distributed. Size the Docker VM as in Hardware |
| Windows with Docker Desktop (WSL 2) | Yes | Standalone and Distributed, installed with .\bin\install.ps1 |
| Kubernetes 1.27+ (EKS, GKE, AKS, OpenShift, k3s, kind) | Yes, with the Helm chart | CI tests Kubernetes 1.27 to 1.37 and kind; managed clusters, OpenShift and k3s are community-supported. The code sandbox is privileged, so it cannot run in a baseline or restricted Pod Security namespace. See Helm |
| ECS Fargate, Cloud Run, Render, Railway, Fly.io | No | Not a supported target: use a VM or Kubernetes |
Every Future AGI image is published for linux/amd64 and linux/arm64, each built natively, so the stack runs native on Apple Silicon and on Linux arm64 hosts such as AWS Graviton. Two images are linux/amd64 only: the CUDA variant of model serving (-gpu tags) and the voice simulation runner of Distributed and Helm. Releases before Standalone became the default published an amd64-only backend image, which Docker runs under emulation on arm64 (Rosetta 2 on Docker Desktop 4.16+, qemu-user-static on Linux): slower, with a first boot that can take 20+ minutes. ./bin/install --from-source always builds native images. Container images lists the architectures and download size of every image.
Network ports
Make sure these host ports are free before you install, or remap any that collide. Every published port reads from .env with a built-in default (for example ${FRONTEND_PORT:-3000}), so you can change one without touching the Compose file. Anything on 127.0.0.1 is reachable from the host but not from the network.
Standalone
| Service | Default | Bind | .env key |
|---|---|---|---|
| UI | 3000 | 0.0.0.0 | FRONTEND_PORT |
| API | 8000 | 0.0.0.0 | BACKEND_PORT |
| LLM gateway | 8090 (container port 8080) | 0.0.0.0 | AGENTCC_GATEWAY_PORT |
| Collector OTLP gRPC | 4317 | 127.0.0.1 | FI_COLLECTOR_OTLP_PORT |
| Collector OTLP HTTP | 4318 | 127.0.0.1 | FI_COLLECTOR_OTLP_HTTP_PORT |
| Object storage API | 9005 | 127.0.0.1 | MINIO_API_PORT |
Nothing else is published: no Postgres, ClickHouse, Redis, Temporal or code-eval sandbox port, and the ml and sandbox profiles publish none either.
Distributed
| Service | Default | Bind | .env key |
|---|---|---|---|
| Frontend | 3000 | 0.0.0.0 | FRONTEND_PORT |
| Backend API | 8000 | 0.0.0.0 | BACKEND_PORT |
| LLM gateway | 8090 (container port 8080) | 0.0.0.0 | AGENTCC_GATEWAY_PORT |
| Model serving | 8080 | 0.0.0.0 | SERVING_PORT |
| Code executor | 8060 | 127.0.0.1 | CODE_EXECUTOR_PORT |
| Collector OTLP gRPC | 4317 | 127.0.0.1 | FI_COLLECTOR_OTLP_PORT |
| Collector OTLP HTTP | 4318 | 127.0.0.1 | FI_COLLECTOR_OTLP_HTTP_PORT |
| Collector admin | 9464 | 127.0.0.1 | FI_COLLECTOR_ADMIN_PORT |
| Postgres | 5432 | 127.0.0.1 | PG_PORT |
| ClickHouse HTTP | 8123 | 127.0.0.1 | CH_HTTP_PORT |
| ClickHouse TCP | 9000 | 127.0.0.1 | CH_PORT |
| Redis | 6379 | 127.0.0.1 | REDIS_PORT |
| MinIO API | 9005 | 127.0.0.1 | MINIO_API_PORT |
| MinIO console | 9006 | 127.0.0.1 | MINIO_CONSOLE_PORT |
| Temporal | 7233 | 127.0.0.1 | TEMPORAL_PORT |
| Property catalog Kafka | 29092 | 127.0.0.1 | PROPERTY_CATALOG_KAFKA_PORT |
| PeerDB server | 9900 | 127.0.0.1 | PEERDB_PORT |
Temporal UI (observability or all profile) | 8085 | 0.0.0.0 | TEMPORAL_UI_PORT |
PeerDB UI (peerdb or all profile) | 3001 | 0.0.0.0 | PEERDB_UI_PORT |
The code executor listens on 127.0.0.1 only because it runs any code it is sent, without authentication. The two rows tagged with a profile run only under that profile and are free otherwise.
On Kubernetes the chart publishes no host ports: its services talk over in-cluster Services, and you choose how to expose the UI and API. See Helm.
Watch 4317 and 4318 in particular: they are the default OTLP ports, so they collide with any other OpenTelemetry collector already on the host. 4318 is where the SDK sends your traces (FI_BASE_URL=http://localhost:4318).
To find a collision before you install, check the ports you care about:
lsof -i :3000 -i :8000 -i :8090 -i :4317 -i :4318 # anything listed is already taken
./bin/install checks every port the chosen setup publishes before it starts the stack. For a taken port it offers the next free one and writes it to .env (with -y it takes it without asking). Moving BACKEND_PORT also rewrites VITE_HOST_API when that is unset or points at localhost. Without the installer, Compose fails at startup with a bind error naming the port: set the key in .env yourself.
Dive deeper
Questions & Discussion