Documentation

Quick start and reference

Quick start

Install Connexia on any device, then create an account or sign in to the sync server so your hosts and keys follow you everywhere.

On Windows, run the installer; on Linux, extract the tarball and launch the binary:

# Linux
tar -xzf connexia-windows-x64.zip # (Windows zip) or the Linux tarball
./connexia

# point the app at your sync server
# Settings → Sync → Change server → https://sync.connexia.run

Your data is encrypted on-device with a key derived from your password. The sync server can never read it.

Sync server

Connexia's sync server is a small, zero-knowledge service that stores an encrypted snapshot per account. It is the only backend you need: it handles accounts, sessions, TOTP two-factor authentication and the encrypted blob storage.

  • Never sees snapshot plaintext — data is AES-256-GCM encrypted before upload.
  • Passwords are stored as scrypt hashes, never in plaintext.
  • The first account on a fresh server becomes the admin and is trusted immediately (no email verification).
  • Regular accounts verify their email with a 6-digit code.

Self-hosting

Run your own sync server anywhere — a VPS, a Raspberry Pi, or a Docker host. Storage is pluggable: PostgreSQL when DATABASE_URL is set, otherwise a pure-Go SQLite file. Legacy JSON data is migrated automatically on first boot.

# With Docker
docker build -t syncserver ./server
docker run -d -p 8047:8047 -v sync-data:/data \
  -e SMTP_HOST=... -e SMTP_USER=... -e SMTP_PASS=... syncserver

To deploy in Coolify: add a Dockerfile resource pointing at server/Dockerfile, expose port 8047, mount a volume at /data (or add a Postgres resource and set DATABASE_URL), add your SMTP variables, and attach your domain. Coolify handles Let's Encrypt automatically.

The web UI is served by the same binary: the public landing page at /, and an admin panel at /admin for the admin account.

API endpoints

MethodPathPurpose
POST/api/registerCreate an account (first account → admin)
POST/api/loginGet a session token (30 days)
POST/api/login/2faComplete login with a TOTP code
POST/api/verify-emailVerify an email with the 6-digit code
POST/api/resend-verificationRequest a new verification code
GET/api/syncFetch your encrypted snapshot
POST/api/syncStore the next revision (409 on conflict)
GET/api/accountAccount status
POST/api/account/deletePermanently delete the account
GET/api/healthLiveness check
GET/api/setup/status{ "adminExists": bool } — first-run check
GET/api/public/statsPublic server stats
GET/api/admin/usersUser list (admin session only)

Configuration

The sync server is configured with environment variables:

VariableDefaultPurpose
PORT8047Listen port
DATA_DIR./dataSQLite fallback location
DATABASE_URLunsetPostgreSQL connection string (PgBouncer works too)
SERVER_NAMEConnexia Sync ServerName shown on the public dashboard
SMTP_HOSTunsetSMTP relay for verification emails
SMTP_PORT587SMTP port (465 if SMTP_SECURE=true)
SMTP_SECUREfalseUse implicit TLS
SMTP_USER/SMTP_PASSunsetSMTP AUTH PLAIN credentials
SMTP_FROMConnexia <[email protected]>Sender address

Without SMTP, verification codes are printed to the server log instead of emailed — fine for local testing and admin setup.