features and planned work

manage SSH, telnet and serial sessions and local terminals on windows.

winui 3 · .net 10 ssh.net transport libghostty-vt direct2d rendering sqlite fts5 gpl-2.0

current features are listed first. rows marked planned aren't built yet.

01 saved sessions
  • local profiles for powershell, cmd, wsl and git bash
  • tab badges for claude code, codex, gemini cli, github copilot, cursor, opencode and 21 more agents
  • color tags carried onto the tab accent
  • nokia, juniper, cisco, arista and vyos icons, suggested from the login banner
Sessions folder tree with custom icons and color tags
02 shared logins (identities)
new
  • set identity on any folder, or on the tree root as the default
  • a rotated password is changed once; a rejected one can be updated for every session that uses it
  • the session editor shows where a login comes from, and settings › identities & keys shows what uses each identity
  • sessions saved before identities keep their own login unchanged
  • identities travel in backups; their passwords follow the same rule as other secrets
Settings, Identities and Keys: three identities with the folders and number of sessions that use each one
03 manage sessions in bulk
new
  • edit together: login, port, tab colour, icon, theme and persistent shells
  • move to a folder, set an identity, duplicate or delete
  • each change is one write to the session store, so it lands whole or not at all
  • in the session tree, select several sessions and open them in new splits, in one new split, or across the splits already open
Settings, Sessions: a sortable table of saved sessions with five rows selected and Edit, Move to, Set identity, Duplicate and Delete buttons
04 command history
  • all words must match the command, session, folder or output; quote a phrase with "…"
  • filters: host:web01 in:/etc exit:fail exit:127, plus session, result, time and a calendar day picker
  • off by default because output can contain secrets; each session can opt out
  • local only, left out of backups, 90-day retention by default, deletes overwritten on disk
  • a sqlite full-text index, so history never has to fit in memory
Command history search for bgp with the selected run and its output
05 compare runs
  • timestamps are ignored by default; ignore numbers hides counters and uptimes
  • unchanged stretches fold away; f7 and shift f7 step between changes
  • pick any two runs from the list of every run, each with how it differs
  • paged (--More--), truncated and lost output is flagged, so a gap is never read as a change
Compare with Previous for show bgp summary with numbers ignored, showing one BGP peer that changed from Established to Active
06 telnet consoles
  • type telnet host 2003 in quick connect to reach a console line on a high port
  • the window size follows the tab as it resizes, so htop, btop and vim fit the window
  • send break (ctrl break) for boot interrupts and password recovery through a console server
  • text encoding per session: automatic (utf-8, falling back to cp437 for bbs and ansi art), utf-8 or cp437; typed input is encoded to match
  • report 80 × 25 to bbs servers: naws and screen-size probes get 80 × 25 while the tab keeps its real size
  • or keep the terminal itself at 80 columns, for bbs art and menus that assume it
  • reach a console behind a bastion through an SSH jump host
  • telnet is not encrypted; the session editor says so, and no password is stored for it
Telnet session to a Synchronet BBS showing CP437 art and an 80x25 terminal report
07 serial consoles
new
  • the port picker names each adapter (usb serial device, prolific, ftdi) instead of a bare com number
  • speed, data bits, parity, stop bits and flow control (none, xon/xoff, rts/cts); 9600 8N1 by default
  • send break (ctrl break) for rommon, boot loaders and password recovery
  • pull the cable and the tab says so; plug it back in and the tab reconnects by itself
  • type serial COM5 115200 in quick connect for a one-off session
  • putty serial sessions come across on import
New serial session: the port picker shows COM1 — Communications Port, with speed, data bits, parity, stop bits and flow control
08 safe paste
new
  • pasting more than one line shows the lines and the session they will run on, with cancel as the default
  • no question when the program handles pasted lines itself (bracketed paste), as shells do
  • per session, wait after each line or each character, for console lines and devices with small input buffers
  • a slow paste shows its progress in the status bar; typing any key stops it
  • turn the question off in settings, or from the question itself
