One image, one database, three variables.
This page gets Farmer running. The self-hosting guide in the repository has the Compose file, the upgrade steps and the backup steps.
Have a Postgres database
Any recent Postgres works: a managed one or a container next to Farmer. It is the only required dependency. S3 storage for uploads is optional and can be added later.
Run the image
docker run -d --name farmer -p 3000:3000 \ -e DATABASE_URL=postgres://farmer:…@db:5432/farmer \ -e BETTER_AUTH_SECRET=$(openssl rand -base64 32) \ -e BETTER_AUTH_URL=https://time.example.com \ ghcr.io/profico/farmer:latest
profico/farmer is the repository this instance was built from. Migrations run on start.
The three required variables
DATABASE_URLPostgres connection string.BETTER_AUTH_SECRETA long random string that signs sessions. Keep it secret and stable.BETTER_AUTH_URLThe public address of this instance, with https.Start the background worker
The worker runs the scheduled jobs: calendar and GitHub sync, recurring blocks, Slack reminders, the month-end reminder, the admin digest and web push. It runs in-process on the web host by default; a single instance is enough. Without it — or if every job is disabled — the app works, but nothing fills itself in.
Worker setup on GitHubOpen it and set up Farmer
The first visit asks for a name, email and password. That account administers the instance. From Settings, add a sign-in provider, connect integrations and invite people.
Optional integrations
Most of these are set in the app by an administrator, not in the environment.
Also: any OpenID Connect provider for sign-in, single-organization mode, and switches to turn off the assistant, MCP or CLI per deployment.
Rather not run it yourself? Get early access to hosted Farmer.