Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

S3gaM3/OwnCord

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

338 Commits

Repository files navigation

OwnCord

The gaming chat platform you actually own.

A self-hosted Windows chat platform with real-time messaging, voice/video, file sharing, and a web admin panel. Run your own server and keep everything under your control — zero cloud dependencies, works fully on LAN.

OwnCord Client

Login Page Admin Panel

Features

Chat

  • Real-time text messaging over WebSocket
  • Message editing, deletion, and replies
  • Emoji reactions with per-message counts
  • Typing indicators
  • Full-text message search (SQLite FTS5)
  • Pinned messages per channel
  • Rich link previews with Open Graph metadata
  • YouTube embed support with cached titles
  • GIF picker powered by Tenor with inline rendering
  • Inline image previews with lightbox viewer

Voice & Video

  • Voice channels powered by LiveKit SFU
  • Webcam video chat with Discord-style grid layout (fixed 16:9 aspect ratio)
  • Sidebar stream preview (hover to see live video thumbnail)
  • Mute, deafen, camera, and screenshare controls
  • Push-to-talk with global hotkey (non-consuming, works while unfocused)
  • Per-user volume control (right-click user in voice channel)
  • RNNoise ML noise suppression
  • Voice activity detection with speaker indicators (pulsing green glow)
  • Connection quality indicator with expandable transport stats
  • Voice call duration timer (MM:SS / HH:MM:SS elapsed)
  • LiveKit server runs as a companion process alongside chatserver.exe

Direct Messages

  • One-on-one DM conversations with any server member
  • DM preview section in sidebar with unread bubble indicators
  • Auto-reopen DM channels on incoming message
  • DM header shows @ username with live online status

Channels & Organization

  • Text and voice channels organized by categories
  • Create, edit, delete, and reorder channels
  • Unread message indicators
  • Quick channel switcher (Ctrl+K)

File Sharing

  • Drag-and-drop and clipboard paste uploads
  • Inline image previews with persistent caching (IndexedDB)
  • File download with native save dialog
  • Configurable max upload size

Users & Permissions

  • Invite-only registration with invite codes
  • Role-based permissions with custom roles
  • Member list with online/offline presence
  • User profiles with status (online, idle, dnd, offline)

Administration

  • Web-based admin panel at /admin (IP-restricted to private networks by default)
  • Dashboard with server stats and recent activity
  • User management (ban, kick, role assignment) with modals
  • Channel management (create, edit, delete)
  • Settings management (server name, MOTD, limits, security)
  • Live server log streaming via SSE with level filters, search, auto-scroll, pause/resume, copy, and clear
  • Audit log with search, action type filter, copy, and CSV export
  • Database backup and restore with pre-restore safety backups
  • Server update checker and one-click apply (GitHub Releases)
  • Metrics endpoint with uptime, goroutines, heap, connected users
  • Diagnostics endpoint for connectivity checks

