At a glance
tmate2.4.0 still installs, but ssh.tmate.io no longer resolves.- upterm is the closest replacement: guests join with plain
ssh. - sshx and ttyd give a browser link; asciinema streams are watch-only.
- In GitHub Actions, use action-upterm, or point action-tmate at your own server.
What happened to tmate
tmate is a tmux fork that shared your terminal through public relay servers at ssh.tmate.io. In July 2025 the maintainer shut them down for good, writing "No time to maintain. It's expensive. It's been >10 years".
The last client release, 2.4.0 from November 2019, still opens a local session but never prints a connection string. Instead, its status bar keeps repeating ssh.tmate.io lookup failure. Retrying in 2 seconds, followed by the resolver's error. An open issue (#336) proposes a Rust rewrite and a return of the hosted service, but nothing has shipped.
tmate alternatives compared
| Tool | Latest release | How others join | Server | Read-only viewers |
|---|---|---|---|---|
| upterm | 0.40.0 (October 2026) | ssh or upterm join | uptermd.upterm.dev or your own uptermd | --read-only |
| sshx | 0.4.1 (February 2025) | Browser link | sshx.io (no self-hosting) | --enable-readers link |
| ttyd | 1.7.7 (March 2024) | Browser, port 7681 | Your machine | Default; -W to type |
| GoTTY fork | 1.10.0 (October 2026) | Browser, port 8080 | Your machine | Default; -w to type |
| tmux over SSH | 3.8 (2026) | ssh, then tmux attach | Your SSH server | tmux attach -r, chosen by the viewer |
| asciinema stream | 3.2.1 (June 2026) | Browser link | Your machine, asciinema.org or self-hosted | Always |
| tmate, self-hosted | 2.4.0 (November 2019) | ssh | Your tmate-ssh-server | Separate read-only ssh string |
| Runpeek | tqdm-live 0.6.0 | Browser link | runpeek.app | Always; output only, not a shell |
Pair over SSH: upterm
upterm host shares your terminal through the public relay uptermd.upterm.dev, or your own uptermd, and prints the join commands. Guests connect with plain ssh SESSION_ID@uptermd.upterm.dev, or with upterm join, which rejoins after a drop.
Lock it down: a session without --authorized-keys or --authorized-user accepts any SSH key, so anyone with the session ID can join. --authorized-user github:alice lets in only the keys alice has on GitHub.
upterm host --authorized-user github:alice
upterm host --read-only --no-sftp --authorized-user github:alice
upterm host --force-command 'tmux attach -t pair' -- tmux new -t pair--read-only lets guests watch without typing, though they can still download files over sftp unless you add --no-sftp. --force-command gives every guest a tmux attach of their own, the way tmate paired. In our test a guest joined with the printed ssh command and saw the host's session; upterm session list and upterm session stop NAME manage sessions started with --detach --accept.
Pair over SSH without a relay: tmux
If the other person can already SSH into the machine as you, start tmux new -s pair and have them run tmux attach -t pair. tmux attach -r -t pair gives them a watch-only client, but that flag is their choice, not yours.
A second Unix user needs your tmux socket. Since tmux 3.3 the server also checks who connects and answers access not allowed until you add them with server-access:
tmux -S /tmp/pair.sock new -d -s pair
chmod 777 /tmp/pair.sock
tmux -S /tmp/pair.sock server-access -a bob
tmux -S /tmp/pair.sock attach -t pair
# bob runs: tmux -S /tmp/pair.sock attach -t pairserver-access -a -r bob is meant to make bob read-only, but in our test on tmux 3.8 bob could still type into the session with tmux send-keys, which 3.5a refused. Only share a socket with someone you would trust with the shell. The tmux cheat sheet lists the session commands.
A link in the browser: sshx, ttyd and GoTTY
sshx 0.4.1 (February 2025, with commits as recent as September 2026) installs with curl -sSf https://sshx.io/get | sh, and running sshx prints a link to a shared terminal on an infinite canvas with live cursors. Sessions are end-to-end encrypted with Argon2 and AES, and --enable-readers adds a separate read-only link. Sessions go through sshx.io: the README says self-hosted deployments are not supported at the moment.
ttyd 1.7.7 serves a terminal from your own machine on port 7681, read-only unless you pass -W, and leaves the open port, the password and TLS to you; the ttyd guide covers each. GoTTY works the same way on port 8080 with -w to allow typing. The original has had no commits since December 2017, so use the sorenisanerd/gotty fork.
Watch-only: asciinema stream
asciinema has streamed live since 3.0 (September 2025), and the current release is 3.2.1. asciinema stream --local serves the session from a built-in web server on 127.0.0.1 and a random port, --local 0.0.0.0:8080 opens it to your network, and --remote relays it through asciinema.org or your own asciinema server.
Viewers can only watch. asciinema.org allows one live stream per user and about 100 KB/s of sustained bandwidth.
Self-host tmate-ssh-server
The tmate 2.4.0 client still works against your own server. tmate-ssh-server ships as the tmate/tmate-ssh-server Docker image, which needs the SYS_ADMIN capability to isolate sessions and the SSH_KEYS_PATH variable; its last commit is from June 2023. Point clients at it in ~/.tmate.conf:
set -g tmate-server-host tmate.example.com
set -g tmate-server-port 2222
set -g tmate-server-rsa-fingerprint SHA256:YOUR_RSA_FINGERPRINT
set -g tmate-server-ed25519-fingerprint SHA256:YOUR_ED25519_FINGERPRINTtmate then prints a read-write and a read-only ssh string, as it used to. mxschmitt/action-tmate takes the same four settings as inputs; without them it still tries ssh.tmate.io, as its README now warns.
Only need to watch one job?
If the other person only needs to know whether a job is still running and what it printed, a shared shell gives them far more than that.
FAQ
Is tmate dead?
The hosted service is: ssh.tmate.io shut down in July 2025, and the last client release, 2.4.0, is from November 2019. The client still works with a self-hosted tmate-ssh-server, and an open issue proposes a Rust rewrite with a hosted service again.
What is the closest replacement for tmate?
upterm. upterm host shares your terminal through a public relay, guests join with plain ssh, and --force-command 'tmux attach -t pair' gives tmate-style tmux pairing.
Can I still use tmate with my own server?
Yes. Run tmate-ssh-server (the Docker image needs the SYS_ADMIN capability) and set tmate-server-host, tmate-server-port and the server's key fingerprints in ~/.tmate.conf.
Which alternative works for debugging GitHub Actions?
owenthereal/action-upterm (v2.7.0, October 2026) uses upterm's public relay, and the sshx README shows a one-line run: step for CI. mxschmitt/action-tmate only works once you point it at your own tmate-ssh-server.
Which option gives safe read-only access?
ttyd and the GoTTY fork are read-only unless you pass -W or -w, upterm has --read-only, sshx has --enable-readers and asciinema streams are always watch-only. tmux's attach -r is up to the viewer, and on tmux 3.8 a server-access -r user could still use send-keys in our test.
Check on long runs from your phone
Change one import and every tqdm bar prints a link you can open on any device. Get a Discord or Slack message when the run finishes, fails or stalls.
pip install tqdm-liveSources
- tmate issue 322: maintainer comment on the public servers github.com
- tmate issue 336: Rust rewrite and hosted service github.com
- upterm on GitHub github.com
- sshx on GitHub github.com
- asciinema docs: live streaming docs.asciinema.org
- tmate-ssh-server on GitHub github.com
- action-tmate README github.com
- tmux CHANGES github.com