Run it yourself

One program, one folder, one afternoon. This is what it will take once there is a release. There is not one yet.

What you need

A machine
With a public address. One CPU core and 1 GB of memory is the target for 500 members.
A host name
Pointing at it. Choose it with care: passkeys are tied to it, and changing it later means everyone makes new ones.
Ports
80 and 443. Calls also need 24877, on UDP and TCP.
Nothing else
No mail server, no separate database, no cache, no configuration file.

Three ways to start it

Alone untried

churr serve -hostname chat.example.com \
  -data /var/lib/churr

Churr listens on 80 and 443 and fetches and renews its own certificate. Fetching a real certificate has not been tried yet; serving one you supply has.

Behind a proxy untried

churr serve -behind-proxy \
  -hostname chat.example.com \
  -data /var/lib/churr

Churr serves plain HTTP on localhost and your proxy handles HTTPS. The Caddy and nginx examples in the guide have not been tried.

In a container untried

cp .env.example .env
docker compose up -d

A compose.yaml comes with the source. It has never been built or started.

Either way, the log prints a one-time setup link. Open it, make the owner's passkey, confirm what the server may reach, and invite people.

Looking after it

Back up

churr backup -data /var/lib/churr /backups/today

Runs while the server runs. The result is a complete data folder: database, keys and uploaded files. Try a restore on a spare machine before you rely on it.

Upgrade

Back up, replace the program, start it. The database is migrated at start. There is no downgrade: to go back, restore the backup.

Other commands

recovery
A one-time link for someone who is locked out.
migrate-db
Moves a community between SQLite and PostgreSQL.
export
Everything the server can read, as files.
import slack
Reads a Slack export into a new community.

What has been measured

one laptop, one run each

These are measurements of single runs with the load generator on the same machine, and nothing more. No files, search, calls or phones were part of them.

500 members
All 500 connected on one CPU core with SQLite. At 5 messages a second, half of all posts were answered within 30 ms and 99 in 100 within 114 ms.
Memory
77 MiB with everyone connected. 147 MiB at its highest, at 20 messages a second.
5,000 members
On PostgreSQL. Not run.
Calls
A 25-person call was run on one laptop, not on a server.

Not out yet. Nearly a thing.

There is nothing to download today. The status page says exactly what is built, what is being built and what has never been tried, and it is updated as that changes.