Limoni Voice: terminal-native Discord alternative with E2EE voice & screen share, built on my own zero-allocation Go TUI engine
Hey everyone 👋 This is Limoni Voice , a real-time voice chat app that runs entirely inside your terminal. Think "Discord voice channel", minus the Electron, the accounts, the tracking and the 2 GB of RAM. Limoni Voice: github.com/thebanri/limoni-voice 🍋 Built with Limoni A voice app is a stress test for a TUI: audio meters update constantly, a 3D model spins at 60 FPS, chat scrolls and modals animate, all while real-time audio runs in the same process. If the UI stutters or the GC pauses, you hear it. That's why I built Limoni the way I did: Zero heap allocations per frame for the renderer and widget drawing, enforced in CI. The garbage collector stays out of the audio path. Tiny output: a full-screen redraw is ~ 377 bytes , and an idle screen sends nothing . It stays smooth even over SSH. Real graphics in the terminal: shaded 3D models on a Braille canvas, smooth animations, mouse drag & scroll. The mic in the GIF is a real 3D model you can rotate with the mouse. A semantic UI tree: widgets have roles and names (like a screen reader sees them), so you can write Playwright-style tests ( page.GetByRole("button", "Join").Click() ) and even let an AI agent drive the app over MCP. If you're building a TUI in Go, give Limoni a look. Limoni Voice is basically proof that it can carry a real app. Why a terminal voice chat? I wanted to hop on a call with friends without opening a browser engine, making an account or trusting a company with my voice. So Limoni Voice is: 🔐 End-to-end encrypted by default : CPace PAKE handshake, AES-256-GCM group key that rotates whenever someone joins or leaves 🌐 Peer-to-peer : LAN auto-discovery → direct P2P (IPv6 / hole-punching) → encrypted relay only as a last resort. The relay never sees your audio. 👻 Ephemeral : no accounts, no persistent servers, no history. Share a limlose it, gone. 📦 One static binary : pure Go, no cgo. Linux, macOS, Windows. It actually sounds good Opus 48 kHz with in-band FEC and adaptive bitrate Adaptive jitter buffer with packet-loss concealment Echo cancellation (pure-Go Speex MDF port), so you can use speakers without headphones RNNoise AI noise suppression plus a keyboard-click suppressor Global push-to-talk that works while the terminal is unfocused ### Screen sharing, in a terminal app? Up to 1080p / 120 FPS , hardware-encoded where available Native capture on Windows, macOS (ScreenCaptureKit), GNOME and KDE (PipeWire) Share system audio too, with your voice chat removed from it Video only goes to people who are actually watching Plus the Discord-ish stuff 💬 Text chat with slash commands and clickable links 📁 E2EE file & code snippet sharing (SHA-256 verified) 🛡️ Room PIN, knock-to-join, kick & ban (cryptographically proven by the host) 🎨 Neon / Cyberpunk / Synthwave / Dracula themes Try it bash curl -fsSL raw.githubusercontent.com/thebanri/limoni-voice/main/install . or brew install thebanri/tap/limoni-voice Windows: irm raw.githubusercontent.com/thebanri/limoni-voice/main/script ` Honest caveats - It's not a full Discord replacement: there are no persistent servers, channels for jumping on a call right now. Screen share on Hyprland / Sway / XFCE is still experimental. Limoni Voice is AGPL-3.0 and Limoni is Apache-2.0. Feedback, bug reports and ⭐ on either repo mean a lot. What would you build with Limoni? And what would make you actually use a terminal voice chat for your calls?