Table of Contents
gosuto-demo.mp4
Gōsuto is a native terminal client for the Matrix protocol, built for people who live in the terminal. It ships as a single Rust binary that handles chat, end-to-end encryption, and voice calls — no browser engine, no heavy runtime, just a lightweight TUI that stays out of your way.
The goal is simple: a fast, keyboard-driven Matrix experience with full voice support and under 60 MB of RAM.
- Vim-first navigation — Normal, Insert, and Command modes
- Encrypted chat — rooms, spaces, DMs, full E2EE with automatic key forwarding
- VoIP calls — LiveKit-based voice with push-to-talk support
- Room management — create, join, leave, view member lists and power levels
- Visual effects — matrix rain, glitch, text reveal animations (all togglable)
- Element compatible — tested against Element Web and Element X
- Markdown messages — bold, italic, strikethrough, code, links, lists, and more — auto-converted to HTML for other Matrix clients
- Lightweight — under 60 MB of RAM for everything
- Rust toolchain (only if building from source) — install via rustup
- Nerd Font (optional) — enables icon glyphs throughout the UI; toggleable in config, falls back to plain Unicode when disabled
Pre-built binaries for Linux and Windows are available on the releases page.
Linux:
chmod +x gosuto
sudo mv gosuto /usr/local/bin/Windows:
Download gosuto.exe and place it in a directory on your PATH, or run it directly:
.\gosuto.execargo install gosutogit clone https://github.com/MaikBuse/gosuto.git
cd gosuto
cargo build --release
./target/release/gosuto # Linux
.\target\release\gosuto.exe # WindowsRun gōsuto and log in with your Matrix homeserver, username, and password.
Gōsuto works on any modern terminal emulator — Kitty, WezTerm, Ghostty, Foot, Alacritty, GNOME Terminal, Windows Terminal, and others. Terminal multiplexers (tmux, screen) are also supported.
Gōsuto has a which-key popup — press a key (e.g. the spacebar) in normal mode and it shows you what's available. Command mode (:) has tab completion and suggestions. Between those two, you shouldn't need to memorize anything.
Configuration is stored in config.toml inside the platform config directory:
| Platform | Path |
|---|---|
| Linux | ~/.config/gosuto/config.toml |
| Windows | %APPDATA%\gosuto\config.toml |
A default config file is created on first launch. Edit it to change network, audio, UI, and visual effect settings.
Session and runtime data live in the platform data directory:
| Platform | Path |
|---|---|
| Linux | ~/.local/share/gosuto/ |
| Windows | %LOCALAPPDATA%\gosuto\ |
session.json encrypted session credentials
store/ matrix-sdk SQLite store
logs/ log files
To enable logging, set the GOSUTO_LOG environment variable before launching:
GOSUTO_LOG=debug gosuto # Linux$env:GOSUTO_LOG="debug"; .\gosuto.exe # Windows (PowerShell)Gōsuto uses a fork of the LiveKit Rust SDK for voice calls. The fork adds configurable key derivation (HKDF) so E2EE calls interoperate with Element X, and points the build script at prebuilt libwebrtc m137 binaries hosted as GitHub release assets on the fork repo.
The prebuilt libwebrtc.a (Linux) and webrtc.lib (Windows) are compiled from the webrtc-sdk/webrtc m137_release branch using the build scripts and patches checked into the fork. If you prefer to verify the native code yourself, you can build libwebrtc from source and point your build at it:
# Set LK_CUSTOM_WEBRTC to skip the prebuilt download
export LK_CUSTOM_WEBRTC=/path/to/your/libwebrtc/build
cargo build --releaseSee the build scripts in the fork repo for full instructions.
Licensed under either of
at your option.
Maik Buse — Homepage
Project Link: https://github.com/MaikBuse/gosuto