Docs · Start

Overview.

osewa keeps your terminal sessions on the host and reaches them over QUIC, or a TLS WebSocket where UDP is blocked. You use ssh once, to install it and enroll your device. After that the shell outlives the network.

The pieces

There is one binary, osewa. The same file plays every part:

the client
On your laptop: osewa login, attach, forward, exec and the rest. It holds your device key and the list of hosts you have logged in to.
the server
On the host: osewa server listens on port 7322, TCP for the TLS WebSocket and UDP for QUIC. It checks each device's key and relays its traffic to sessions. Usually it runs as a user service.
the holders
One process per session, started by the server. A holder owns the shell's PTY and keeps the real screen in libghostty-vt, Ghostty's terminal engine. Holders don't depend on the server: restart or update the server and every session keeps running. (After an update to an incompatible build, older sessions run on but can't be attached.)

What happens when you connect

  1. The client dials QUIC and the TLS WebSocket together, giving QUIC a 300 ms head start, and keeps whichever connects first.
  2. Both ends prove who they are with Ed25519 keys over TLS 1.3. The host's key was pinned when you enrolled, so there is no "trust this host?" prompt.
  3. The host sends the session's current screen as one snapshot, then streams changes.
  4. If the network drops, the client notices within about a second, redials, and resumes. Keystrokes are numbered and resent until the host acknowledges them, so none are lost or typed twice.

Platforms

Hosts run Linux or macOS, and so does the command-line client. There is no Windows build. Moshi, the iOS and Android terminal app, is adding osewa as a transport beside mosh.

Where to go next

For why osewa exists and how it compares with ssh and mosh, read the paper. The wire format is in PROTOCOL.md.