|
**No account required**
A server chooses which identities it admits. Guests hold a keypair on their own
device. An account carries your identity *between* servers — it is not the price
of entry.
|
**Real-time voice and video**
Go and Pion WebRTC relay voice, camera and screen share without transcoding.
Noise suppression, echo cancellation and voice activity detection run on the
client.
|
|
**Yours to run**
Docker Compose, Helm, or a Cloudflare Tunnel. One compose file can host as many
servers as you like — they share an SFU.
|
**Desktop and web**
Electron app for Linux, macOS and Windows with auto-updates, plus a browser
client. The desktop app can host a server on its own.
|
|
**Files and messages**
Persistent chat backed by SQLite, uploads to any S3-compatible store, and
thumbnails generated out of process so a bad image cannot take the server down.
|
**Open about how it is built**
Gryt is developed partly with AI assistance. The
[policy](https://docs.gryt.chat/docs/about/ai) says which parts of the codebase
never merge without a human reading the whole diff.
|
## Features
- Voice chat over WebRTC with the Opus codec
- Video chat from your camera
- Camera video and screen sharing, both with audio
- Text chat with Markdown, mentions, and file sharing
- Self-hostable with Docker Compose
- LAN server discovery via mDNS
- Global push-to-talk with configurable keybinds
- RNNoise-based noise suppression
- Auto-updates
## Download
| Platform | Link |
|----------|------|
| Web | [app.gryt.chat](https://app.gryt.chat) |
| Linux (AppImage / deb) | [GitHub Releases](https://github.com/Gryt-chat/gryt/releases/latest) |
| Linux (Snap) | [Snap Store](https://snapcraft.io/gryt-chat) |
| Linux (Arch) | [AUR: gryt-chat-bin](https://aur.archlinux.org/packages/gryt-chat-bin) |
| Windows | [GitHub Releases](https://github.com/Gryt-chat/gryt/releases/latest) |
| macOS | [GitHub Releases](https://github.com/Gryt-chat/gryt/releases/latest) |
## Self-hosting
See the **[Quick Start guide](https://docs.gryt.chat/docs/host/quick-start)** to self-host Gryt with Docker Compose — two files, one command, no cloning required.
Or manage servers from a terminal with the **[Gryt CLI](https://docs.gryt.chat/docs/host/cli)**, which writes the compose file for you:
```bash
curl -fsSL https://get.gryt.chat | sh
```
## Development
```bash
git clone --recurse-submodules https://github.com/Gryt-chat/gryt.git
cd gryt
./ops/start_dev.sh
```
Open **http://localhost:3666** and you're in.
## Documentation
Full docs at **[docs.gryt.chat](https://docs.gryt.chat)** — architecture, configuration, deployment, and more.
## Contributing
See the [contributing guide](https://docs.gryt.chat/docs/about/contributing) for how to get involved.
Nothing security-relevant merges without being read line by line — the SFU, authentication, identity, the image worker and the data layer only change through a reviewed pull request. See the [AI policy](https://docs.gryt.chat/docs/about/ai) for the exact paths, how to verify it, and the disclosure rules for contributions.
## Sponsors
Nobody sponsoring monthly yet.
What sponsoring pays for, the tiers, and everyone who has sponsored:
[gryt.chat/sponsors](https://gryt.chat/sponsors). To sponsor:
[GitHub Sponsors](https://github.com/sponsors/Gryt-chat).
## Acknowledgments
Gryt wouldn't exist without these projects and resources. I'm forever grateful to the people behind them for sharing their work with the world.
**Libraries that power Gryt:**
- [Pion WebRTC](https://github.com/pion/webrtc) — Pure Go WebRTC stack that the entire SFU is built on. Sean DuBois and the Pion community taught me more about WebRTC than anything else
- [RNNoise](https://jmvalin.ca/demo/rnnoise/) via [@shiguredo/rnnoise-wasm](https://github.com/niccokunzmann/rnnoise-wasm) — Jean-Marc Valin's neural network noise suppression, compiled to WASM for the browser
- [Base UI](https://base-ui.com/) — Accessible, unstyled component primitives, which [`@gryt/ui`](https://github.com/Gryt-chat/ui) is built on and the client renders through
- [Socket.IO](https://socket.io/) — Real-time signaling between client and server
- [Electron](https://www.electronjs.org/) — Desktop app shell with native OS integration
**Specs and references:**
- [MDN WebRTC API docs](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API) — The single best reference for understanding WebRTC in the browser
- [AV1 RTP spec (Dependency Descriptor)](https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension) — The spec that made SVC layer-aware forwarding possible
- [WebRTC Simulcast Playground](https://orphis.github.io/webrtc-sandbox/simulcast-playground.html) by Orphis — Invaluable for understanding simulcast, SVC scalability modes, and encoder behavior
- [mediasoup documentation](https://mediasoup.org/documentation/) — Excellent SFU architecture reference that shaped how I think about track forwarding
- [Microsoft Application Loopback Audio Capture sample](https://learn.microsoft.com/en-us/samples/microsoft/windows-classic-samples/applicationloopbackaudio-sample/) — The WASAPI example that showed how to capture per-process audio on Windows while excluding Gryt's own audio
**Projects that inspired the journey:**
- [Mumble](https://www.mumble.info/), [Jitsi](https://meet.jit.si/), [Revolt](https://revolt.chat/), [LiveKit](https://livekit.io/), [coturn](https://github.com/coturn/coturn), and many others — see [The Projects That Paved the Way](https://gryt.chat/blog/the-projects-that-paved-the-way) for the full story
## License
This project is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE).
For commercial licensing inquiries, contact [sivert@gryt.chat](mailto:sivert@gryt.chat).