From a running shell to the changes it makes.
Explore the workbench, its remote connections, and the tools around each terminal. Choose a section below or press its number to jump to it.
- desktop + browserPersistent sessionsClose the window. Keep the work running.
- Tailscale SSH + standard SSHRemote hostsYour remote computers, in one workbench.
- File → WorktreesWorktrees and branchesFind the branch. Open its worktree.
- File → ChangesLive Git changesWatch the diff as the work happens.
- File → New Block → HistoryCommit historyRead the history beside the work.
- ⌘/ or Ctrl+Shift+/Insert PathFind a file and type its path at the cursor.
- on by defaultAutomatic Contrast CorrectionColors you can read, on the theme you chose.
- system by defaultThemesFollow your system, or pick your own.
- rounded and comfortable by defaultShape and densityRounded or square, roomy or flush.
- measured on LinuxPerformanceFast to type into. Fast to come back to.
Persistent sessionsdesktop + browser
Close the window. Keep the work running.
Close a window or lose your network connection, then return to your running terminals. Your sessions and workspace stay on the computer where you started them.
- Reconnect to the same shells
- Reopen the app and choose an existing session. Keep the remote computer running while you are away; shutting it down ends the commands running there.
- A workspace on each host
- Named sessions, tabs, and split blocks belong to their host. Open them from another connected client and the host supplies their layout and terminal state.
- Your own view
- Scroll, search the terminal history, and choose a theme while other viewers keep their own view of the same shells.
Remote hostsTailscale SSH + standard SSH
Your remote computers, in one workbench.
Add a remote Linux host from the desktop app with Tailscale SSH or your existing SSH access. Keep its terminals, files, and Git work alongside your local sessions.
Tailscale SSH
you@build-serverWith both computers on your Tailscale network and Tailscale SSH access enabled, enter your username and the host’s Tailscale name. Complete a browser sign-in check if requested.
Standard SSH
you@server.example.comUse a hostname, IP address, or SSH alias you can already reach. Your existing SSH keys and settings work here too.
Add a remote host
Open File → Add Remote Host and choose Set up with SSH.
Enter your destination
Type user@host or an SSH alias. Optional settings are under Advanced options.
Connect and start working
Choose Set up & connect, then open a session on your host.
- A name and a starting folder
- Give the host a display name and choose where new sessions start, or leave those optional settings for later.
- Already have connection details?
- Choose Manual connection for a host that is already configured. Switching between setup methods keeps what you have typed.
- Come back to your work
- Choose a saved host to return to its sessions. Keep the remote computer running when you close your app.
- Keep your setup when retrying
- If the final connection fails, check that the host is reachable and choose Retry connection. The details you entered stay in place.
Worktrees and branchesFile → Worktrees
Find the branch. Open its worktree.
See the repository around your focused terminal: its worktrees and local branches, uncommitted changes, and commits ahead of or behind upstream.
- Open where the work lives
- Filter by worktree, branch, or commit. Open a worktree as a new tab or session, with its folder ready for the next command.
- Create or switch
- Create a worktree for a new or existing local branch. Switch the main checkout to an unused branch when it is clean; the host refuses a switch while it has uncommitted changes.
- Review before moving on
- The selected worktree’s staged and unstaged diff appears beside the list. Move into Changes to keep reviewing that same diff.
Live Git changesFile → Changes
Watch the diff as the work happens.
Review the focused terminal’s worktree in a full view, a floating panel, or a Changes block beside your terminals. File saves, staging, commits, and checkouts update the view.
- Staged and unstaged, together
- Read changes in split or unified form, with syntax colors and word highlights. The host sends the changed-file list, and the viewer asks for file contents as they come into view.
- Stage the part you mean
- Stage or unstage a hunk, or select whole files. Restoring an unstaged hunk asks for confirmation before writing it back.
- Keep it beside the terminal
- Choose Changes from the New Block menu to dock a worktree’s diff in the tab. Its place is saved with the host’s workspace.
- Follow changes on the host
- Linux and macOS hosts watch the worktree and send file-list updates when something changes. The viewer requests changed contents and keeps its place while the diff refreshes.
Commit historyFile → New Block → History
Read the history beside the work.
Open a repository’s commit graph as a block beside your terminals. Branches, merges, and tags are drawn as lanes; highlight a commit to read its message and diff below the list.
- Every branch in one graph
- Local branches, remote branches, and tags are drawn together, newest first, each commit on its lane with the names that point at it. Shift+Escape fills the terminal area with the block, and the author column appears when there is room.
- The highlighted commit, below
- Its message, author, time, and for a GitHub remote a link to it there, then its diff, read-only, in split or unified form. Enter moves into the diff; drag the divider to give the list or the diff more room.
- New commits arrive on top
- Commit, fetch, or rebase in the shell and the graph updates. What you are reading stays where it is, and a notice counts the commits that arrived above it.
- Laid out once, on the host
- The host walks the repository and lays out the graph once, for every viewer of that repository. Your app asks only for the rows in view, and new commits come as additions, not the whole list again.
Insert Path⌘/ or Ctrl+Shift+/
Find a file and type its path at the cursor.
Press ⌘/ at a prompt, or Ctrl+Shift+/ off the Mac. A small finder opens at the cursor and searches every file and folder under the shell's folder. Choose one, and its path is typed where you were typing, relative to where the shell is.
- Opens where you type
- Below the cursor, or above it near the bottom of the screen, with what you type starting at the cursor's column. Escape closes it and gives the keyboard back to the terminal.
- Ranked like an editor's file finder
- Letters in order with gaps allowed, words in any order: checkout form finds apps/storefront/src/checkout/CheckoutForm.tsx. A file named for what you typed comes before one that only sits in a matching folder.
- Typed the way a shell reads it
- Relative to the shell's folder, from home as ~/… when you start with ~/, or in full with ⌘Enter. A name with spaces is quoted. Nothing runs until you press Enter.
- Your project, not your whole disk
- It follows the repository's .gitignore and skips node_modules and caches. The host reads the folder when the finder opens and forgets it when it closes: no index, nothing kept.
- Match locally once the paths arrive
- A folder of up to 20,000 paths is sent to your app once, so every keystroke is ranked on your side. Where the connection allows, searches travel on a stream of their own, so a busy terminal does not hold them up.
- Markdown and image previews
- Open Files from New Block to browse the folder beside your terminal. Markdown opens rendered by default, with a Source toggle; images open as previews.
Automatic Contrast Correctionon by default
Colors you can read, on the theme you chose.
Most terminal programs pick colors for a dark background, so on a light theme they fade out. Superlogical checks each color against your background and fixes only the ones that fail.
- user
- sent#ffffd71.02:1
- painted#7f734c4.51:1
- date
- sent#00d7871.82:1
- painted#0085414.54:1
- directory
- sent#0087ff3.40:1
- painted#0072dc4.53:1
- Keeps the hue
- Pale green becomes a green you can read, not a grey.
- Leaves the rest alone
- Colors that already pass are painted exactly as the program sent them.
- Per viewer, not per session
- Each client corrects for its own theme, so people on light and dark themes can share one session.
Themessystem by default
Follow your system, or pick your own.
Choose System, Light, or Dark, and a theme for each. System follows your device as it changes, switching between the light and dark themes you saved.
- Thirty-two built in
- Catppuccin, Dracula, Gruvbox, Nord, Rose Pine, Tokyo Night, Solarized, Everforest, Kanagawa and the rest, in light and dark, beside Superlogical Light, One Dark, and two high-contrast palettes. Nothing to download or install.
- Bring your own
- Import a terminal palette — the same shape most emulators publish, and the one the built-in themes are written in — or a Zed theme family. Export the current theme to start a custom one.
- The whole app, not just the terminal
- A palette names twenty colors; the app needs twenty more for its tabs, panels, and menus. Superlogical derives them from the palette, keeping each color's hue and moving it only as far as 4.5:1 against the background requires. Every bundled theme is held to that floor by a test.
- Yours alone
- Themes are saved on your device, so a shared session never forces your colors on anyone else.
Shape and densityrounded and comfortable by default
Rounded or square, roomy or flush.
Shape draws blocks and tabs as rounded cards set apart on a darker ground, or as square cells divided by single lines. Rounded comes roomy or tight: Density leaves room around and between blocks, or sets them flush. Square cells share one divider, so they are always flush.
- More room for text
- Compact closes the gaps between blocks and against the window, and the square shape is drawn that way already.
- Switch any time
- Change either one from the command palette or the View menu. Your shells keep running, and both are saved with the window, so the room you left the rounded shape with is the room it comes back with.
Performancemeasured on Linux
Fast to type into. Fast to come back to.
Your terminals run on their host, which sends your screen only what changed. A key press is echoed back in 1.19 ms, and 64 terminals are back on screen 19.8 ms after a reconnect.
Typing
- Key press to echo, p50
- 1.19ms
- 1,000 terminals running, same machine. p99: 1.28 ms.
- Key press to echo in a browser, p50
- 1.18ms
- Through the host's gateway over WebSocket. WebTransport: 1.16 ms.
- Host CPU per key press
- 15µs
- 1,000 terminals typed into at 4 keys per second each.
Reconnecting
- 64 terminals back on screen
- 19.8ms
- Each with 10,000 rows of output, same machine.
- 64 terminals' screens over a network
- 173ms
- 100 Mbit/s, 20 ms round trip. At 80 ms: 622 ms.
- 16 terminals' screens in a browser
- 9.5ms
- Through the host's gateway over WebSocket. WebTransport: 2.4 ms.
Scale
- Host memory per terminal
- 282KB
- 1,000 idle shells on one host: 290 MB in all.
- Of one CPU core for 1,000 idle terminals
- 6.2%
- 12.2% while all 1,000 are typed into.
- Per frame from a busy terminal
- 835B
- 100 new lines a frame, 4,977 rows of history kept.
- How we measure
- Medians of 5 runs of Superlogical's benchmarks, each in a fresh process, on a Linux workstation pinned to 8 cores (16 threads). Your hardware, your network, and the programs in your terminals change the numbers.
Start with a session on this machine.
The desktop app includes a local terminal host. Start there, then add a remote Linux host when you need one.