tulipfarm docs

Install (self-host)

One-line install of the TulipFarm OCI stack on Linux, macOS, or Windows (WSL2).

The one-line installer stands up the full TulipFarm stack (the app image + a bundled PostgreSQL 17 + pgvector) with Docker or Podman, generates all secrets for you, and prints the setup-wizard URL. It asks zero configuration questions.

Re-running the installer is the upgrade path: it preserves your .env (never re-generates secrets) and your database, then pulls the pinned version and restarts.

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/TulipFarm/tulipfarm/main/scripts/get.tulipfarm.sh | sudo bash

What it does: detects a container engine (on Linux, auto-installs Podman if neither Docker nor Podman is present), writes /opt/tulipfarm/{docker-compose.yml,.env}, generates ENCRYPTION_KEY / JWT_SECRET / WEBHOOK_SIGNING_SECRET / POSTGRES_PASSWORD, brings the stack up, polls /health, and prints the URL to open.

On macOS with no container runtime, install Docker Desktop or Podman first. The no-VM native lane is not yet available.

Windows (WSL2)

From PowerShell:

irm https://raw.githubusercontent.com/TulipFarm/tulipfarm/main/scripts/install.ps1 | iex

This verifies WSL2 (and a Linux distro) is installed, then runs the Linux installer inside WSL. If WSL is missing it prints the wsl --install steps to run first.

Finish setup

Open the printed URL. The app redirects to the setup wizard at /setup. Work through the four steps:

  1. Admin account — enter an email and password. This is the only step that requires no authentication; the route locks once any admin exists.
  2. Business profile — give your instance a name and optional description.
  3. LLM provider — choose a provider (Anthropic, OpenAI, Azure OpenAI, or an OpenAI-compatible endpoint), enter your credentials, and pick a model. You can skip this step and configure it later in Settings → LLM Config.
  4. Soul backup — optionally set a git remote URL for soul backup and sync. Skippable.

After step 4, the wizard marks setup complete in soul.yaml and redirects to the main workspace. The setup routes lock — no second visitor can claim the instance through the wizard.

If the installer detected a public IP it prints a TLS warning: the instance is reachable over HTTP and the first visitor becomes admin — complete setup immediately and put a reverse proxy with TLS in front for production.

Once you are in, you run TulipFarm by talking to it — describe what you want and agents build it. See Building by chat to get started.

Overrides

Linux / macOS

All optional, set as environment variables before running:

VariableDefaultPurpose
TF_VERSIONlatestApp image tag to run (ghcr.io/tulipfarm/tulipfarm:<tag>).
TF_PORT8080Host port to publish.
TF_INSTALL_DIR/opt/tulipfarmInstall directory.
TF_RUNTIMEautoForce docker or podman.
TF_BASE_URL / TF_REFGitHub raw / mainWhere compose + .env.example are fetched from.

Example — pin a version on a custom port:

TF_VERSION=v0.1.0 TF_PORT=9000 \
  bash -c "curl -fsSL https://raw.githubusercontent.com/TulipFarm/tulipfarm/main/scripts/get.tulipfarm.sh | sudo -E bash"

Windows (WSL2)

The PowerShell script accepts named parameters. Download it first, then run with the parameters you need:

Invoke-WebRequest https://raw.githubusercontent.com/TulipFarm/tulipfarm/main/scripts/install.ps1 -OutFile install.ps1
.\install.ps1 -Version v0.1.0
ParameterDefaultPurpose
-VersionlatestApp image tag (TF_VERSION inside WSL).
-BaseUrlGitHub rawBase URL for fetched files.
-RefmainGit ref under -BaseUrl.

To set TF_PORT, TF_INSTALL_DIR, or TF_RUNTIME, open your WSL terminal and run the bash installer directly with those env vars instead.

On this page