Connect now
Type user@host in Quick connect on Home and press Enter.
One window for SSH sessions, local shells, serial consoles, remote desktops, code, and the network tools that keep your day moving.
Xpecter is a desktop terminal for people who spend the day on remote machines and network hardware. One window holds SSH sessions, local shells, serial consoles, Telnet and Mosh, saved Remote Desktop and VNC sessions, a code editor that works on local and remote files, an SFTP browser, and a set of network tools. It works the same way on Windows, macOS, and Linux.
Throughout this guide, Ctrl means Cmd on macOS. The app always shows the right key for your platform.
Type user@host in Quick connect on Home and press Enter.
Choose a session from the sidebar or Home. Live sessions return to their existing tab.
Use View > Split Vertical or Ctrl + Shift + D.
Open Remote files in the sidebar, then click a file. Save writes it back over SFTP.
Press Ctrl + Shift + S to save the focused terminal buffer.
Settings > Export configuration creates a portable bundle without passwords.
Each feature below has its own write-up further down: what it does, how it works, and step-by-step use. Follow the link to jump there.
| Feature | Where to find it |
|---|---|
| Send input to all panes | View > Send Input to All Panes, or ⇶ on a pane header · details |
| Named layouts | Sessions > Save Tab Set as Layout… / Open Layout… · details |
| Pick up where you left off | Reopen on Home, or Settings > On launch · details |
| Bell notifications and tab shortcuts | Background tabs show 🔔; Ctrl + Tab, Ctrl + 1–9 · details |
| Agent forwarding, Pageant, terminal speed | SSH form > Advanced settings · details |
| Serial console controls | The bar above every serial terminal · details |
| Tag colours and ask before pasting | Settings > Terminal > Colorize terminal output > Tag colours · details |
| Import from PuTTY | Settings > Import from PuTTY… (Windows) · details |
| Custom highlight rules | Settings > Terminal > Colorize terminal output > Custom highlight rules · details |
| Find in output | Ctrl + Shift + F in a terminal · details |
| Delay between pasted lines | Settings > Clipboard & paste, or the paste prompt · details |
| Find in files and Show in File Explorer | 🔍 and ⧉ on the editor's folder tree · details |
| PDF and image viewers | Click a PDF or image in any file tree · details |
| Save as root over SFTP | Offered when a remote save is refused · details |
| Edit remote files externally | ✎↗ on a remote file · details |
| Remote downloads | ⤓ on a remote file or folder · details |
| Remote browser follows the shell | Settings > Terminal, View > Shell Integration… · details |
| SOCKS and remote port forwards | Tools > Port forwarding… · details |
| Forwards saved with a session | 📌 beside an active forward, or Edit session · details |
| Update checker | Settings > About > Check for updates… · details |
Download the build for your platform from the Releases page. There is no account and no setup wizard. Xpecter opens on the Home tab.
Run xpecter-windows-installer.exe, or unzip the portable build and run xpecter.exe from anywhere. Local shells need Windows 10 1809 or newer.
Unzip and run the app. The build is not notarized yet, so the first time, right-click it and choose Open.
Extract xpecter-linux-amd64.tar.gz and run the xpecter binary. No install step is needed.
Upgrading from Specter: the old specter configuration directory is migrated automatically.
Xpecter can tell you when a newer release is out and fetch it for you.
How it works
Xpecter doesn't check in the background. When you ask, it looks up the latest release on GitHub and compares it with the version you're running. If yours is current, nothing changes. If a newer release exists, a banner appears with a Download button.
How to use it
Your sessions and settings live in a separate configuration folder (see Your configuration), so replacing the app doesn't touch them.
Xpecter draws its own title bar. It holds the Terminal, Sessions, View, Tools, and Settings menus, a light/dark toggle, and the window controls. Every action in this guide is on one of those menus, on a right-click menu, or on a shortcut.
Each tab holds one pane layout. The ⌂ Home tab is permanent and can't be closed. Every other tab shows an icon for what it holds, a status dot, and a close button. Drag tabs to reorder them. Turn on Show tab numbers in Settings to number them, which makes the jump shortcuts easier to use.
How it works
Xpecter keeps watching tabs you aren't looking at. A background tab shows a dot when new output arrives, and 🔔 when its terminal rings the bell (the BEL character, which many programs and shells send to get your attention). A bell in a background tab, or in any tab while the Xpecter window is behind other windows, also raises a system notification. That means a long job can tell you it's finished, for example make; printf '\a', even while you're working in another app.
How to use it
A tab can be split into two panes side by side, two stacked, or a four-pane grid. Every pane is independent. It can hold an SSH session, a local shell, a serial console, a Remote Desktop or VNC card, or a text editor, so a configuration file can sit open beside the switch you're writing it for.
How to use it
Broadcast mode sends what you type in one pane to every terminal pane in the tab. It's for running the same command on several machines at once, such as a show version across four switches.
How it works
While broadcast is on, every keystroke and paste in the focused pane is copied to each terminal pane in the same tab. Editor panes and Remote Desktop or VNC cards are left out, and other tabs are never affected. Every pane header shows that broadcast is on, so it's hard to forget. Pastes and command snippets still go through the paste guard. You're asked once, and your answer applies to every pane the text reaches. If any of those panes carries a tag set to ask before pasting, it still asks.
Broadcast belongs to one tab. It's off in every new tab, and it switches itself off if the tab is no longer split.
How to use it
A layout is a saved arrangement of tabs that you can reopen whenever you need it. Save a rack of switches as a four-pane grid once, and it comes back with every pane connecting again.
How it works
A layout records the open tabs, how each one is split, and what each pane holds: the saved session, local shell, serial console, editor, or Remote Desktop or VNC card. That's everything needed to start each session again. A layout never stores a password or terminal output. Reopening a layout starts each session just as if you'd opened it yourself, so SSH sessions that need a password ask for it. Layouts are part of your configuration, so they're included when you export it and restored when you import it on another machine.
How to use it
Xpecter remembers the tabs you had open when it last quit and offers them back at the next launch.
How it works
Xpecter records the tab set as you work, not only when you quit. At the next launch, Home offers to reopen it, or reopens it automatically if you've chosen that. These come back:
SSH sessions reconnect on their own when they can authenticate without you: with a key, an agent, or a password saved in the OS keychain. A session that needs a password asks for it. If you cancel, the session waits in its pane until you press R to connect.
How to use it
The sidebar has four collapsible sections: Sessions, Local shells, Folders (pinned editor folders), and Remote files (the SFTP browser). Drag its edge to resize it. Press Ctrl + Shift + B or click the « button to hide it.
Home is what you see at launch, and whenever no session is using the tab. It shows:
A thin bar at the bottom shows short confirmations and errors, such as a file saved, a forward stopped, or how many sessions an import brought in. Each message fades after a moment.
Host keys you accept are written to your own ~/.ssh/known_hosts, the same file OpenSSH uses. A host you've already trusted in OpenSSH is trusted here too, and the reverse is also true.
The box at the top of Home does two jobs. It searches your saved sessions by name, host, or tag, and it connects straight to an address you type in.
How to use it
user@host, or user@host:port for a non-standard port, and press Enter to connect to a machine you haven't saved.The session picker (Sessions > New Session) offers seven choices. Press the number or click the tile; Esc closes the picker.
Keys, passwords, agents, agent and X11 forwarding, jump hosts, keepalive, and legacy hardware.
A local shell on this machine, with named profiles and starting directories.
A console over a COM or tty port, from 9600 to 115200 baud, with line controls.
Unencrypted, for legacy equipment, through your system's telnet client.
Opens your platform's RDP client with the connection filled in.
Opens your platform's VNC viewer and tracks it as a session card.
A text editor pane with no connection of its own. See The editor.
The SSH form takes a host and user, a device kind, and password or key authentication. The device kind (VM or host, network switch, or firewall) only chooses the icon shown in the sidebar. If Caps Lock is on while you type a password, a warning appears under the field. The options below are under Advanced settings, both in the SSH form and in the Edit session dialog.
Keys and agents
Agent forwarding
Forward the agent to the host lets programs on the remote host use the keys on your machine without copying them there. Once it's on, a git pull from a private repository on the host authenticates with your local key, and so does an ssh from that host to a second machine behind it. Xpecter requests forwarding when the shell starts. If the host refuses (many servers disable it), a message on the terminal says so and the session carries on without it.
Only forward to hosts you trust. While you're connected, anyone with root on that host can use your agent to log in as you elsewhere.
X11 forwarding
Enable X11 forwarding lets graphical programs started on the host, such as xclock or wireshark, open their windows on your screen. Xpecter proxies the X11 channels to your local display, so you need an X server running locally: native X on Linux, XQuartz on macOS, or VcXsrv or Xming on Windows.
Jump host
A jump host (or bastion) is a machine you have to pass through to reach the target. Enter it in OpenSSH ProxyJump form, [user@]host[:port], for example ops@bastion.example.com:2222. Xpecter connects to the jump host first, then opens a channel through it to the target, so the target never needs to be reachable from your machine. The jump host's key is checked against known_hosts exactly like the target's.
Terminal speed and compatibility
A local shell on this machine. On Windows, this is PowerShell by default, and Command Prompt and PowerShell are also on the Tools menu. On macOS and Linux, it's your login shell.
How to use it
A console over a serial port, for switches, routers, and boards that are out of reach of the network. Enter the port name, such as COM3 on Windows, /dev/ttyUSB0 on Linux, or /dev/tty.usbserial-… on macOS, and a baud rate from 9600 to 115200. Serial sessions are saved, grouped, filtered, and logged like any other, and use the same terminal.
Console controls
A serial session has a bar between its header and the terminal for controlling the line itself:
| Control | What it does and when you need it |
|---|---|
| Enter sends | Chooses what the Enter key sends: CR, LF, or CR+LF. Most network equipment expects CR. If lines don't register, or each one arrives twice, try another setting. |
| Local echo | Shows what you type on your own screen. Turn it on for a device that doesn't echo characters back, where you would otherwise be typing blind. |
| DTR / RTS | Raises or lowers the modem control lines. Some devices use them for flow control, and some development boards use DTR to reset. |
| Break | Holds the line in break for a quarter second. Break is how many devices are interrupted at boot, for example to reach ROMMON on Cisco equipment. |
| Hex | Shows a hex dump of incoming bytes instead of rendering them. Use it when a device sends binary data and the terminal turns it into a mess. |
The bar's settings apply to pasted text as well as typing, so a pasted configuration uses the same line endings you chose.
Unencrypted, for legacy equipment that doesn't speak SSH. Enter the host and port (default 23). Xpecter runs your system's telnet client inside a local shell, so that client must be installed. On Windows, it's an optional feature you may need to turn on.
Mosh is a remote shell that survives network changes: move from Wi-Fi to a cable, or put the laptop to sleep, and the session is still there. Choose Terminal > New Mosh Session… and enter user@host. Xpecter runs mosh in a local shell, so you keep Xpecter's tabs, resizing, logging, and highlighting. You need the mosh client on this machine, and mosh-server on the host with its UDP ports open (60000–61000 by default).
Enter the host, port, user, and an optional domain, then choose a display mode:
Console session (/admin) attaches to the server's console session instead of starting a new one.
How it works
Xpecter doesn't draw the desktop itself. It writes a .rdp file with everything filled in and starts the client your platform already has: Remote Desktop Connection on Windows, Windows App on macOS, and FreeRDP or Remmina on Linux. That client asks for the password; Xpecter never stores one.
A pane in Xpecter stands for the session and shows whether the client window is still open. From that pane:
Enter the host and port. VNC works the same way as Remote Desktop. It opens in your platform's viewer: Screen Sharing on macOS, or TigerVNC, RealVNC, TightVNC, UltraVNC, Remmina, or Vinagre elsewhere, whichever is installed. The viewer asks for the password, and a session card in the pane tracks it with the same R, D, and Enter actions.
The sidebar lists sessions in this order:
Each row has a status dot, the session's name, and a device icon; hover it to see the address. Clicking a session that's already connected switches to its tab instead of opening a second connection. Open another session on the right-click menu opens a second one deliberately.
Filter sessions… at the top of the section matches on name, host, serial port, and tags, and filters local shell profiles at the same time. While a filter is active, folders step aside and each row shows its address. Arrow keys move through the matches and Enter connects.
Create folders from Sessions > New Folder or the 📁 button. Folders can nest. Drag a session onto a folder to move it there. Right-click a folder to rename or delete it; deleting a folder moves its sessions out rather than deleting them. Pinned sessions sit at the top of the sidebar and lead Home, so the machines you use every day are one click away right after launch.
Tags label sessions. A tag can also carry a colour, which marks every session wearing it, and can be set to ask before pasting, which adds a safety check to sessions where a stray paste would hurt.
Where to find it
Open Settings and find Colorize terminal output in the Terminal group. Tag colours is the second panel beneath it, after Custom highlight rules. Tags themselves are added to sessions in the Edit session dialog.
The Tag colours panel
Each coloured tag has one row:
| Part of the row | What it does |
|---|---|
| Dot and name | The tag, shown in its current colour |
| Colour swatch | Click it to choose a different colour |
| ask before pasting | Tick it to make sessions with this tag confirm pastes and snippets (see below) |
| ✕ | Removes the tag's colour and its ask-before-pasting setting. Sessions keep the tag itself. |
Tags are listed in alphabetical order. Out of the box the panel holds six: prod and production in red with ask before pasting ticked, staging in orange, and dev, lab, and test in green. Below the list is a row for adding your own. Removing one of the six built-in tags is remembered, so it doesn't come back at the next launch.
How colours work
A session's tab, pane header, and sidebar row wear the colour of its first coloured tag, so a terminal on a production box is recognisable from across the room, even in a crowded split. Only coloured tags count. A session tagged core, prod, dc1 is red, because core has no colour and prod is the first tag that does. If a session has two coloured tags, the order you typed them in decides which colour wins, so put the most important one first. Tag names ignore case: PROD, Prod, and prod are the same tag, and names are stored in lower case. A tab holding a split takes the colour of the first pane whose session has a coloured tag. Colour changes show on open tabs and the sidebar straight away.
How ask before pasting works
In a session carrying a tag with ask before pasting ticked, Xpecter stops and asks before sending:
The prompt names the tag and the session, so you know exactly where the text is about to go. It asks however the general Warn before pasting multiple lines setting is set, so turning that warning off never removes this check. Ordinary typing, and pastes with no line break in them, are never interrupted.
Unlike the colour, the check doesn't depend on tag order. A session asks if any of its tags has ask before pasting ticked, even one that isn't providing the colour. The prompt names the tag in capitals, for example PROD, together with the session.
How to use it
prod, core. The sidebar filter and Quick connect both search tags.Right-click a session and choose Edit session. Basic settings has the name and the fields for the session's type. Advanced settings adds:
Three importers under Settings bring in sessions you already have elsewhere. Each one adds sessions alongside the ones you have, and reports in the status bar how many it imported.
.mxtsessions and .ini exports and maps names, hosts, users, ports, and key paths. Passwords are skipped.~/.ssh/config and saves each concrete Host block as a session, carrying HostName, User, Port, IdentityFile, and ProxyJump. Blocks made only of wildcards, such as Host *, hold defaults rather than machines, so they're skipped.PuTTY keys: Xpecter reads OpenSSH keys, not PuTTY's .ppk format, so an imported session that used a .ppk key is set to use the agent instead. Either keep Pageant running with the key loaded, or convert it in PuTTYgen (Conversions > Export OpenSSH key) and point the session at the new file.
This is the only setting that makes Xpecter keep a password at all, and it's off by default.
How it works
With Remember SSH passwords in the OS keychain turned on, a saved SSH session can keep its password in your operating system's credential store: Windows Credential Manager, macOS Keychain, or the Linux Secret Service. The password is never written to Xpecter's own files or included in an export. The next time you connect, it fills in automatically.
How to use it
If a session disconnects, times out, or fails, its pane stays where it is and shows a Session stopped panel, so the output isn't lost. Anything you type is held rather than sent into a dead connection.
To end a session on purpose, use Terminal > Disconnect (Ctrl + Shift + X).
Logging keeps a record of everything your sessions print. It's off until you choose a directory.
How it works
Once a directory is set, raw output from every SSH, local shell, and serial session is appended to a file named after the session. "Raw" means exactly what arrived, so logs can include the terminal's own control sequences as well as text.
How to use it
Open Settings > Session logging, click Choose…, and pick a directory. Click Disable session logging to turn it off again.
Colorize terminal output (on by default) colours plain output the way an operator reads it, so you can see at a glance what matters. It highlights:
GigabitEthernet0/1 and Gi0/1)%FACILITY-severity-MNEMONIC log tagsHow it works
Highlighting is applied as output arrives. It works the same on Linux hosts, switches, PowerShell, Command Prompt, and serial consoles. Text that the far end already coloured is left exactly as sent, so coloured prompts, ls --color, pagers, and vim are never recoloured. The colours come from your terminal colour scheme, so they suit whichever theme you use.
Add patterns of your own to the built-in highlighting, such as your site codes, a hostname scheme, or the alarm words your equipment uses.
Where to find it
Open Settings and find Colorize terminal output in the Terminal group. Custom highlight rules is the first panel beneath it. Until you add a rule, the panel says "No custom rules yet."
The panel
| Control | What it does |
|---|---|
| Pattern box | The text to match: words separated by commas, or a regular expression |
| Words / Regex | Says how to read the pattern box |
| Category | Which built-in colour to paint matches with. New rules start on bad. The full list is in the table below. |
| Add | Saves the rule. It's listed in the panel and applies to every terminal. |
How it works
CRIT, DOWN, c++ colours DOWN and down but not DOWNLOAD. A hyphen counts as part of a word, so fan does not light up inside fan-tray; add fan-tray as its own word if you want it. Each word is matched literally, so the + in c++ needs no escaping.VLAN\d+ colours VLAN10 and VLAN200, but also the VLAN10 inside XVLAN10. Wrap the pattern in \b to limit it to whole words: \bdc[0-9]-[a-z]+\b matches hostnames like dc1-core and nothing longer.shutdown in the bad category overrides however the built-in set would colour it.words · bad), and a ✕ that removes it.Categories
| Category | Colour | The built-in highlighter uses it for |
|---|---|---|
| good | Green | Words that mean something worked, such as up, connected, established, permit |
| bad | Red | Failures, such as down, failed, denied, err-disabled, timeout |
| warn | Yellow | Things that want attention, such as warning, degraded, flapping, pending |
| iface | Cyan | Interface names, long and short: GigabitEthernet0/1, Gi0/1, Port-channel1, eth0, ens192 |
| addr | Bright magenta | IPv4 and IPv6 addresses with prefix lengths, and MAC addresses in colon, hyphen, and Cisco dotted forms |
| number | Magenta | Sizes, rates, percentages, hex, and plain numbers |
| string | Bright yellow | Text in double quotes |
| keyword | Blue | Network configuration keywords, such as interface, switchport, spanning-tree, route-map |
| meta | Bright cyan | %FACILITY-severity-MNEMONIC log tags, and URLs |
| path | Bright blue | Windows and POSIX file paths |
| time | Grey | ISO-8601, syslog, and clock timestamps |
The colour names are the terminal palette slots. The exact shade comes from your terminal colour scheme, so the same rule looks right in Dracula, Nord, or Solarized.
How to use it
CRIT, DOWN, err-disabled.Hover a URL to underline it and see where it goes. Ctrl-click opens it in your browser. A plain click never opens anything, so finishing a text selection on a URL can't launch a browser by accident. A link that wraps across the edge of the pane is recognised as one link.
Search everything in a terminal's scrollback, not just what's on screen.
How it works
A find bar opens over the focused terminal. As you type, every match in the scrollback is highlighted and the bar shows how many there are. If you had text selected, the bar starts with it. Aa makes the search match case. .* treats the search as a regular expression, so err(or)?|fail finds all three words at once.
How to use it
Terminals keep 10,000 lines by default. You can set anything from 1,000 to 100,000 in Settings. Every retained line is held in memory for each terminal, so a high setting across many tabs adds up. Raise it when you need to, not by default.
Pasting into a terminal is where most accidents happen, so Xpecter handles it carefully.
Delay between pasted lines
Some consoles, especially serial consoles at low baud rates and busy network devices, have small input buffers. A whole configuration pasted at once overflows them and characters are silently dropped. Delay between pasted lines adds a pause after every Enter, giving the device time to process each line before the next one arrives.
Command snippets
Snippets save a named command or configuration block that you use often. Create them in Terminal > Manage Command Snippets…. Each one appears in the Terminal menu as Snippet: name. Choosing it types the text into the focused session through the same paste guard, so a multi-line snippet gets the same preview and delay as a paste.
OSC 52
OSC 52 is an escape sequence that lets a remote program, such as tmux or vim over SSH, write to your local clipboard. It's useful, but any program on the host could use it to replace what's on your clipboard, so it's off by default. Turn it on under Settings > Security.
Ctrl + = and Ctrl + - zoom the focused terminal's font, Ctrl + 0 resets it, and F11 toggles fullscreen. Cursor (Block, Underline, or Bar) and Blinking cursor in Settings > Terminal apply to every open terminal at once.
Save Terminal Output… (Ctrl + Shift + S) writes everything in the focused terminal's buffer, including scrollback, to a file you choose. It also works from the panel shown after a session drops. Terminal > Clear Screen clears the buffer.
The editor is a kind of session, not a fixed panel. That means it can go anywhere a session can.
Two editor panes can sit side by side, each with its own files. Ctrl + S always saves the document showing in the pane you're working in.
Each editor pane has a strip of open documents along the top. Click a document to switch to it, drag to reorder, or use Ctrl + PageUp and Ctrl + PageDown to step through. A modified document shows a dot in place of its close button, and the pane and tab carry the mark too, so unsaved work is visible from anywhere. Closing anything with unsaved changes asks: Save, Discard, or Cancel.
These are available from the command palette (Ctrl + Shift + P), and some have shortcuts:
Open a folder to browse and manage its files inside the editor pane.
How to use it
The tree watches the folder, so a file added by anything else, such as a build, a download, or a shell in the next pane, appears on its own.
Create, rename, delete
The tree header adds a file or folder at the root, and every folder row does the same inside that folder. Every row can be renamed in place or deleted. If a name is already taken, Xpecter refuses rather than overwriting the existing file. Nothing goes to the recycle bin, so the delete confirmation names the full path and, for a folder, counts how many items will go with it.
Resize
Drag the tree's edge to make it wider or narrower, and double-click the edge to reset it. The width is remembered.
Find in files
Search every file in the open folder for text or a regular expression.
To keep results fast and relevant, the search skips version-control folders (such as .git), dependency folders (such as node_modules), build output, and binary files.
Show in File Explorer
This jumps from Xpecter to the same place in your system's file manager: Explorer on Windows, Finder on macOS, or your desktop's file manager on Linux.
Pinned folders
From the folder menu, pin the folder to the sidebar's Folders section. After that, one click opens it in an editor again, even after a restart.
Every row in the tree opens something, whatever the file type.
How it works
Reading PDFs
The PDF viewer fits the page to the pane. It has zoom, actual-size, and fit-width buttons, and a page counter that follows as you scroll. A PDF on a remote host opens straight from the host in the remote browser, with no download step.
Viewing images
PNG, JPEG, GIF, WebP, BMP, ICO, SVG, and AVIF open in an image viewer with the same zoom controls. Transparent areas show against a checkerboard, so you can tell them apart from white.
Zooming
In both viewers, pinch on a trackpad, Ctrl-scroll, or press Ctrl with +, -, or 0. Zoom centres on the point under the cursor, so you zoom into what you're looking at.
Run the file you're editing without leaving Xpecter.
How it works
Clicking Run saves the file first, then runs it. HTML opens in your browser. Scripts run in a live shell opened in the file's own directory, so relative paths work, the output stays on screen, and Up then Enter runs the script again. A script opened from a remote host runs on that host.
| File | Runs with |
|---|---|
| .html, .htm | Your browser |
| .py, .pyw | python or python3 |
| .ps1 | powershell or pwsh |
| .js, .mjs, .cjs | node |
| .sh, .bash | bash |
| .bat, .cmd | cmd /c on Windows |
How to use it
Click the Run button on the document strip, or choose Run File in the palette.
Each pane's status bar shows the path, line and column, indentation, line endings, language, and wrap state. Click line endings, language, or wrap there to change them.
The editor ships Monaco's full language set, with language services (completion, errors, and formatting) for TypeScript, JavaScript, JSON, CSS, SCSS, Less, and HTML. It adds Haskell, PureScript, Idris, Elm, OCaml, Standard ML, Erlang, Nix, Lisp, Agda, and Lean.
Skald, Dawnrail's switch-configuration language, is a first-class language for .skald files. Plain text and log files (.txt, .log, .out, .err, .text) are coloured with the same highlighting the terminal uses, instead of showing as one grey wall.
The editor uses the terminal's font and size, but has its own wallpaper image and opacity. A picture that reads well behind a prompt is usually noise behind code, so the two are set separately.
When an SSH session has focus, the sidebar's Remote files section shows that host's filesystem over SFTP. It uses the same connection, so there's nothing extra to log in to. The header names the session and has four buttons: + new file, ⊡ new folder, ⤒ upload files, and ⟳ reread.
📁 .. goes up a level.This lets you edit a file your login can read but not write, such as /etc/nginx/nginx.conf, and still save it from the editor.
How it works
When the host refuses a save because of permissions, Xpecter offers to save through sudo instead. It saves in two steps:
Your sudo password is sent once for that command and never kept. If sudo refuses, for example because of a wrong password or no sudo rights, the dialog shows sudo's own message.
How to use it
This lets you work on a remote file in a desktop application, such as a spreadsheet in Excel or an image in an image editor, and have your saves go back to the host.
How it works
The ✎↗ action downloads the file to a temporary copy and opens it in your system's default application for that file type. Xpecter watches the copy. Every time you save it in that application, the file is uploaded straight back to the host, and the status bar notes each upload. When the SSH session closes, the local copy is removed.
How to use it
How it works
Every transfer, in either direction, is written under a temporary name and renamed only when it finishes. If a transfer is cut short, you never end up with half a file under the real name, which matters when that file is a config a service is about to read. Modification times are preserved where the server supports it.
Create, rename, delete
These work on the host with the same confirmations as the local tree. SFTP has no trash, so deletion is permanent. The delete dialog says so, and counts what a directory holds before you confirm.
With this on, the file list follows your shell. Type cd /var/log in the terminal and the list beside it moves to /var/log.
How it works
A remote shell doesn't normally tell the terminal which directory it's in. This feature relies on OSC 7, a standard, invisible escape sequence that the shell prints after each command with its current directory. Xpecter reads that sequence and moves the list. Many other terminals read OSC 7 too, so the line you add does no harm elsewhere.
How to use it
~/.bashrc, ~/.zshrc, or fish's config file.source ~/.bashrc. From then on, every cd moves the list.Port forwarding tunnels network connections through an SSH session. It lets you reach services that are only reachable from the far side, or let the far side reach something on your machine.
The three kinds
| Kind | What it does | Example |
|---|---|---|
Local port →ssh -L | Binds a port on this machine and tunnels each connection to a host:port reachable from the SSH host. The remote service behaves as if it were local. | Local port 5432 → db.internal:5432. Your database client connects to localhost:5432 and reaches a database only the host can see. |
SOCKS proxy onssh -D | Binds a port on this machine as a SOCKS5 proxy. Any program pointed at it sends its connections out from the SSH host, so the whole network on the far side is reachable, not just one address. | SOCKS proxy on 1080. Set your browser's SOCKS5 proxy to localhost:1080, and internal web interfaces open as if you were on site. |
Host port →ssh -R | Asks the SSH host to listen on a port and delivers each connection it receives to an address on your side. | Host port 8080 → localhost:3000. Someone on the host opens localhost:8080 and reaches the dev server running on your laptop. |
How to use it
For a quick local forward, Terminal > New Local Port Forward… sets one up through a series of prompts instead of the dialog.
If you use the same tunnel every time you connect to a host, save it with the session and it starts on its own.
How it works
Saved forwards are part of a saved session. Every time that session connects, its forwards start automatically. If one can't start, for example because the local port is already in use, a message on the terminal says so and the connection carries on without it.
How to use it
Tools > Network tools… holds two utilities that run from this machine and need no session.
Sends a "magic packet" that wakes a sleeping or powered-off machine whose network card supports it. Enter its MAC address. Optionally add a broadcast address, such as 192.168.1.255, to target a specific subnet.
Checks which TCP ports on a host accept connections. Enter the host and a list or range, such as 22,80,443,8000-8100. The results list the open ones.
The Appearance group at the top of Settings applies to every window, tab, and pane at once. Changes take effect immediately and persist.
| Setting | Choices | Default |
|---|---|---|
| Theme | Dark, Light. Also on the title bar toggle. | Dark |
| Terminal colors | Dark, Light, Dracula, Nord, Solarized Dark, Solarized Light, Gruvbox Dark, One Dark, Tokyo Night | Dark |
| Font | Menlo, Consolas, Cascadia Code, Fira Code, JetBrains Mono, Courier New, IBM Plex Mono, Source Code Pro, Inconsolata, Victor Mono, Ubuntu Mono | Menlo |
| Font size | 8px to 32px | 13px |
| Wallpaper | Browse… for an image to show behind terminals | None |
| Editor wallpaper | Browse… for a separate image behind editor panes | None |
How it works
How to use it
Open Settings from the title bar's Settings menu. It's one scrolling dialog in the order below, and every change takes effect immediately and persists; there is no Save button. Close it with ✕, Esc, or a click outside it. This is every setting in Xpecter 3.8, with its exact label.
Theme, Terminal colors, Font, Font size, Wallpaper (with Opacity and Clear wallpaper), and Editor wallpaper (with Editor opacity and Clear editor wallpaper). See Appearance for the choices and defaults of each.
| Setting | Default | What it does |
|---|---|---|
| Scrollback | 10,000 lines | How many lines each terminal keeps for scrolling back: 1,000, 5,000, 10,000, 25,000, 50,000, or 100,000. Every line is held in memory while the session is open, so large values across many panes cost real memory. Lowering it discards anything already above the new limit. |
| Colorize terminal output | On | Colours plain output: outcomes, interfaces, addresses, log tags, paths, timestamps, and numbers. Text the far end already coloured is left alone. More |
| Custom highlight rules | None | A panel under Colorize terminal output for adding your own words or regular expressions, each with a colour category. More |
| Tag colours | 6 built-in tags | A panel under Custom highlight rules. Gives tags a colour shown on tabs, pane headers, and sidebar rows, and marks tags whose sessions ask before pasting. More |
| Show tab numbers | Off | Numbers each tab, so you know which Ctrl + number jumps to it. |
| Cursor | Block | The terminal cursor shape: Block, Underline, or Bar. Applies to every open terminal. |
| Blinking cursor | Off | Makes the terminal cursor blink. |
| Remote files follow the shell's directory (needs shell integration) | On | Moves the Remote files list to the directory your shell is in after every cd. It only works once the host's shell announces its directory. More |
| SSH keepalive (prevent idle disconnects) | On | Sends a small message over idle SSH sessions so firewalls and NAT devices don't drop them on a timeout. Turn it off only if a device objects to keepalives. |
| Keep app open when last tab closes | Off | Off: closing the last tab quits Xpecter. On: you're left on Home instead. |
| Notify when a background terminal rings its bell | On | Raises a system notification when a terminal you can't see rings the bell, so a long job that ends with a bell gets noticed. The 🔔 on the tab appears either way. More |
| On launch | Offer to reopen the last session | What happens to the tabs open at the last quit. Offer to reopen the last session shows a Reopen offer on Home. Reopen the last session automatically brings them straight back. Start fresh ignores them. Tabs, split panes, and editor folders are remembered as you work; passwords are not, so a reopened session that needs one asks for it. More |
| Setting | Default | What it does |
|---|---|---|
| Copy on select | Off | Copies text to the clipboard as soon as you select it in a terminal, as many Linux terminals do. |
| Right-click to paste | On | Right-clicking a terminal pastes the clipboard, as in PuTTY. Ctrl + Shift + V pastes either way. |
| Warn before pasting multiple lines | On | Shows a preview and asks first before a paste of two or more lines goes to a program without bracketed paste, where each line would run as it arrives. Also asks before multi-line snippets. More |
| Delay between pasted lines | No delay | Pauses after each line of a paste: No delay, or 25, 50, 100, 250, or 500 ms between lines. For consoles that drop characters when a whole configuration arrives at once. The multi-line paste prompt offers the same choice, and whatever you pick there becomes the new setting. |
This group has a coloured edge down its left side, because both settings loosen a default that protects you.
| Setting | Default | What it does |
|---|---|---|
| Allow remote hosts to write to your clipboard (OSC 52) | Off | Lets programs on the far end, such as tmux or vim, copy to your local clipboard. With it on, anything running on the remote end can replace your clipboard silently, including on a host you haven't decided to trust yet. |
| Remember SSH passwords in the OS keychain | Off | Lets saved SSH sessions keep their passwords in Windows Credential Manager, macOS Keychain, or the Linux Secret Service, never in Xpecter's own files. Unticking it immediately forgets every password Xpecter has saved, and the status bar confirms with "Saved passwords forgotten." More |
| Setting | Default | What it does |
|---|---|---|
| Log directory: Choose… | Off | Logging is off until you choose a directory. From then on, raw output from every SSH, local shell, and serial session is appended to a per-session file there. |
| Disable session logging | (appears once a directory is set) | Turns logging off and forgets the directory. Existing log files are left where they are. |
These are actions rather than settings; click one to run it. Each is explained in full under Your configuration or Importing sessions.
| Action | What it does |
|---|---|
| Export configuration… | Writes sessions, groups, profiles, pinned folders, layouts, and appearance settings to one file, without passwords. |
| Import configuration… | Reads an exported file and asks whether to Replace what's here or Merge alongside it. |
| Export encrypted configuration… | The same as export, protected with a passphrase you choose. |
| Import encrypted configuration… | Reads an encrypted bundle after asking for its passphrase. |
| Import from MobaXterm… | Imports sessions from .mxtsessions or .ini files. |
| Import from SSH config… | Imports each concrete Host block from an OpenSSH config file. |
| Import from PuTTY… | Imports PuTTY's saved sessions from the Windows registry. |
| Restore from backup… | Rolls your configuration back to one of the last seven daily backups. |
| Reset appearance settings to defaults | Resets appearance, shortcuts, and most toggles, and deletes command snippets. Sessions are untouched. See exactly what it resets. |
| Erase all saved data… | Clears everything, after writing a backup it refuses to go without. |
Shows the version you're running beside Check for updates…, which asks GitHub for the latest release. More
View > Keyboard Shortcuts… lists every binding. To change one, click it and press the new keys. Custom bindings persist. Reset appearance settings to defaults puts them back, along with other settings; see Resetting for everything it touches.
| Action | Default |
|---|---|
| Disconnect active session | Ctrl + Shift + X |
| Paste | Ctrl + Shift + V |
| Save terminal output | Ctrl + Shift + S |
| Find in output | Ctrl + Shift + F |
| Toggle sidebar | Ctrl + Shift + B |
| Zoom in / out / reset | Ctrl + = / - / 0 |
| Fullscreen | F11 |
| Split vertical / horizontal | Ctrl + Shift + D / Enter |
| Close active pane | Ctrl + Shift + W |
| Move focus between panes | Alt + Arrow |
| Next / previous tab | Ctrl + Tab / Ctrl + Shift + Tab |
| Jump to a tab | Ctrl + 1–8, Ctrl + 9 for the last |
| Action | Keys |
|---|---|
| New / open / save / close file | Ctrl + N / O / S / W |
| Save as | Ctrl + Shift + S |
| Go to file | Ctrl + P |
| Command palette | Ctrl + Shift + P |
| All editor commands | F1 |
| Find / replace / go to line | Ctrl + F / H / G |
| Find in files | Ctrl + Shift + F |
| Next / previous document | Ctrl + PageDown / PageUp |
| Word wrap | Alt + Z |
Ctrl + Shift + S and Ctrl + Shift + F do different things depending on focus: in a terminal they save output and find in output, and in an editor they mean Save As and find in files. Every dialog closes with Esc or a click outside it.
Xpecter keeps its configuration as plain JSON in your OS config directory. Sessions, folders, local shell profiles, layouts, and settings each have their own file, and only your user account can read them.
| Platform | Folder |
|---|---|
| Windows | %AppData%\xpecter |
| macOS | ~/Library/Application Support/xpecter |
| Linux | ~/.config/xpecter |
Xpecter writes a backup of your configuration at most once a day and keeps the seven most recent. To roll back, for example after deleting sessions by mistake, choose Settings > Restore from backup… and pick a date.
Export configuration… writes your sessions, groups, profiles, pinned folders, layouts, and appearance settings to a single file. It's how you move your setup to a new machine or share a session list with a colleague. Passwords are never written to a configuration file.
Import configuration… reads that file and asks how to apply it:
Export encrypted configuration… and Import encrypted configuration… work the same way, but protect the file with a passphrase you choose. The passphrase is stretched into a key with PBKDF2-SHA256 and the bundle is encrypted with AES-256-GCM, which also detects tampering. The bundle is safe to keep in OneDrive, Dropbox, S3, or any file store, with no Xpecter service involved. Encrypted bundles still never include passwords or host keys. If you forget the passphrase, the bundle can't be opened.
~/.ssh/known_hosts. An unknown host shows its fingerprint and asks. A changed key shows a stronger warning, because it can mean the machine was rebuilt or that someone is intercepting the connection.prod, makes every paste that presses Enter, and every snippet, ask first.sz and rz) aren't supported; use the SFTP browser and its transfer actions to move files.Xpecter is developed in the open on GitHub. If something breaks, or works differently from what you expected, open an issue on GitHub. Include:
A useful report can be as simple as "this crashed" or "I wish X worked like Y."
Attaching the log
View > Open Log Folder opens the folder that holds xpecter.log. It records connections, transfers, and any error the window caught, and it's rotated so it never grows without limit. Attach it when something went wrong and you couldn't tell why.