Self-hosting

Read every line. Run it on your server. Owe us nothing.

Three imperatives. That's the whole pitch. Below: exactly what Unitae is, what it does with your data, what you need to run it, and how to get it running in three commands.

So here’s what you get when you run it yourself

Complete control

Your server, your rules. You decide where the data lives, who has access, and when updates happen. No third party between you and your congregation’s data.

Full data sovereignty

The database runs on your infrastructure. Nothing leaves your server unless you configure it to. No telemetry, no phone-home, no analytics.

No subscription, no dependency

Self-hosting is free, forever. The AGPL-3.0 license guarantees you can always run the software, regardless of what happens to MindsersIT.

Same features as managed

The code is identical. No locked features, no artificial limits. Unlimited publishers, territories, and storage — because it’s your server.

What you’ll need

Self-hosting is straightforward if you’re comfortable with a terminal. Here’s what’s required:

  • A Linux or macOS server (VPS, dedicated, or local network)
  • Docker and Docker Compose installed
  • At least 1 GB of RAM (2 GB recommended)
  • A domain name if you want HTTPS (not required for local use)
  • Basic terminal comfort — you’ll run a handful of commands
Unitae ships with PostgreSQL and Redis bundled in the Compose file. You don’t need to install them separately.

Get started in 3 commands

Clone the repository, copy the example environment file, and start the stack:

terminal

# Clone the repository

git clone https://github.com/Unitae/unitae.git && cd unitae

# Copy and edit the environment file

cp .env.example .env

# Start Unitae

docker compose up -d

Unitae is running on localhost:8080

The honest trade-offs

Self-hosting gives you full control. That also means full responsibility. Here’s the honest list:

Backups

Managed hosting runs daily backups with tested recovery. Self-hosted means you set up your own backup strategy.

TLS certificate

Managed hosting provisions and renews TLS automatically. On your own server, you’ll need a reverse proxy (Caddy, nginx) and handle certificate renewal.

Updates

Managed hosting updates automatically. Self-hosted means you pull the latest image and restart the stack when a new version drops.

Support

Managed subscribers get priority email support. Self-hosters have GitHub Issues and the community.

One file controls everything

The .env file controls everything. Key variables to configure:

  • DB_URL — PostgreSQL connection string (pre-configured in the Compose file, used for migrations)
  • DB_RUNTIME_URL — PostgreSQL connection as the unitae_app role, enforced by Row-Level Security
  • UNITAE_SESSION_SECRET — a long random string for signing session cookies (32+ characters)
  • UNITAE_BASE_URL — the public URL of your instance, used in emails and redirects
  • RESEND_API_KEY — your Resend API key for password resets and notification emails
The full list of environment variables with explanations is in the .env.example file at the root of the repository.

Not ready to self-host?

You've read the code. You know exactly what Unitae does. If you'd rather skip the server setup and get straight to the congregation work, managed hosting is €9/month — backups handled, TLS handled, updates handled. And every subscription funds the open-source development that benefits self-hosters too.

No credit card required. Cancel anytime, export all your data.