Paste and run 4 lines? The question names syd-pe-01, shows the Junos set commands about to run, and has Cancel as the default
09 native terminal
new
  • direct2d and directwrite draw every frame straight into the window at your display's refresh rate, using windows' own text engine for sharp, accurate glyphs
  • each glyph advances by whole cells, so columns line up and text stays crisp at any display scaling or zoom
  • output is parsed by ghostty's terminal core on the connection's own thread, so a flood of ssh output never stalls the window
  • ime input for japanese, chinese and korean, plus the emoji panel, voice typing and the touch keyboard
  • curly, double, dotted and dashed underlines, underline colours, overlines, and bold in bright colours
  • box drawing, block elements, braille, powerline separators, sextants, octants and the legacy computing wedges are drawn as shapes, so cells join with no seams at any zoom
  • missing characters fall back to system fonts and a bundled symbols nerd font, so prompt icons need no patched font
  • alt drag selects a rectangle, shift click extends a selection, and the wheel scrolls inside less, man and other full-screen programs
  • full-screen programs paint their background to the window edge, and can set the mouse pointer shape
  • tabs you cannot see are parsed but not drawn, so a background flood costs no gpu time
A terminal tab showing a rounded box, block progress bars, braille, curly, double, dotted and dashed underlines, Nerd Font icons and a Powerline prompt
10 network cli mode on the tab
  • junos: operational or configure, with the [edit] hierarchy and the routing engine role
  • cisco ios, ios xe and ios xr: configure and its submode, such as interface, routing or bgp neighbor; ios xr adds the route processor
  • nokia sr os md-cli: global, exclusive, private or read-only, the path, and a star for uncommitted changes
  • read from the prompt on screen; nothing is sent to the device
  • a bare host# is only read as cisco when the login banner or the session icon says so, so a linux root prompt is left alone
Three router tabs: syd-pe-01 in Junos configure at /protocols bgp, syd-p-01 in IOS XR configure interface mode, and mel-bng-01 in Nokia MD-CLI private* at /configure router
11 keyword highlighting
Keyword highlighting rule editor beside live output
12 annotated scrollbar
  • hover anywhere on the ruler to see that line, when it arrived, and the matches, bookmarks and highlights around it; click to jump there
  • command detection from shell signals and terminal input
  • terminal search on ctrl shift f
  • jump between commands with ctrl shift ↑ ctrl shift ↓, bookmark a line with ctrl shift m
Overview ruler with search marks beside a fictional ISP log
13 command list
The command list open over a bastion session: each command with its exit status, the time it ran and a copy button
  • copy any command's output in one click, without scrolling back or dragging a selection across pages of text
  • the copy is a clean transcript: the command's prompt line and everything it printed, with wrapped lines joined and the next prompt left off
  • every command in the tab, in order, with the time it ran and a green or red dot for its exit status
  • click a command to jump to it; the terminal scrolls it to the middle and flashes the line
  • open it from the tab's toolbar or with ctrl shift o
  • commands come from shell integration with exit codes, or from your prompts when it is off
14 recording and rewind
  • .cast playback with pause, speed and seek
  • text logs for searches and change records
15 keyboard shortcuts and command palette
  • tabs: ctrl tab, ctrl 1…ctrl 9, close, clone, reconnect and move
  • panes: split right or down, and alt ← → ↑ ↓ between split groups, with shift to take the tab along
  • terminal: per-tab zoom, select all, clear scrollback, ctrl insert and shift insert
  • plain ctrl and letter keys always reach the shell, including the tmux prefix
  • every shortcut is listed on the shortcuts page
Keyboard Shortcuts screen listing application shortcuts as keycaps
16 persistent remote sessions
  • the resesh agent is a small program that resesh uploads to your home directory on a linux host (about 2 mb). nothing else is installed, and nothing is downloaded by the host
  • the agent passes everything between the program and the terminal through unchanged, so every sequence on the osc page works as it does in a plain session
  • after a reconnect the agent brings back the screen and the last 10,000 lines of scrollback, with their links, prompt marks and program status
  • tmux needs no upload: resesh runs the host's own tmux as a private server with no status bar or prefix key
  • choose per connection: resume or ask, always start new, or end detached shells first
  • the session manager lists each shell by folder and program, with end all detached
  • shells open in another tab or client are never ended or resumed without asking
  • with tmux, styled underlines, focus reports, clipboard copies and agent status pass through; some other sequences do not
  • the agent is built on zmx and libghostty-vt
Remote Sessions for syd-bastion-01: four persistent shells by folder and program, two detached and two attached elsewhere, with Resume, End Session and End All Detached
17 shell integration and command alerts
  • bash, zsh, fish and powershell, locally and over ssh
  • off by default; network cli sessions keep ordinary startup
  • the notification opens the tab at that command's output
