terminal chat · open source · self-hosted

A chat that lives in your terminal

For devs and sysadmins. No heavy app, no browser, no noise: you join a room with one command, talk, and leave with Ctrl+C. It runs on your company's server, and messages never leave the network.

try it now: $ teachatty --server teachatty.com

free software · AGPL-3.0

The tea is for everyone. Pull up a chair.

teachatty is open source, and it will stay open source, forever. No paid tier, no account to sign up for, no tracking: a terminal, a room, and whoever drops by. Install the client, and you're one command away.

Join the public server

A teachatty server runs at teachatty.com, open to anyone. With no --room, you land in local, the lobby everyone shares. Say hi.

teachatty --server teachatty.com
Bring your friends

Make up a room name and send your friends the same line. The room appears when the first person joins and vanishes when the last one leaves. There are no passwords yet, so anyone who knows the name can walk in: pick one that's hard to guess.

teachatty --server teachatty.com --room tea-with-friends
Or keep it on your own network

Run the server on any machine in your office, homelab or VPN, and point everyone at it. Messages never leave your network, and it works without internet access. Encrypted with TLS out of the box.

# on one machine
teachatty-server
# on everyone else's
teachatty --server 192.168.0.10
Open source, forever

Every line is public under the GNU AGPL-3.0: read it, change it, run it, share it. Anyone who ships or hosts a modified teachatty has to share its source with their users too, so nobody can ever lock it away. Ideas and patches are welcome: see how to contribute.

The screen

Full screen, like vim or htop. Messages on top, your input box at the bottom.

  • Nothing overwrites what you type. New messages arrive on top; your text stays put in the box.
  • The box grows with your message, up to 5 lines, so you see everything you wrote.
  • PgUp to read back without being pulled down. Start typing and the screen jumps back to the newest.
  • Each person gets a color. Every alias has a fixed color, the same on every client. Yours shows in bold.
  • Mentions ring your bell. Someone writes @you: the message lights up in amber and your terminal beeps, even from another tab.
  • Everyone in the same room, no arranging. Run teachatty and you're in local. For another room, --room: if it doesn't exist, it's created.

Why

Work chat turned into heavy apps with notifications, threads, emoji and a thousand channels. teachatty is the opposite: a small command-line tool you use like any other.

Flags, not URLs

Nobody types ws://...?room=x. It's teachatty --room dev --alias daniel, and the rest is an internal detail.

Self-hosted, encrypted

One server binary on an internal machine, on the port and interface you choose (--addr). Traffic never leaves the company network, and it's encrypted with TLS by default, with no certificates to manage.

Works with pipes

make 2>&1 | teachatty --room ops sends the build output to the team's room (lines arriving together go as one message), shows it in your terminal and exits at the end. Safe in scripts and cron.

Minimalist

A feature only goes in if it pays for itself. The whole codebase is about 1,250 lines, comments included, standing on libraries that do the heavy lifting.

Actually lightweight

Measured, not estimated. The server keeps everything in memory and each connection costs little.

~17KB
of RAM per connected person
50,000
connections in 875 MB of RAM in the load test
0.11ms
latency in a small room while another room of 50,000 people receives messages
1
binary for the server, 1 for the client. Pure Go, no system dependencies
source: local load tests, server and clients on the same machine, 2026-10-11 · details

How a message travels

Daniel and Mateus are in room dev. João is in geral. Daniel types hi and presses Enter. Step through it, or press play. The arrow keys work too.

Each step is explained in detail in the documentation.

KERNEL · SOCKETS · TCP DANIEL'S PC · --room dev teachatty SERVER · :7347 MATEUS'S PC · --room dev TCP TCP terminal (raw mode)each key goes straightto the program event loop (tview)Enter → send(text) conn.WriteMessage(...) socket fd 6kernel's send buffer Room "dev"mu: sync.Mutexmembers: connDaniel → daniel connMateus → mateus Daniel's goroutinefor { conn.ReadMessage() room.broadcast(...) } sockets fd 5 · fd 8fd 5 = Daniel · fd 8 = Mateus Mateus's screendaniel: hi lands in themessage area receiving goroutinego func() { for { conn.ReadMessage() ... socket fd 6receive buffer joão · --room geralnot in dev.members: nothing arrives Mateus's goroutine on the serverblocked in ReadMessage, not involved hi ⏎
step 1 of 11 · Daniel's client
Enter: the key arrives immediately

