PROJECT / 2026
Vokko
Open Source Community Chat
Open source, self-hostable community chat app aiming for Discord parity, with no paid tiers. A Rust server and a React client that runs in the browser or in a Tauri desktop shell, with voice, video and built-in games.
- type
- Self-hostable chat server + web and desktop client
- status
- Pre-1.0, under active development
- server
- One Rust binary + PostgreSQL
- clients
- Browser and Tauri desktop
- license
- AGPL-3.0-or-later (protocol types and bot examples Apache-2.0)
- stack
- Rust · Axum · Tokio · PostgreSQL · SQLx · React 19 · TypeScript · Vite · Tauri 2 · WebSockets · LiveKit · Playwright · Vitest · Docker Compose · Caddy

01 / Overview
Vokko is an open source community chat app with feature and layout parity with Discord as the target, and no paid tiers: every perk Discord sells is a normal feature here, and only the paid machinery (billing, shop, boosts, quests, badges) is out of scope. The backend is a self-hostable Rust server built on Axum, Tokio and PostgreSQL that serves a REST API and a WebSocket gateway. The client is React 19 and TypeScript, and it runs either in the browser or inside a Tauri 2 desktop shell. Servers, channels, threads, DMs and group DMs, roles and permissions, invites, replies, reactions, polls, stickers, custom emoji, attachments, link previews, friends and presence all exist, together with voice and video through LiveKit, bots with slash commands, a soundboard, moderation tools and an audit log. Calls can also host Activities, web games that run on the call grid: Sketch (draw and guess), chess, four in a row, Codewords, Werewolf and more, plus Spotify and Stremio activities driven by bots. The project is pre-1.0 and says so: a parity inventory tracks every row of the target feature list, with how it looks and how it works judged separately and honestly.
02 / Key features
- –Servers, channels, threads, DMs and group DMs, roles and permissions, invites, replies, reactions, polls, stickers, custom emoji, attachments and link previews, friends and presence
- –Voice and video calls through LiveKit, with a call grid, screen sharing and a soundboard
- –Activities: sandboxed web games that run on the call grid, including Sketch, chess, four in a row, Codewords, Werewolf, trivia and Who's the Spy, plus a documented games SDK so anyone can add their own
- –Bots and slash commands over the public API, with a small echo-bot example, plus Spotify and Stremio bots and an AI bridge
- –Moderation tools and an audit log, with permissions checked by the server rather than the client
- –One client for browser and desktop: the same React app runs on the web and inside a Tauri 2 shell, and on phones it becomes a list page, a chat page and a details page with bottom sheets
- –Self-hosting with Docker Compose, optional Caddy for HTTPS and LiveKit for media, plus backup and restore scripts and a free-tier hosting guide
- –A wire contract documented in docs/api.md, with Rust types in a shared protocol crate and their TypeScript twins in the client
03 / Challenges
- –Matching a product as large as Discord means hundreds of small behaviours, and a screen that looks right is not the same as a feature that works, so progress is easy to overstate
- –The same client has to run in the browser, in a Tauri desktop shell and on a phone-sized screen, and has to be developed and tested without a running backend
- –Third-party web games run inside a call, so they need to be isolated from the app while still sharing state with everyone in the call
- –A self-hostable server has to stay small and easy to run: one binary and a database, not a fleet of services
04 / Solution
The parity roadmap tracks every row of the target inventory, and the two questions, whether it looks the same and whether it works the same, get separate columns, with notes that name the evidence or what is missing. The client ships a built-in in-memory backend: without an API address it runs against a mock, which is what the Playwright end-to-end suite uses, while a real-server mode runs a separate spec set against vokko-server. The wire contract is written down in docs/api.md with Rust types in a protocol crate and TypeScript twins in the client, and `cargo xtask layers` enforces the dependency layers between crates. Games are loaded in sandboxed iframes and talk to the host over a versioned protocol on a MessagePort, so a game can sync its state through the app without any access to it. The server is a single Rust binary plus PostgreSQL, and migrations run on every start, so there is no separate setup step.
05 / Outcome
A working open source chat platform you can run yourself: a Rust server, a web and desktop client, voice and video, bots and a games SDK, released under AGPL-3.0. It is pre-1.0 and expects rough edges, and the repository says so plainly, with the roadmap as the honest record of what is done and what is partial.
06 / Screens
01 / 04