deploy.sh running on lab-automation-01 with the bell beside the tab turned on, so resesh notifies when it finishes
18 coding agents over ssh
  • selecting, copying and right-click paste work as usual inside agents that use the mouse; the agent still gets the scroll wheel, and shift+click sends it a click
  • osc 52: remote programs copy to the windows clipboard. it is write-only, so a host can never read your clipboard, and playback never touches it
  • shift enter sends esc cr, the new-line key claude code reads; full-screen programs such as vim still get a plain enter
  • unicode 11 widths match the remote wcwidth, so emoji no longer push the cursor out of step
  • xtversion replies "resesh", so claude code turns on synchronized output
  • colorterm=truecolor is sent with every ssh session, and the private tmux server is set up to pass rgb colour through
  • osc 8 links open in your browser and show their real target on hover
Claude Code working on syd-bastion-01 over SSH, with its icon on the tab, beside Codex waiting for permission on syd-bastion-02
19 program status on tabs
new
  • a known agent gets its icon and state; any other program gets the badge alone
  • a done or failed result stays on the tab after the prompt returns, until you look at the tab or type in it
  • a percentage in a report drives the tab progress bar
  • every sequence resesh reads is listed on the osc page
  • the agent icon or badge takes the place of the connection dot while the tab is connected, so there is one indicator, not two
  • in a persistent session kept alive by the resesh agent, reports arrive as they are, and the badge comes back after a reconnect
  • tmux drops these reports, so there the codex, claude code and shell-wrapper adapters pass status through a tmux option instead (tmux 3.0 or newer)
Tabs reporting their own state: a deploy script still working with its progress bar, another whose deploy failed, and a running command
20 progress on tabs and the taskbar
  • normal, error, paused and indeterminate states
  • clears itself when the command ends, even if the program forgets
deploy.sh on syd-metrics-01 at step 3 of 5, with its progress shown as a bar under the tab
21 workspaces and layout restore
  • save your tabs and splits as a named workspace: which sessions are open, where each pane sits, its size, tab order, pinned tabs and the active tab
  • reopen a workspace in one click and every session reconnects into the same layout
  • each workspace is a button on the left rail; switch with a click or ctrl shift 1…9, and the one you leave stays connected in the background
  • resesh reopens your last layout and workspace when it starts
  • a workspace changes only when you save it; unsaved changes show on its button and survive a restart until you save or revert them
  • a dot on the button when a background workspace has new output, a dropped session or an agent waiting; hover a button for its status, middle-click closes it
  • pick an icon from a set that matches the rail, or show initials (your own or from the name), or both with the initials under the icon
  • backups keep each workspace's sessions when you import them on another pc
Workspaces pane and rail with four saved workspaces beside a three-pane change window
22 small windows, settings and the taskbar
new
  • on a narrow window the sessions pane floats over the tabs, so terminals keep their width; choose automatic, float or dock in settings
  • quick connect folds into a search button, and ctrl shift k still opens it
  • settings and welcome are tabs: reorder them, split them beside a terminal, or move them to another window
  • drag a tab out of the window to open it in a new window where you drop it, or onto another window's tabs or panes to move it there
  • settings save as you change them and apply to every open window
  • right-click resesh on the taskbar for pinned and recent sessions and a new window
  • optionally start resesh when you sign in to windows
A narrow window: the sessions pane floats over the terminal, and quick connect has folded into a search button
23 file transfer and browsing
  • open a file pane right beside the ssh session in the same tab, from the tab's files button: the terminal on one side, the host's files on the other
  • it browses the host over sftp and follows the terminal's current folder, so the files you see are the ones the shell is working on
  • transfer files between the pane and your pc without opening another program or logging in again
  • drag the divider to size the pane; the width is remembered for every tab
  • local shells get the same pane for local folders, which also open straight in explorer
  • remote folders open in explorer through sshfs-win when it's installed
An SSH session on syd-bastion-01 with the file pane open beside it, listing the same playbooks folder the terminal is in
24 keys, secrets and host keys
  • explicit keyboard-interactive prompts, and a fallback to them when a host refuses the key
  • review changed host keys before accepting them
SSH key registry with a disposable demo key and its fingerprint
25 backup, export, import
  • review an import in its own tab, as a folder tree, before anything is added
  • logins that repeat are proposed as identities and attached to the folders where they dominate
  • securecrt's global public key is picked up from its configuration
  • keep a previous copy of saved data; a file that cannot be read is set aside, never saved over
SecureCRT import review with fictional sessions in a folder tree
26 themes
  • built-in themes plus around 900 bundled themes from iTerm2-Color-Schemes
  • search by name or browse by category: traditional, cool, warm, pastel, vivid, retro, high contrast
  • previews show log output with your highlighting rules, as the terminal will
  • theme changes apply and save immediately; no save or cancel step