The terminal is in raw mode: the kernel neither holds nor echoes anything, each key goes straight to the program. tcell reads the bytes from stdin and turns them into events. The "h" and the "i" are already in the input box. When Enter arrives, SetInputCapture grabs the key before the box sees it.

input.SetInputCapture(func(ev *tcell.EventKey) ... case tcell.KeyEnter: // ← lands here

Install

teachatty comes in two parts. The client is what you chat with, and it's all you need to join teachatty.com. The server is optional: install it only if you want to host rooms of your own.

1

Download the client teachatty

everyone needs this
Debian · Ubuntu · Mint
curl -LO https://teachatty.com/downloads/teachatty_latest_amd64.deb
sudo apt install ./teachatty_latest_amd64.deb
Fedora · RHEL · Rocky · Alma
sudo dnf install https://teachatty.com/downloads/teachatty-latest.x86_64.rpm
Anywhere with Go 1.27+
Linux, macOS, any architecture
go install github.com/daniel-cmdline/teachatty/cmd/teachatty@latest

That's it, nothing else to set up. The package puts teachatty in /usr/bin, which is already in your PATH. Open any terminal, in any folder, and run:

teachatty --server teachatty.com

With go install, it lands in ~/go/bin, which Go's standard setup adds to your PATH. If teachatty isn't found, add export PATH=$PATH:$HOME/go/bin to your ~/.bashrc.

2

Download the server teachatty-server

optional · to host your own rooms

For your team, your homelab or your own network. You don't need it to chat on teachatty.com.

Debian · Ubuntu · Mint
curl -LO https://teachatty.com/downloads/teachatty-server_latest_amd64.deb
sudo apt install ./teachatty-server_latest_amd64.deb
sudo systemctl enable --now teachatty-server
Fedora · RHEL · Rocky · Alma
sudo dnf install https://teachatty.com/downloads/teachatty-server-latest.x86_64.rpm
sudo systemctl enable --now teachatty-server
Anywhere with Go 1.27+
runs in the foreground; see the docs for a service
go install github.com/daniel-cmdline/teachatty/cmd/teachatty-server@latest
teachatty-server

The packages set everything up: a locked-down systemd service that starts on boot, its own teachatty user, TLS on port 7347 with a certificate created on first start, and a config file for flags, /etc/default/teachatty-server. Then everyone on your network connects with:

teachatty --server 192.168.0.10

Open port 7347/TCP in the server's firewall. Using your own domain? See running the server as a service.

Every file, including Linux and macOS tarballs and checksums.txt, is in downloads/. These are development builds of the upcoming v0.1.0.

Then connect

teachatty --server teachatty.com                           # the public lobby
teachatty --server teachatty.com --room tea-with-friends   # your own room
teachatty --server 192.168.0.10                            # a server on your network

Or run it from source

git clone https://github.com/daniel-cmdline/teachatty.git
cd teachatty

# the server (port 7347, default room local)
go run ./cmd/teachatty-server

# in another terminal: no flags, you land in the local room
go run ./cmd/teachatty

# send a command's output to the room
uptime | go run ./cmd/teachatty

Flags, keys, other machines on the network and running the server with your own domain: in the documentation.

What's next

teachatty is just getting started and grows one feature at a time.

  1. Release v0.1.0

    The packages above, made official: a git tag and a release page, so .deb, .rpm and the tarballs carry a stable version instead of a development build.

  2. Access control

    A server-wide token or password-protected rooms, decided after the release. TLS is in place, so a secret travels encrypted; the server stores only a salted hash.

  3. Message history

    Pure-Go SQLite. Whoever joins sees what was already said, and pipe mode keeps logs.