Two cans and a string. tincan: serverless peer-to-peer voice chat for your terminal
Voice and text chat with no server in the middle. Open a room, send your friends the code it prints, and talk.
brew tap bilalyazicioglu/tap && brew install tincanmacOS and Linux.
DIRECT18ms
Open a room, hand out two words.
The first person to run tincan opens the room. It prints a room name and a passphrase, and that is all anyone else needs: two things short enough to read down the phone.
$ tincan host lobby --name alice room: lobby passphrase: chestnut-ferry-lens-moss $ tincan join lobby --name bob passphrase: ••••••••••••••••••••••••
Leave the room name out and you get a 63-character invite code instead: the host's public key, already on your clipboard. No accounts, no port forwarding, no VPN.
DIRECT18ms
Voice goes straight between you.
Whoever opens the room keeps the roster, the channels and the chat, which comes to a few hundred bytes a second. Voice never goes through them. Everyone in a channel sends Opus packets directly to everyone else as QUIC datagrams, so the host's connection is never the bottleneck.
A six-person room needs about 160 kbps of upload each.
DIRECT18ms
The passphrase never goes over the wire.
Both sides stretch it with Argon2id into an admission key. The host sends a fresh nonce; the guest answers with a keyed BLAKE2b MAC of it. An answer caught in transit is useless on the next connection, and nobody can make the host burn Argon2 work by knocking.
The passphrase decides who gets in. Keeping what is said private is QUIC's job: every connection is encrypted end to end, and each side is checked against its public key.
RELAY84ms
When the direct path fails, the string sags.
Two machines behind routers usually punch through to each other. When they can't, the traffic goes through a relay. The relay forwards packets it has no key for. It can see which two keys are talking, when and how much, but never what is said.
In tincan, the line between the channel list and the chat behaves like the one on this page. It runs taut │ when everyone is reached directly, sags ╎ through a relay, and frays ┆ when audio starts dropping. While someone talks, a pulse runs down it at the speed of the round trip, so you see a slow link before you read about it.
CHOPPY84ms
What it can't do without.
Serverless means there is no tincan server: no account, no room registry, and no copy of your conversation anywhere but on the machines having it. It doesn't mean no infrastructure. Peers find each other through the DNS and relays run by Number Zero, the company behind iroh. If those went away, new connections would stop working. Pointing tincan at your own relay is issue #136.
Being reachable also means being found. Everyone in a room learns everyone else's IP address. With a real tin-can phone, the other end knows where you are too.
DIRECT18ms
Recorded, not rendered.
The terminal at the top of this page is an imitation written for it. This is tincan itself, recorded in a real terminal.
DIRECT18ms
When Discord is blocked.
When Discord is blocked in your country, down for everyone, or filtered on a school or office network, tincan has nothing of its own to take down with it. There is no tincan domain or server address for a provider to blacklist: peers find each other through iroh's discovery service and talk directly over encrypted QUIC. A network that blocks those services, or all UDP, stops it too.
Where tincan fits
Built for gamers, engineers, and privacy-conscious teams who want zero-overhead, unblockable voice.
GAMINGZero-Stutter Gaming: Save Every Frame & CPU Cycle
Heavy desktop voice apps eat gigabytes of RAM, steal CPU/GPU cycles, and cause micro-stutters in competitive games. tincan is a pure Rust binary with push-to-talk (--ptt): zero background rendering overhead and maximum FPS for your games.
RESILIENCEISP Bans & Censorship: No Central Servers to Block
When centralized platforms get banned by governments, schools, or workplace firewalls, tincan keeps running. With no proprietary voice servers or domain infrastructure to blacklist, peers find each other over iroh and talk directly over encrypted QUIC.
PRIVACYTrue End-to-End Encryption: No Corporate Data Harvesting
Centralized platforms route voice and chat through corporate servers, retaining message histories and analyzing telemetry. In tincan, audio flows directly peer-to-peer: not even relay servers can inspect your packets, and nothing is ever stored in the cloud.
WORKFLOWRemote Pair Programming & Terminal Workflows
Designed for engineers living in tmux, Neovim, and terminal-first setups. Jump into an instant voice room without leaving your workspace, switching desktop windows, or breaking focus.
OFF-GRIDLAN Parties, Hackathons & Air-Gapped Networks
Run seamless voice chat across local subnets and hackathons without internet access. When peers share a local network, direct mesh connections route packets with ultra-low latency and zero external dependencies.
EFFICIENCYMetered Hotspots & Ephemeral Burner Rooms
Adaptive 48 kHz Opus audio sips just ~14 MB per hour per peer, with zero video ads or background bloat eating your mobile data. Rooms vanish the second you close the terminal, leaving zero digital footprint.
tincan, Discord and Mumble.
Discord keeps everything on its servers; Mumble and TeamSpeak need someone to run one. tincan has no server at all.
| tincan | Discord | TeamSpeak / Mumble | |
|---|---|---|---|
| Where voice goes | Directly between peers | Discord's voice servers | The server |
| Server to run or rent | None | Discord's | Yours |
| What a network must block | iroh discovery and relays, or UDP | Discord's domains | The server's address |
| Account | None | Email or phone | Optional |
| Chat history kept on | The machines in the room | Discord's servers | The server, if enabled |
| Client | Native terminal app (Rust) | Electron app | Native desktop app |
| Source | Open, MIT | Closed | TeamSpeak closed, Mumble BSD |
Questions.
Does tincan work when Discord is blocked?
Usually, yes. Blocking Discord means blocking Discord's domains and servers, and tincan has no server of its own to block. Peers find each other through iroh's public discovery service and relays, run by Number Zero, and voice goes directly between the machines over encrypted QUIC. A network that blocks those services, or all UDP traffic, stops tincan too.
Do I need an account, an email address or a phone number?
No. There is nothing to sign up for or log in to. You open a room and share either its name and a four-word passphrase, or a 63-character invite code. Each machine is known by a public key, and no copy of the conversation is kept anywhere but on the machines having it.
Is tincan encrypted?
Every connection is QUIC, encrypted between the two machines at its ends and checked against the other side's public key. Voice goes directly from peer to peer; chat and the roster go through the host, who is one of the people in the room. Relays forward packets they cannot read, though they can see which keys are talking, when and how much. Everyone in a room learns everyone else's IP address.
How good is the audio, and how much bandwidth does it use?
Voice is Opus at 48 kHz mono and 32 kbps, sent in 20 ms frames, with RNNoise noise suppression on your microphone. Suppression adds 10 ms of delay and can be turned off on the audio settings screen. A six-person room needs about 160 kbps of upload each.
Can I keep it running while gaming or coding?
Yes. tincan is a native Rust program that lives in a terminal tab, not an Electron app. Start it with --ptt for push-to-talk on F4, or --no-voice for text chat only.
Does tincan run on Windows?
macOS and Linux are where it is used day to day. A Windows build is compiled and tested in CI but has not yet been used on a real Windows machine. Try it with npx tincan-cli host, or download the zip from the latest GitHub release.
How do I install tincan and open a room?
Install it with Homebrew (brew tap bilalyazicioglu/tap && brew install tincan), Cargo (cargo install tincan-chat) or npm (npm install -g tincan-cli). Then run tincan host lobby to open a room and tincan join lobby to join it.
Is tincan free?
Yes. tincan is open source under the MIT license, and there is no paid tier, because there is no service to pay for.
Their end.
Install it, open a room, and send them the code.
brew tap bilalyazicioglu/tap && brew install tincanmacOS and Linux.