tmate 2.4.0 replacements

tmate alternatives now that ssh.tmate.io is gone

tmate's public servers at ssh.tmate.io shut down in July 2025 and the last client release, 2.4.0, dates from 2019, so tmate now retries a failed DNS lookup forever. upterm 0.40.0 is the closest swap for pairing over SSH, sshx and ttyd hand out a browser link, and you can still self-host tmate-ssh-server.

5 min readTerminals and remote servers

At a glance

  • tmate 2.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

ToolLatest releaseHow others joinServerRead-only viewers
upterm0.40.0 (October 2026)ssh or upterm joinuptermd.upterm.dev or your own uptermd--read-only
sshx0.4.1 (February 2025)Browser linksshx.io (no self-hosting)--enable-readers link
ttyd1.7.7 (March 2024)Browser, port 7681Your machineDefault; -W to type
GoTTY fork1.10.0 (October 2026)Browser, port 8080Your machineDefault; -w to type
tmux over SSH3.8 (2026)ssh, then tmux attachYour SSH servertmux attach -r, chosen by the viewer
asciinema stream3.2.1 (June 2026)Browser linkYour machine, asciinema.org or self-hostedAlways
tmate, self-hosted2.4.0 (November 2019)sshYour tmate-ssh-serverSeparate read-only ssh string
Runpeektqdm-live 0.6.0Browser linkrunpeek.appAlways; 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.

Bash
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:

Bash
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 pair

server-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.

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:

Text
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_FINGERPRINT

tmate 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.

Get a live linkpip install tqdm-live

Sources