Expando

Docs

Everything Expando does, in the order you’ll need it.

Getting started

Expando runs on macOS 15 or later and is free for 14 days with everything on. Download Expando. Open the disk image, drag Expando to Applications, and open it from there.

It lives in the menu bar. The first launch opens a short welcome that asks for two permissions, says what each is for, and starts working the moment they are granted, with no restart.

PermissionWhy
Input MonitoringTo notice that you typed an abbreviation. Expando watches for its own and nothing else, and no keystroke is written anywhere.
AccessibilityTo swap the abbreviation for the snippet in the app you are typing in, and to put the caret where the snippet says. On macOS 27 this list is called Device Control and Data Access.

A sample library is there to type at straight away. Open any app and type ;sig then Tab. To bring your own snippets, see Importing.

The menu

Click Expando’s mark in the menu bar. The top line says what it is doing, and any warning sits right under it: a permission that is off, an app holding the keyboard for a password, or Trial ended. Below that are Settings…, Pause Expansion, Search Snippets…, Open Editor, the Expansion Log, and Welcome Tour…, which opens the welcome again.

How a snippet fires

Three things decide it, and each can be set for the whole app, for a group, or for one snippet.

The prefix

A snippet stores sig; you type ;sig. The prefix is one setting rather than a character repeated on every snippet you own. A snippet can take the global prefix, take none at all (which is what an import does, so your existing abbreviations keep working unchanged), or bring its own.

The expansion key

Tab out of the box. Nothing else types a Tab in the middle of a sentence, so it cannot fire a snippet by accident, and Expando swallows it so it is never left in the text. Turn on Space, Return, punctuation or any other character in Settings, then Expansion. Anything except Tab stays in the text unless the group is set to drop it.

The timing

SettingWhat happens
When an expansion key is pressedThe usual one. The key stays in the text.
And drop that keyThe key goes with the abbreviation.
The moment it is typedNo key needed. Good for autocorrect-style snippets, and the reason a short abbreviation can shadow a longer one; Expando flags that in the list.

Tokens

Anything in braces is a token. A brace with no closing brace on the same line is just a brace.

TokenBecomes
{cursor}Where the caret ends up
{clipboard}Whatever you last copied
{date}, {time}Today, and now
{date yyyy-MM-dd}Any format you like
{date +3d}, {date +1w -2d MMM d}Date arithmetic, chainable. Units: s m h d w M y
{snippet:sig}Another snippet, by abbreviation or by name, eight deep
{1}, {name}Capture groups from a regex abbreviation
{clipboard|trim|uppercase}Modifiers, chainable: uppercase, lowercase, capitalize, titlecase, trim, urlencode, jsonescape, firstline

Fill-ins and forms

Any token Expando does not recognize is a question. Hi {Name}, asks for a name in a small form before it expands, with a live preview of the result.

Give a field a type in the editor and the form uses the right control: a single line, several lines, a list to pick from, or a date. An optional section is a block you can leave out:

