About

Voice rooms you can run yourself

Chatovo is an open project: the code, the media server and the database live on your own machines, not in someone else's cloud.

Why it exists

The project began as an attempt to strip the ceremony out of talking to people.

A conversation should not need setup

Getting friends together for a call usually means creating a server, laying out channels and handing out roles. Here you create a room and send a link.

The data stays with the owner

The media server, the database and the uploaded files are all yours to deploy. No third-party analytics, no external storage for attachments.

Everything is in the open

The source, the release history and the discussions live on GitHub. You can read how any part works and build your own copy.

How it is built

A Bun workspaces monorepo: client, server, desktop shell and shared schemas in one place.

Client

Next.js 16 and React 19, exported statically. Structured with Feature-Sliced Design, styled with SCSS modules.

Desktop and mobile

Tauri 2: the same web app inside a native Rust shell for Windows, macOS, Linux and Android.

Server

NestJS 11 on Bun with Prisma over a self-hosted Postgres. Authentication runs on better-auth.

Media

A self-hosted LiveKit SFU for WebRTC. Room access is granted by a token the server signs.

Shared schemas

Zod schemas in the @chatovo/schemas package are the single source of truth for client and server types.

Tooling

TypeScript throughout, Vitest and Playwright for tests, builds and releases through GitHub Actions.

Who took part

Thanks to everyone whose code made it into the project.

How to contribute

The project is open to changes, from a typo in a string to a whole new settings section.

Send a change

Fork the repository, branch off master and open a pull request. The code style and structure are documented in the repo.

Report a problem

Found a bug or have an idea? Open an issue. Reproduction steps and the app version make it far quicker to work through.

Run your own

The repository ships Caddy and LiveKit configuration so you can stand up a full instance of your own.