# Requirements

> Operating systems, CPU architectures, memory, disk, ports and DNS records Falak needs for the control plane host and for the servers it manages.

Source: https://falak.sh/docs/getting-started/requirements/

Falak has two kinds of machines: one **control plane host** that runs Falak itself, and any number of **servers** that run your apps. This page lists what each needs.

## Control plane host

| | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 22.04 or 24.04, Debian 12 | Ubuntu 24.04 |
| CPU architecture | amd64 or arm64 | |
| RAM | 2 GB (the installer warns below 4 GB) | 4 GB; **8 GB with `--observability`** |
| Disk | 10 GB free | 25 GB or more (images, build artifacts, backups) |
| Network | Public IPv4 (or IPv6); ports **80** and **443** free and reachable from the internet | |
| DNS | Records for the panel and its `agents.` host | Also `grafana.` with `--observability` |
| Other | Root access. The installer installs Docker Engine and the Compose plugin if missing. | |

The host runs only Falak. Do not use it as an app server.

### DNS records

Replace the example IP with your host's public address:

| Name | Type | Value | Needed for |
|---|---|---|---|
| `falak.example.com` | A and/or AAAA | `203.0.113.10` | Panel, installer script, agent enrollment |
| `agents.falak.example.com` | A and/or AAAA | `203.0.113.10` | Agent API (mutual TLS) |
| `grafana.falak.example.com` | A and/or AAAA | `203.0.113.10` | Only with `--observability` |

Behind Cloudflare, all three must be **DNS only**. See [DNS for the control plane](/docs/operations/dns/).

### Memory budget

Container memory limits are caps, not reservations. Idle usage was measured with three servers enrolled and one site deployed.

| Service | Limit | Idle |
|---|---|---|
| control-plane (panel and REST API) | 512 MB | 130–150 MB |
| agent-api (agents, installer, builders) | 512 MB | 70–100 MB |
| horizon (queue workers) | 512 MB | 130–150 MB |
| reverb (websockets) | 192 MB | 50 MB |
| scheduler | 256 MB | 45 MB |
| postgres 17 | 512 MB | 40–150 MB |
| valkey | 192 MB | 15 MB |
| edge (Caddy) | 128 MB | 25–35 MB |
| builder | 1.5 GB | 10–120 MB (builds use up to about 1 GB) |
| **Core total** | **≈ 4.3 GB** | **≈ 0.6–0.8 GB** |
| Observability (gateway, Loki, Tempo, VictoriaMetrics, Grafana) | 64 + 384 + 384 + 384 + 512 MB | ≈ 0.6 GB |

## Managed servers

| | Requirement |
|---|---|
| OS | **Ubuntu LTS**, fresh install. Ubuntu 24.04 is the tested target; the installer warns on anything that is not Ubuntu. |
| CPU architecture | amd64 (`x86_64`) or arm64 (`aarch64`) |
| Init system | systemd (required) |
| Access | Root, or a user with `sudo`, to run the one-line install command |
| Tools | `curl` or `wget` |
| Outbound network | HTTPS to your panel (`https://falak.example.com`, publicly trusted certificate) and to `https://agents.falak.example.com` (Falak's own CA). HTTPS to GitHub, nodejs.org and apt mirrors during provisioning, unless you set [download mirrors](/docs/operations/configuration/#runtime-download-mirrors). |
| Inbound network | SSH, plus 80/443 on servers that serve HTTP (app, web and load balancer types). The agent needs no inbound port. |
| RAM | 1 GB works for small apps. Falak adds a 2 GB swap file below 2 GB RAM and a 4 GB swap file below 8 GB. On-server builds (not available yet) would need 2 GB. |

Use a fresh machine. Provisioning manages the firewall (nftables, default drop), SSH configuration (`PasswordAuthentication no`), the hostname, the timezone and swap. Existing web servers on ports 80/443 conflict with Caddy.

## Your apps

| Stack | What Falak needs from your repository |
|---|---|
| Laravel, Symfony, Statamic, PHP | A `composer.json`. A `package.json` with a `build` script if you compile assets. |
| Node.js, Next.js, Nuxt | A `package.json` with a `start` script that listens on `$PORT`. |
| Bun | A `package.json` (Bun is chosen when `bun.lock`/`bun.lockb` exists or `packageManager` says bun) with a `start` script. |
| Deno | A `deno.json` or `deno.jsonc` with a `start` task. |
| Static | An `index.html`, or a Vite/Astro/Create React App build without a `start` script. |
| Docker | A public image, or a `Dockerfile` plus a [builder server](/docs/servers/server-types/) with Docker. The container must listen on `$PORT`. |
| Docker Compose | A `compose.yaml` (repository) or pasted inline. |

## Your computer

- A modern browser. The UI uses WebSockets (`wss://falak.example.com/app/…`).
- Optional: the [`falak` CLI](/docs/cli/install-and-login/) for macOS or Linux (amd64 or arm64).

## Next steps