Thanks.{#Calendar} My calendar is open from {date +1w}.{/} Best,

The section is ticked by default and takes its own fill-ins with it when you untick it.

Pressing keys

{key tab}, {key return}, {key up} and the rest are real key presses at the caret, not characters. That is what lets a code snippet expand and then walk the caret back into the block it just wrote.

A snippet that presses keys does not arm the undo window: the caret has moved somewhere only the app knows, so there is nothing safe to reverse.

Scripts

A snippet can be a shell command, an AppleScript or a JavaScript, and what it prints is what expands. Tokens render into the script before it runs, so a script can take a fill-in. Scripts are off until you turn them on in Settings, then Scripts & AI, because an imported library can carry one without anyone noticing.

AI snippets

A snippet can be an instruction to Anthropic or OpenAI, expanded into the answer. It uses your own API key, kept in the macOS Keychain, on your own account and your own bill. The call happens only while that snippet is expanding, and it sends only that snippet’s instruction. Expando has no key, no proxy and no server in the path. Turn it on in Settings, then Scripts & AI.

Importing

Open the editor and choose File, then Import… (it is in the editor’s … menu too). It reads TextExpander (an installed copy, .textexpander files, Settings.textexpander, the CSV from app.textexpander.com), Typinator (.typinatorset), Espanso (.yml), Alfred (.alfredsnippets), Raycast JSON, macOS Text Replacements, and any two-column CSV or TSV.

Import only ever adds. A snippet identical to one you have is skipped, one with an abbreviation you already use is added and tagged duplicate, anything Expando could not translate is tagged review with a note saying what, and a backup is taken before a single thing is written.

Export, under File too, writes Expando JSON, a TextExpander group file, CSV, plain text or Markdown, for the whole library or the groups you choose.

Coming from TextExpander

Your library comes across with its groups, labels, abbreviations, timing, case, fill-ins, scripts and formatting, and your abbreviations keep firing exactly as they do now unless you choose otherwise.

Getting your library out

  • TextExpander is on this Mac. There is nothing to export. Open the editor, choose File, then Import…, and pick TextExpander Settings: Expando reads the library where it is.
  • A library file somewhere else. In the same window, Search this Mac has Spotlight find every TextExpander file on the Mac, in Dropbox, iCloud Drive or an old backup.
  • Your snippets live on textexpander.com. Sign in at app.textexpander.com, open Import / Export, then Export, and download each group. Bring the files in with A file from another app.

Bringing it in

Import shows what it found before it writes anything, then asks one question: keep your abbreviations firing exactly as they do now, or move them onto Expando’s prefix and Tab. Keeping is the default. Nothing already in your library changes, and a backup is taken first.

If TextExpander is still running, both apps answer the same abbreviations. Expando’s menu says so, and offers to quit it or to stop it opening at login.

How its macros come across

In TextExpanderIn Expando
%|{cursor}, where the caret lands
%clipboard{clipboard}
%snippet:abbr%{snippet:abbr}, eight deep
%filltext%, %fill:name%A text field in the form
%fillarea%A field of several lines
%fillpopup%A list to pick from, choices and default in order
%filldate%A date field, in the same format
%fillpart% to %fillpartend%An optional section: {#Name} to {/}
%key:tab%, %key:return%{key tab}, {key return}: real key presses
%Y-%m-%d, %B %e{date yyyy-MM-dd}, {date MMMM d}
%@+3D, %@-1M{date +3d}, {date -1M}, and they chain
%^, %>, %<Arrow key presses, tagged review to check
ScriptsAppleScript, shell and JavaScript, once scripts are on in Settings, then Scripts & AI
Formatted snippetsFormatted, in groups that allow it
A subscribed groupImported, and kept read-only

A macro with no equivalent is kept as written and tagged review with a note saying what it was.

Sync and backups

Off by default. Settings, then Sync, has three choices.

ChoiceWhat happens
iCloudSnippet groups travel through the private iCloud database of your own Apple Account, encrypted end to end. Choose iCloud on each Mac, signed in to the same Apple Account; their snippets merge and nothing is replaced.
A Sync FolderPick a folder that Dropbox, Google Drive, iCloud Drive or a NAS keeps in step, then the same folder on your other Mac.
OffSnippets stay on this Mac only, backed up daily.

App rules, shortcuts, keys and other settings stay on each Mac. When two Macs change one snippet at once, the later change is used and the other waits under Set Aside until you choose. Nothing is thrown away to resolve a conflict.

Separately, and whatever sync says, the library is snapshotted daily and kept 30 days, plus once before every import. Settings, then About, then Restore… puts back any of those days, and backs up what is there now first.

Settings

Choose Settings… from the menu. How this page works, at the bottom of each page, explains it.

PageWhat is there
GeneralLaunch at login, how Expando looks (Match Mac, Light, or Dark), feedback after each expansion, the Search Snippets shortcut, and showing Expando in the Dock and the app switcher.
ExpansionThe prefix, the keys that fire a snippet, defaults for new groups, and the Expansion Log: how long it is kept, and clearing it.
Editor & Menu BarThe editor’s text, and the menu bar’s count.
AppsWhere snippets expand, and how text goes in, app by app.
SuggestionsPhrases you type again and again, offered as snippets. Off until you turn it on, and held in memory only.
PermissionsInput Monitoring and Accessibility (Device Control and Data Access on macOS 27), each with a Grant… button.
SynciCloud, a sync folder, or off.
LicenseYour key and Activate, Copy License Key, and Release This License… for moving it to a different Apple Account.
Scripts & AIScript and AI snippets, off until you turn them on.
AboutUpdates and Check Now, your library and its backups, and what leaves this Mac.

Your license

Open Settings, then License, paste the full key from your email, from EXPN- to the last character, and press Activate. It covers every Mac signed in to your Apple Account.

Expando says “That key is already in use on another Apple Account.” On the Mac where it was activated, open Settings, then License, and choose Release This License…, then activate here. A Mac signed in to a different Apple Account needs its own license.

Lost it? Have it sent again.

When it does not fire

Expando keeps a log of every attempt: what fired, in which app, by which mechanic, how long it took, and when it did not fire, why. It records lengths, never text. Open it from the menu: Expansion Log.

What you seeWhat it usually means
The menu bar mark has a warning badge, or nothing expands anywhereA permission is off; a macOS update can switch one off. Open Expando’s menu and click the warning at the top, or open Settings, then Permissions; each Grant… button opens its page in System Settings.
Expando is on in System Settings but nothing expandsIn System Settings, Privacy & Security, select Expando under Accessibility (Device Control and Data Access on macOS 27), press the minus button, then the plus button and add it again from Applications; do the same under Input Monitoring.
The menu says Trial endedOpen Settings, then License, paste your key and press Activate. Your snippets are untouched. More on your license.
The menu bar mark has a lock on itAnother app is holding the keyboard for a password. The menu names it and offers a way to release it.
The menu bar mark is dimmedExpansion is paused, or off in the app you are in. Choose Resume Expansion from the menu, or check Settings, then Apps.
One snippet does not fireUsually the key you pressed is not one of its expansion keys. The Expansion Log says so in as many words, and Settings, then Expansion, lists the keys.
Search Snippets never opensAnother app already holds that shortcut. Settings, then General, says which, and offers a free one.
A snippet is flagged in the listTwo snippets answer to the same trigger, or a shorter one set to expand immediately fires first. The menu’s trigger conflict row opens them.

Still stuck? The support page covers new Macs, lost keys and updates, and support@expando.app reaches a person.

Hear what’s new.

The Expando newsletter: new features as they land, and the occasional discount. Every email has a one‑click unsubscribe.