Features
Each part of Lasterm, what it does, and where it stops.
Sessions outlive the window
Your terminals run in the hub and its agent, not in the window. Close the window to the tray, or close the browser tab, and they keep running. When you come back, the hub restores each screen as it was.
Terminals on this computer also survive a restart of the hub. They run in an agent that stays up on its own, and the hub reconnects to it when it starts again. The same holds when the app closes unexpectedly.
When a host cannot be reached, its terminal keeps showing the last screen it had, marked as not connected, with a Reconnect button.
After a reload or a restart, the screen comes back, but not the lines that had scrolled off it. Quit completely ends the terminals on this computer, on purpose: it frees the files an update replaces.
survives: closed window · reload · hub restart (local)
Remote hosts over SSH
Add a host with its hostname, port and username, and sign in with a key file, your SSH agent, or a
password asked at each connection. You can also import hosts from your ~/.ssh/config.
The hub copies its agent to the host over SSH, matched to the host's system and architecture. When it does not carry that agent, it downloads it from the GitHub release of its own version and checks it against the release's checksums. The agent talks to the hub over the SSH connection: no port is opened on the remote machine, and the host needs no internet access.
A host can be reached through a jump host (ProxyJump), and every reconnection goes through it too.
The first connection shows the fingerprint of the host's key and waits for your answer. A key that changes later stops the connection until you accept the new one.
The hub sends a keepalive every 15 seconds, so a host that stops answering is noticed within a minute. The hub then reconnects it, retrying for up to five minutes.
One jump host, not a chain of them. Remote hosts run Linux on x64 or arm64, or Windows on x64; macOS is not supported.
jump host · keepalive every 15 s · Linux x64 and arm64 · Windows x64
Terminals that outlive the connection
A Linux host can keep an agent running. Its terminals then survive a dropped connection, which the hub reconnects on its own, and a restart of the hub, after which selecting the host brings them back.
Turn it on for one host with Keep an agent running there in its settings, or for every host in
Settings › Agents or in config.toml. The agent ends by itself after 30 minutes with no terminal
and no hub connected. If logging out of the host ends your processes, run loginctl enable-linger
there: the agent then runs outside your login sessions.
Without a running agent, and always on a Windows host, terminals end with the connection. When the hub reconnects, it starts new shells in their place.
[ssh] remote_daemon · Linux hosts · ends after 30 minutes idle
# config.toml: keep an agent running on remote hosts [ssh] remote_daemon = true
A rail of hosts
Every host has a badge in the rail on the left: its initials, an emoji or an image, on its colour, with a dot for its state: live, reconnecting, offline or error. Hover over a badge for the host's address, its group, its number of terminals and how long it has been connected.
Put hosts in groups, and drag hosts and groups into the order you want.
live · reconnecting · offline · error
Tabs, panes and search
Split a tab into panes, to the right or down, from the menu of a tab or a pane, and drag a pane by its header to move it. A tab holds up to 4 panes; Settings › Panes allows up to 8.
Search a terminal's output, in one pane or in all of them, with case, regular expressions and whole words, and your recent searches kept.
up to 4 panes a tab by default · search one pane or all
The terminal's environment
Each terminal starts from the environment of its agent, or from a minimal one, and says what it is:
TERM=xterm-256color, COLORTERM=truecolor, TERM_PROGRAM=lasterm. In Settings › Environment,
set, change or remove variables for every terminal, for one host, or for one terminal, with the
host's own variables shown beside them. On an SSH host, the default shell starts as a login shell,
as ssh host gives one.
Values are stored in the clear: keep secrets out of them. A change reaches new and restarted terminals, not running ones.
Inherited or Minimal · everywhere, per host, per terminal
# config.toml: every terminal, on every host
[terminal]
env_mode = "inherit" # or "minimal"
env = { EDITOR = "hx", PAGER = false } # false removes the variable
Ended terminals
When a shell exits, its pane stays, with its exit code, Restart and Close. When a terminal ends can do it for you instead: Ask, Restart or Close, set for every host, one host or one terminal, or with Always do this on the pane.
A restart whose host is away waits for it, and runs once the host is back. With Keep ended terminals in the sidebar, closing an ended terminal keeps it in the list, greyed out, to restart later with the same settings. Its output is not kept.
Ask · Restart · Close
# config.toml: what a pane does when its terminal ends [terminal] when_ended = "ask" # or "restart", "close"
Launch profiles and elevation
Settings › Profiles holds named launch profiles: a shell or a program, its arguments, a working directory, environment changes, its own font, icon and colour, and whether it runs elevated. Elevation uses sudo, doas, pkexec, gsudo on Windows, or a command of your own, chosen per host.
sudo · doas · pkexec · gsudo · a command of your own
Themes and backgrounds
Nine themes come with Lasterm: Catppuccin Mocha (the default), One Half Dark, Dracula, Nord, Tokyo Night, Gruvbox Dark, One Half Light, Solarized Light and GitHub Light. Create your own or import one, and give a host or a single terminal its own theme, font or wallpaper. Lasterm can follow the system's dark mode, with a theme for each.
Behind the terminal, show a wallpaper with blur and dimming, or let the desktop show through. On Windows 11, the desktop app can paint Mica or Acrylic there instead.
9 themes · per host · per terminal · Mica and Acrylic on Windows 11
The desktop app and your browser
The hub serves the same interface to a browser on the same computer, at its https://127.0.0.1
address. Unless you configure a certificate, the hub makes its own, which the browser asks you to
accept. Pair the browser with an 8-digit code, from Generate Pairing Code in the command palette.
A code works once, within 60 seconds. After the hub restarts, a browser pairs again.
The desktop app and the browser can show the same terminal. One of them types at a time: the others watch until they take over.
Pairing a browser on another device is planned.
pairing code · same computer · one writer at a time