Expand short keywords into full snippets.
Your wrists will thank you.

Type ;sig in any app and it becomes your signature. Snippets fill in the date, the clipboard, or values you’re asked for. Type ;prod and a menu of your SSH, VNC and RDP connections opens, with logins from 1Password and a terminal built in. Native on your Mac, and free.

v0.2.0 · 16.5 MB · Universal · Apple Silicon + Intel · macOS 14+
The dog food fund

Free app. Very spoiled dog.

I think this is pretty cool, but I don’t like charging for software. If you love this app and you have the means to help support my spoiled dog’s expensive diet with a donation, we would appreciate it greatly!

One-time, paid securely through Stripe right here. xpnd stays free either way.

Text Expansion

Quick snippets with variables.

A snippet can hold the date with #{date}, what you copied with #{clipboard}, a value it asks for with #{input:Name}, or the output of a script with #{shell:…}, and #{cursor} says where the caret ends up. A keyword can also open an app or run a Shortcut.

Groups turn on or off together, and ⌃⌥⌘Space searches them all. In Screen Sharing, VNC and RDP clients, and VMs, snippets are typed as keystrokes on the remote machine instead of pasted.

Connection Manager

Type a folder name, pick any server, and go.

Keep SSH, VNC and RDP connections in folders. Give one a string like ;aws and typing it connects. A folder’s string, like ;prod, opens a numbered menu: press 1 to 9 to connect, or Esc to close it and keep what you typed. Hold ⌘ while you pick to connect with sudo just that once.

Press ⌃⌥⌘C for the launcher and search them instead. Jump through a bastion, add SSH options, and color a folder so prod never looks like staging.

Built-in terminal

Every session, one window.

Double-click a connection and it opens as a tab in xpnd’s own terminal, with a green dot in the sidebar for what’s connected. Duplicate or close a tab from its menu, and set the font, colors, cursor and scrollback in Settings. Snippets expand inside tabs too.

Prefer your own? Configure your strings to go to Terminal, iTerm2, Ghostty, Warp, or a command of your choosing.

Windows desktops

RDP, right beside your terminals.

An RDP connection opens the Windows desktop as a tab, through the FreeRDP library bundled in xpnd. It resizes with the tab, works through an RD Gateway, and reconnects after a drop. Point at the top edge, or press ⌘⇧N, for the toolbar: Ctrl+Alt+Del, Win+R, full screen, display size, audio, clipboard sync and more.

Drop Finder files on the desktop or in a folder and xpnd copies and pastes them into the window under the pointer. Drop them on the toolbar and they land in the xpnd drive.

1Password

Passwords stay in 1Password.

A connection uses its own 1Password item, its folder’s, or a global one, through the op CLI, and SSH keys go through the 1Password SSH agent. A password is copied to the clipboard, marked concealed, and cleared after 30 seconds unless you’ve copied something else since. xpnd never types it.

The one exception is RDP: that password goes straight into the session, and is never copied or typed. The remote never sees concealed clipboard items.

Plain YAML

Your config is plaintext YAML

Snippets and connections are YAML in ~/Library/Application Support/xpnd. Edit them by hand and xpnd reloads them, though saving from the app drops your comments. If a file can’t be read, xpnd leaves it alone and waits until it’s fixed.

Share them with your team: exports hold 1Password references only, and importing shows every connection, jump host and SSH option before anything is added.

Trust

It sees what you type. It keeps none of it.

  • Open source, MIT

    Every line is on GitHub under the MIT license, so you can read exactly what it does with what you type.

  • Native Swift

    SwiftUI and AppKit on macOS 14 or later. FreeRDP and OpenSSL ship inside the app, with their licences.

  • Keystrokes stay in memory

    To match keywords, xpnd keeps up to the last 128 characters you typed, in memory only. They’re never stored, logged, or sent anywhere.

  • Snippets stay in your file

    Snippet text is never logged. It lives in your own YAML file on your Mac, and xpnd puts your clipboard back after each expansion.

  • No passwords on disk

    xpnd stores no passwords or keys, only references to 1Password items and the public key of an SSH key item. A terminal program can’t read your clipboard either: its OSC 52 requests are denied.

  • Quiet on the network

    Besides the connections you open, its only network use is the update check, which you can turn off in Settings. There’s no analytics or telemetry.

Read the full privacy policy →
Changelog

Latest Release

v0.2.0
November 2026
View release →
Fixed
  • The mouse pointer in a Windows desktop tab is the right size with Retina on, instead of twice as big.
  • A Windows desktop tab no longer covers the tab bar, so you can switch tabs while it is showing.
  • The import preview lists the existing connections a Replace removes even when the file adds only folders.
  • The color picker's swatches show their colors in the open menu instead of white circles.
  • A folder string like ;dev is now deleted when you pick a row from its menu, not before the menu opens, so none of it is left behind in the terminal; Esc keeps what you typed.
  • With more than one 1Password account, Settings → Password Manager asks which is yours instead of guessing the first, and the status check now asks 1Password for access rather than reporting "not signed in" on a working setup.
  • Settings → Password Manager has a "Use the login for sudo" switch; turn it off to stop sudo falling back to the login password, so you can have no global sudo password without clearing the login.
