Skip to content

Standalone Binary

Chatto ships as a single binary with an embedded NATS server and built-in Let’s Encrypt TLS. No reverse proxy, no external database — just one process serving everything. Alternatively, spin it up on any port and use your existing reverse proxy to wire things up and terminate TLS.

SINGLE PROCESS BrowserSvelteKit SPA :443ChattoConnectRPC · WebSocket · TLS NATS embedded ./data/ HTTPS WSS

The Chatto binary includes an embedded NATS server with JetStream for storage. It expects a chatto.toml configuration file (you can generate one using chatto init), and stores all data in a ./data/ directory.

  • A server with Chatto installed. Use brew install chattocorp/tap/chatto on macOS or Linux with Homebrew, or download the binary from GitHub Releases.
  • A domain pointing to your server (e.g., chat.example.com)
  • Firewall allowing inbound TCP 80 and 443

Please refer to the Quick Start guide for details on initializing your chatto.toml configuration file.

For production use, please review the file and at least:

  • configure SMTP credentials
  • set webserver.url to your public URL
  • review webserver.tls if you want Chatto to terminate TLS

It is also strongly recommended that you:

  • review the [core.assets.s3] section if you want to use an external object store for uploaded files (optional, but recommended; you can enable this later if you wish)
  • make a decision to either enable auth.direct_registration or configure at least one SSO provider (you can use both together!)
  • review the [push] section if you want to support native push notifications
  • review the [video] section if you want to support video uploads
  • review the [livekit] section if you want to support voice and video calls (requires LiveKit)

For production use on Linux, create a systemd unit to manage the process:

/etc/systemd/system/chatto.service
[Unit]
Description=Chatto
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=chatto
Group=chatto
WorkingDirectory=/opt/chatto
ExecStart=/opt/chatto/chatto run -c chatto.toml
Restart=always
RestartSec=5
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
Terminal window
sudo systemctl enable --now chatto

The standalone binary doesn’t include LiveKit. To add voice and video calls, you have two options:

  1. Switch to Docker Compose (recommended) — the Docker Compose guide includes LiveKit out of the box.
  2. Run LiveKit separately — install and run a LiveKit server alongside Chatto, then configure the LiveKit environment variables.