Security

  • TLS encryption (self-signed, Let's Encrypt, or custom cert)
  • Trust-on-first-use certificate pinning in the client
  • Two-factor authentication (TOTP) with QR enrollment and backup codes
  • Ed25519-signed client auto-updates
  • Rate limiting on all endpoints
  • CSRF protection and security headers
  • Account deletion with password confirmation and data anonymization

Desktop Client

  • Native Windows app built with Tauri v2
  • System tray integration
  • Desktop notifications with taskbar flash and sound
  • In-app auto-update with progress notification
  • Credential storage via Windows Credential Manager
  • Auto-login with saved credentials (one-click connect)
  • Custom emoji picker
  • Compact mode for information-dense layouts
  • Discord-style settings panel with blurred backdrop
  • OC Neon Glow theme with custom theming system (JSON import/export)
  • Accent color picker
  • Quick-switch server overlay for multi-server users
  • Structured logging with JSONL persistence (5-day rotation)

Quick Start

  1. Download chatserver.exe and the OwnCord installer from GitHub Releases
  2. Run chatserver.exe — generates config.yaml and a data/ directory (database, TLS certs, uploads, backups) on first run
  3. Open https://localhost:8443/admin to create the Owner account
  4. Generate an invite code in the admin panel and share it
  5. Friends install the client, enter your server address (ip:8443), and register with the invite code

The client uses TOFU (Trust On First Use) for self-signed certificates — it prompts to trust the server on first connection, then pins it for future sessions.

Voice & Video Setup (Optional)

Voice and video require LiveKit Server:

  1. Download livekit-server from the LiveKit releases page
  2. Edit config.yaml and set:
    voice:
     livekit_api_key: "devkey" # any string
     livekit_api_secret: "secret-min-32-characters-long!!" # min 32 chars
     livekit_binary: "C:/path/to/livekit-server.exe"
  3. Restart chatserver.exe — it auto-starts LiveKit as a companion process

Networking

For friends outside your LAN, you need to forward these ports:

Port Protocol Purpose
8443 TCP HTTPS, WebSocket, REST API
7881 TCP LiveKit signaling (voice/video)
50000-60000 UDP LiveKit WebRTC media (voice/video)

Alternatively, use Tailscale for zero-config networking with no port forwarding.

Architecture

Two components: a Go server and a Tauri v2 client (Rust + TypeScript).

+---------------------+ +---------------------+
| OwnCord Client | | OwnCord Server |
| (Tauri v2) | | (Go) |
| | | |
| +---------------+ | WSS | +---------------+ |
| | Chat UI |--+------->| | WebSocket Hub| |
| +---------------+ | | +---------------+ |
| +---------------+ | HTTPS | +---------------+ |
| | REST Client |--+------->| | REST API | |
| +---------------+ | | +---------------+ |
| +---------------+ | LiveKit | +---------------+ |
| | Voice/Video |--+------->| | LiveKit SFU | |
| +---------------+ | | +---------------+ |
+---------------------+ | +---------------+ |
 | | SQLite DB | |
 | +---------------+ |
 +---------------------+
  • WebSocket — chat messages, typing, presence, voice signaling
  • REST API — message history, file uploads, channel management, auth
  • LiveKit — voice and video via LiveKit SFU (companion process)

Project Structure

OwnCord/
├── Server/ # Go server
│ ├── api/ # REST handlers + middleware
│ ├── ws/ # WebSocket hub + handlers
│ ├── db/ # SQLite queries + migrations
│ ├── auth/ # Authentication + rate limiting
│ ├── config/ # YAML config loading
│ ├── updater/ # GitHub Releases update checker
│ ├── admin/ # Web admin panel (static SPA)
│ ├── storage/ # File upload storage
│ ├── permissions/ # Role-based permission system
│ └── migrations/ # Database migration files
├── Client/
│ └── tauri-client/ # Tauri v2 desktop client
│ ├── src-tauri/ # Rust backend (plugins, commands)
│ ├── src/ # TypeScript frontend
│ │ ├── lib/ # Core services (API, WS, LiveKit, updater)
│ │ ├── stores/ # Reactive state (auth, channels, messages, voice)
│ │ ├── components/ # UI components (28 modules)
│ │ ├── pages/ # Page layouts
│ │ └── styles/ # CSS
│ └── tests/ # Unit, integration, and E2E tests
└── docs/ # Project documentation (Obsidian vault)

Building from Source

Prerequisites

  • Go 1.25+
  • Node.js 20+
  • Rust (stable)
  • Windows 10/11

Server

cd Server
go build -o chatserver.exe -ldflags "-s -w -X main.version=1.0.0" .

Client

cd Client/tauri-client
npm install
npm run tauri build

The installer is output to Client/tauri-client/src-tauri/target/release/bundle/nsis/.

Running Tests

# Server
cd Server && go test ./...
cd Server && go test ./... -cover # with coverage
# Client
cd Client/tauri-client
npm test # all tests (vitest)
npm run test:unit # unit tests only
npm run test:integration # integration tests
npm run test:e2e # Playwright E2E (mocked Tauri)
npm run test:e2e:native # Playwright E2E (real Tauri exe + CDP)
npm run test:coverage # coverage report
# Type checking & linting
npm run typecheck # full typecheck
npm run lint # ESLint check
npm run lint:fix # ESLint auto-fix

Configuration

The server generates a config.yaml on first run. All runtime data is stored in a data/ directory alongside the executable:

data/
├── owncord.db # SQLite database
├── certs/ # TLS certificates (auto-generated if self_signed)
├── uploads/ # User-uploaded files
└── backups/ # Database backups

Key settings:

Setting Default Description
server.port 8443 HTTPS port
server.name OwnCord Server Display name
tls.mode self_signed TLS mode (self_signed, acme, manual, off)
upload.max_size_mb 100 Max upload size
voice.livekit_url ws://localhost:7880 LiveKit server WebSocket URL
voice.livekit_api_key LiveKit API key (required for voice)
voice.livekit_api_secret LiveKit API secret (min 32 chars, required for voice)
voice.livekit_binary Path to livekit-server binary (empty = don't auto-start)
voice.quality medium Voice quality (low, medium, high)
server.admin_allowed_cidrs private nets CIDRs allowed to access /admin
github.token Token for update checks (optional, for higher rate limits)

Auto-Updates

The client checks for updates after connecting to the server. Updates are Ed25519-signed and verified before install.

To enable signed releases in CI, add these GitHub repository secrets:

  • TAURI_SIGNING_PRIVATE_KEY — Ed25519 private key (via npx tauri signer generate)
  • TAURI_SIGNING_PRIVATE_KEY_PASSWORD — key password

Documentation

Contributing

  1. Fork the repo and create a feature branch from dev
  2. Follow existing code style and conventions
  3. Write tests for new functionality
  4. Open a PR against dev with a clear description

See Contributing Guide for details.

Tech Stack

Component Technology
Server Go, chi router, LiveKit server SDK
Database SQLite (pure Go, embedded)
Client Tauri v2 (Rust + TypeScript)
Voice/Video LiveKit SFU (companion process)
Build NSIS installer, GitHub Actions CI

License

AGPL-3.0

About

OwnCord is a self-hosted, open-source chat platform with text channels, voice/video chat, direct messages, and a desktop client — built for communities that want full control over their data.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /