Files
OwnCord/docs/quick-start.md
T
J3vbandClaude Fable 5 e392939c52 chore(deps): batch-apply all open dependabot bumps (2026-07-23)
Applies all 22 open dependabot PRs in one pass (CI on those PRs never
ran — Actions minutes exhausted). Verified locally via the ci-check
mirror: builds (all tag variants), vet, golangci-lint, sqlc/protocol
verify, vitest 3304/3304, npm audit clean, cargo check.

Server (Go): wazero 1.12.0, x/mod 0.38.0, chi 5.3.1, otel 1.44.0,
otel/trace 1.44.0, otel prometheus exporter 0.66.0, modernc sqlite
1.54.0, livekit/protocol 1.50.2, koanf/v2 2.3.5, x/sync 0.22.0.
Also x/text 0.39.0 (fixes GO-2026-5970, flagged by govulncheck).
livekit/protocol requires Go 1.26 → go.mod, CI pins, and docs bumped.

Client (npm, lockfile-only): playwright/test 1.61.1, oxlint 1.75.0,
eslint 9.39.5, knip 6.29.0, plugin-http 2.5.9, plugin-fs 2.5.1,
plugin-opener 2.5.4, tauri-apps/api 2.11.1 + npm audit fix
(brace-expansion, fast-uri transitive highs).

Client (cargo, lockfile-only): futures-util 0.3.33, env_logger
0.11.11, serde 1.0.229, tauri-typegen 0.5.2.

Closes #1204 #1205 #1206 #1207 #1209 #1210 #1211 #1212 #1213 #1214
Closes #1215 #1216 #1219 #1220 #1221 #1222 #1223 #1225 #1226 #1227 #1228 #1224

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 17:23:31 +02:00

3.2 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 20+ 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. Create the Owner account.
  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 create the Owner account.

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.0.0" .

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

# Client
cd Client/tauri-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