27 jump hosts, proxies and tunnels
  • pick another saved SSH session as the jump host; jump hosts can be chained, and telnet sessions can use one too
  • each jump host logs in with its own login and has its own host key check, asked for one host at a time as the connection reaches it
  • or connect through a SOCKS5, SOCKS4 or HTTP proxy
  • local, remote and dynamic (SOCKS) tunnels are saved with the session and open when it connects
  • the tunnels dialog adds, stops and restarts tunnels on a connected tab, and shows why one failed
  • bulk edit sets a jump host for many sessions at once
  • OpenSSH ProxyJump and PuTTY proxy settings come across on import
  • turn SSH key exchange, cipher, MAC and host key algorithms on or off in settings, with legacy ones marked and one click to turn them off, and override them per session for an old device; algorithm options import from ~/.ssh/config
  • the file pane follows the jump host or proxy; opening a folder in file explorer does not
Tunnels for syd-metrics-01, reached through a bastion: two local forwards and a SOCKS tunnel listening, saved with the session
28 gssapi / kerberos auth
planned

use an existing windows domain ticket for SSH authentication. support is still under investigation.

no screenshot yet
29 ssh agent
planned

planned SSH agent authentication through the windows OpenSSH agent and pageant, so key passphrases need not be stored.

no screenshot yet
30 other planned work
planned

saved command snippets, mremoteng import, and automatic reconnect with reattach. priorities may change.

no screenshot yet
./under-the-hood

how it works

some of the engineering behind the features above.

rendering a native terminal, no browser inside output is parsed by libghostty-vt, the terminal core of ghostty, on the connection's own thread, and drawn with direct2d and directwrite straight into the window at the display's refresh rate. every glyph advances by whole cells, so text stays on the character grid at any display scaling.
glyphs box drawing without seams font outlines for box, block and powerline characters only meet the cell edges at a few sizes. resesh draws them itself as whole-pixel rectangles and paths, following ghostty's sprite font, so they join at every zoom level.
background tabs nothing drawn that nobody sees only the selected tab in each pane draws, and nothing draws while the window is minimized. output is still parsed, so command tracking, notifications and history keep working for background tabs.
rewind seekable terminal history every 10 seconds or 1 mib of output, the terminal serializes its full state as a keyframe. rewind jumps to the nearest keyframe and replays only what followed, so scrubbing is exact without replaying the whole session.
highlighting decorations that follow scrollback highlight rules run incrementally during output. matches stay attached to their rows as old lines are trimmed, so follow-mode logs such as journalctl -f don't redraw unchanged decorations.
output batched, timestamped output ssh output is batched every 16 ms or 32 kb before reaching the terminal, and each read keeps its arrival time, so line timestamps and recordings stay accurate under heavy output.
history full-text search that forgets properly history lives in one sqlite database with an fts5 trigram index kept in step by triggers, so any substring search stays fast at tens of thousands of commands. deletes run with secure_delete, then merge the index and truncate the write-ahead log, so removed text does not linger on disk.
compare a diff built for device output a myers line diff with a bounded edit budget, then word-level marks where addresses and paths count as one word. timestamps and numbers can be masked before comparing, so counters that always move don't bury the real change.
storage atomic json, secrets elsewhere sessions, identities and workspaces are written atomically with a backup copy, and an unreadable file is kept aside instead of replaced. session files with duplicate ids or invalid local directory or argument values also use backup recovery. passwords and passphrases live in windows credential manager and are never written to disk by resesh.

scope

resesh is a terminal client. these functions stay outside the app.

no embedded scripting language run automation with tools such as ansible from your shell.
no broadcast input keyboard input goes to one terminal at a time. use an automation tool to run commands across several hosts.
no automatic shell-integration injection shell integration is off unless you turn it on for a session. when it is on, its scripts are installed over a separate ssh channel and never typed into your shell.

where your data lives

sessions and folders %APPDATA%\Resesh\sessions.json
identities %APPDATA%\Resesh\identities.json
workspaces and layout %APPDATA%\Resesh\workspaces.json
passwords and passphrases windows credential manager
accepted host keys %APPDATA%\Resesh\known_hosts.json
command history (when on) %LOCALAPPDATA%\Resesh\history\history.db

secrets are never written to the normal json store, and they're left out of backups unless you ask for them. command history is never included in backups.

try the beta

x64 and arm64 installers, or a portable zip. windows 10 21h2 or newer.