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
| Method | Path | Purpose |
|---|---|---|
POST | /api/register | Create an account (first account → admin) |
POST | /api/login | Get a session token (30 days) |
POST | /api/login/2fa | Complete login with a TOTP code |
POST | /api/verify-email | Verify an email with the 6-digit code |
POST | /api/resend-verification | Request a new verification code |
GET | /api/sync | Fetch your encrypted snapshot |
POST | /api/sync | Store the next revision (409 on conflict) |
GET | /api/account | Account status |
POST | /api/account/delete | Permanently delete the account |
GET | /api/health | Liveness check |
GET | /api/setup/status | { "adminExists": bool } — first-run check |
GET | /api/public/stats | Public server stats |
GET | /api/admin/users | User list (admin session only) |
Configuration
The sync server is configured with environment variables:
| Variable | Default | Purpose |
|---|---|---|
PORT | 8047 | Listen port |
DATA_DIR | ./data | SQLite fallback location |
DATABASE_URL | unset | PostgreSQL connection string (PgBouncer works too) |
SERVER_NAME | Connexia Sync Server | Name shown on the public dashboard |
SMTP_HOST | unset | SMTP relay for verification emails |
SMTP_PORT | 587 | SMTP port (465 if SMTP_SECURE=true) |
SMTP_SECURE | false | Use implicit TLS |
SMTP_USER/SMTP_PASS | unset | SMTP AUTH PLAIN credentials |
SMTP_FROM | Connexia <[email protected]> | Sender address |
Without SMTP, verification codes are printed to the server log instead of emailed — fine for local testing and admin setup.