Files
OwnCord/docs/quick-start.md
T
J3vbandClaude Opus 5 4e7e4b12ac release: v1.2.0-alpha.4 (#1423)
Bumps the client version across every pin verify-versions enforces
(package.json, tauri.conf.json, Cargo.toml) plus the two lockfiles that carry
it, and the user-facing build examples in README.md, docs/deployment.md,
docs/quick-start.md, docs/api.md and the issue-form placeholders.

Deliberately NOT bumped: the v1.2.0-alpha.3 references in ci.yml,
release.yml and docker-smoke.sh, which record the release that published from
a red commit and are the reason the gate-evidence job exists; and the string in
scripts/check-doc-counts.mjs, which is a selftest fixture asserting a version
number is not read as a ledger claim. Rewriting either would falsify a record.

CHANGELOG's Unreleased section becomes v1.2.0-alpha.4.

Verified rather than assumed:
- npm ci exits 0, so package-lock.json still matches package.json.
- cargo metadata --locked exits 0, so Cargo.lock needs no regeneration.
- The verify-versions comparison was run locally against tag v1.2.0-alpha.4:
  all three sources agree, so the tag will not be rejected.
- npm run check passes end to end, exit 0.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 21:37:40 +02:00

3.6 KiB

Quick Start Guide

Get OwnCord running with the fewest possible steps.

Choose Your Setup Path

Goal Best path
Fastest local/LAN setup Prebuilt binaries
Linux server with easiest operations Docker
Custom dev build Build from source

Platform Support (Current Releases)

Component Windows x64 Linux x64 Linux ARM64
Server binary Yes Yes Not published yet
Desktop client Yes Yes Yes

Prerequisites

  • Go 1.26+ (only if building server from source)
  • Node.js 24+ and Rust (only if building client from source)
  • Docker + Compose v2 (Docker path only)
  • LiveKit (optional, required for voice/video)
  1. Download from GitHub Releases.
  2. Start the server:
    • Windows: chatserver.exe
    • Linux: ./chatserver
  3. Open https://localhost:8443/admin.
  4. Complete the setup wizard: it creates the Owner account and configures the basics (server name, port, security, uploads, voice). Your choices are written to config.yaml automatically — no manual editing needed.
  5. Create invite codes and share them.

Option B: Docker (Linux server)

cd Server
cp .env.example .env
cp livekit.yaml.example livekit.yaml
# Edit both files before start
docker compose up -d

Then open https://localhost:8443/admin and complete the setup wizard.

Full Docker details: Deployment Guide.

Option C: Build from source

# Server (Windows)
cd Server
go build -o chatserver.exe -ldflags "-s -w -X main.version=1.2.0-alpha.4" .

# Server (Linux)
cd Server
CGO_ENABLED=0 go build -o chatserver -ldflags "-s -w -X main.version=1.2.0-alpha.4" .

# Client
cd Client
npm install
npm run tauri build

What Happens on First Server Start

  • config.yaml is created with defaults.
  • data/ is created for DB, certs, uploads, and backups.
  • A self-signed TLS certificate is generated.
  • SQLite schema and migrations are applied.

Client Connection Notes

  • The default server address is https://<server-ip>:8443.
  • The desktop client uses TOFU certificate pinning:
    • First connection prompts for trust.
    • Future connections require the same cert fingerprint.
  • Linux/Wayland: the client automatically sets WEBKIT_DISABLE_DMABUF_RENDERER=1 on Wayland sessions to work around WebKitGTK rendering crashes. Export the variable yourself (any value) before launching to override this.

If Remote Users Cannot Connect

  1. Use Tailscale for the simplest remote setup.
  2. Or configure Port Forwarding.

Optional: enable the GIF picker

GIFs are off by default and each server supplies its own key — OwnCord does not ship one, so nothing is shared between servers.

  1. Request a key at partner.klipy.com.
  2. Set it on the server, then restart:
# Preferred — keeps the credential out of config.yaml
OWNCORD_GIF_API_KEY=your_key_here

Or in config.yaml:

gif:
  api_key: "your_key_here"

The key stays server-side; clients only ever call /api/v1/gif/* on their own server. Until one is set, the client's GIF button is disabled with "GIFs are not enabled on this server" — nothing else is affected.

Next Steps