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 optional sandbox profile 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.

📝
TL;DR

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.

StandaloneDistributedHelm
CPU2 vCPU4+ vCPUAbout 4 CPUs free
Docker memory4 GB (3 GB minimum)12-16 GB (6 GB minimum)About 8 GiB free in the cluster
Disk10 GB free20 GB freeA default StorageClass: the bundled datastores use PersistentVolumeClaims
Privileged containersOnly for the optional sandbox profileNeeded by code-executorOnly for the optional code sandbox, off by default
Architecturelinux/amd64 or linux/arm64linux/amd64 or linux/arm64linux/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:

StandaloneDistributed
First downloadAbout 800 MB: futureagi/standalone, postgres:16 and clickhouse/clickhouse-server:25.3-alpine. The ml profile adds about 450 MB, sandbox about 185 MBThe Future AGI images plus Postgres, ClickHouse, Redis, MinIO, Temporal, Kafka and PeerDB
Disk for imagesAbout 2.5-3 GB unpackedSeveral 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

RequirementMinimumVerify
Docker Engine24.0+docker --version
Docker Composev2.24+docker compose version
GitAnygit --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=2

Then apply it:

wsl --shutdown

On 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.

PlatformSupportedNotes
Linux VM or bare metal with Docker Engine (EC2, GCE, Azure VMs)YesStandalone and Distributed
macOS with Docker Desktop, Colima or OrbStackYesStandalone and Distributed. Size the Docker VM as in Hardware
Windows with Docker Desktop (WSL 2)YesStandalone and Distributed, installed with .\bin\install.ps1
Kubernetes 1.27+ (EKS, GKE, AKS, OpenShift, k3s, kind)Yes, with the Helm chartCI 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.ioNoNot 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

ServiceDefaultBind.env key
UI30000.0.0.0FRONTEND_PORT
API80000.0.0.0BACKEND_PORT
LLM gateway8090 (container port 8080)0.0.0.0AGENTCC_GATEWAY_PORT
Collector OTLP gRPC4317127.0.0.1FI_COLLECTOR_OTLP_PORT
Collector OTLP HTTP4318127.0.0.1FI_COLLECTOR_OTLP_HTTP_PORT
Object storage API9005127.0.0.1MINIO_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

ServiceDefaultBind.env key
Frontend30000.0.0.0FRONTEND_PORT
Backend API80000.0.0.0BACKEND_PORT
LLM gateway8090 (container port 8080)0.0.0.0AGENTCC_GATEWAY_PORT
Model serving80800.0.0.0SERVING_PORT
Code executor8060127.0.0.1CODE_EXECUTOR_PORT
Collector OTLP gRPC4317127.0.0.1FI_COLLECTOR_OTLP_PORT
Collector OTLP HTTP4318127.0.0.1FI_COLLECTOR_OTLP_HTTP_PORT
Collector admin9464127.0.0.1FI_COLLECTOR_ADMIN_PORT
Postgres5432127.0.0.1PG_PORT
ClickHouse HTTP8123127.0.0.1CH_HTTP_PORT
ClickHouse TCP9000127.0.0.1CH_PORT
Redis6379127.0.0.1REDIS_PORT
MinIO API9005127.0.0.1MINIO_API_PORT
MinIO console9006127.0.0.1MINIO_CONSOLE_PORT
Temporal7233127.0.0.1TEMPORAL_PORT
Property catalog Kafka29092127.0.0.1PROPERTY_CATALOG_KAFKA_PORT
PeerDB server9900127.0.0.1PEERDB_PORT
Temporal UI (observability or all profile)80850.0.0.0TEMPORAL_UI_PORT
PeerDB UI (peerdb or all profile)30010.0.0.0PEERDB_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

Was this page helpful?

Questions & Discussion