Added
  • xpnd checks for updates and installs them, with signed releases from updates.xpnd.dev.
  • xpnd has its own app icon and menu bar symbol: a prompt with lines growing out of it.
  • A folder can have an icon (terminal, PC, desktop, server rack, network, cloud, shield, home or building) in its Details, to tell Linux and Windows folders apart at a glance. It shows in the sidebar, the folder menu and the launcher; subfolders don't inherit it.
  • A small green dot at the right of a sidebar row shows a connection that is connected in a tab.
  • A connection open in a tab can be disconnected from its sidebar menu or its Details (Disconnect, after the usual confirmation), even while it is still connecting, and Show Session jumps to its tab.
  • RDP connections: Windows desktops open as tabs beside SSH, with the domain login (DOMAIN\user or a separate domain) and password from 1Password, an RD Gateway, dynamic resize or a fixed size letterboxed in the tab, certificate and login prompts (asked again at once when the server rejects the login), and auto-reconnect after a lost connection. Settings → Remote Desktop and each connection's RDP options set the display, clipboard and sound. FreeRDP (Apache 2.0) is bundled.
  • A Windows desktop tab shares a per-connection drop folder as drive xpnd; Settings → Remote Desktop and each connection's RDP options turn it on or off, and Settings → Remote Desktop clears the folders never, on disconnect or after 7 days, or right away.
  • A toolbar at the top of a Windows desktop tab (point at the top edge, or ⌘⇧N) has Ctrl+Alt+Del, Win+R, full screen, display size (with "Set as this connection's default"), audio, clipboard sync, the drop folder, Reconnect, Disconnect and connection details.
  • Files dropped from Finder onto a Windows desktop are pasted into the window under the pointer; dropped on the toolbar they are copied into the xpnd drive.
  • Files and folders copied in Finder can be pasted into a Windows desktop tab.
  • Snippets are typed into a Windows desktop tab as keystrokes.
  • Snippets typed in Screen Sharing, VNC and RDP clients, and VMs are typed as keystrokes on the remote machine instead of pasted; Settings → General can type them everywhere.
  • A “+” on each snippet group row and “New Snippet” in its right-click menu add a snippet to it; double-clicking a folder or group opens or closes it.
  • Hold ⌘ while picking a connection in a folder menu, the launcher, or when double-clicking it in the window, to connect with sudo just that once, using its sudo credential, its folder's or the global one.
  • Folders and connections can have a color from a small palette; a connection without one takes the nearest folder's, and the name shows in that color in the sidebar, the folder menu and the launcher.
  • A built-in terminal: double-clicking a connection (or Connect) opens it as a tab on the right of the main window, and a tab can be duplicated or closed. The editor opens over the tabs as a card, and snippets expand inside tabs.
  • "xpnd (built-in)" is a choice in Settings → Terminal for when no terminal is in front; typing a connection's string while a tab is focused opens a new tab.
  • Settings → Terminal → Built-in terminal sets the font, size, colors, cursor, blink and scrollback.
  • Closing the window or quitting asks before it terminates open terminal sessions.
  • Connections to SSH and VNC servers, kept in folders and in a YAML file you can edit by hand.
  • Typing a connection's activation string connects, and typing a folder's opens a numbered menu of its connections.
  • A connection launcher, opened by Control-Option-Command-C, searches your connections.
  • Connecting types the command into a terminal that's in front, or opens Terminal, iTerm2, Ghostty, or your own command.
  • Connections can use 1Password items for the login, an SSH key, and the sudo password, set per connection, per folder, or for all of them.
  • Passwords are copied concealed and cleared after 30 seconds unless you've copied something else since, and are never typed.
  • Connections can jump through a typed host, or through another saved connection that uses a 1Password SSH key, add SSH options, and offer the sudo password after login.
  • Import and export connections as YAML, with a preview of what will run, and of existing connections a Replace removes or re-points, before anything changes.
  • The main window's sidebar search filters snippets and connections.
  • A broken connections.yaml is flagged in the HUD and the menu bar menu, and pauses only connection strings.
Changed
  • Drag connections, folders, snippets and snippet groups in the sidebar to reorder them or move them into another folder or group; dropping under a folder puts the item in it.
  • The sidebar adds folders, connections and snippet groups from a “+” beside each heading, and shows the version and a Settings button at the bottom.
  • xpnd is now a Dock app with a main window for connections and snippets, and it keeps running in the menu bar when you close it.
  • Snippets are edited in the main window instead of Settings.
  • Settings has General, Terminal, Password Manager, and Import/Export sections.
  • A broken snippets.yaml pauses only snippets, and the HUD says connection strings still work.
Full release history on GitHub →

Free, open source, one maintainer.

xpnd is MIT-licensed, and every line of it is on GitHub, so you can see exactly what it does with what you type. No accounts, no subscriptions, no ads.