TextExpander gives you 5 active snippets for free, then charges $60 a year, or $6 a month, for Pro. Type ;addr, get your address. Type ;sig, get your signature. It's a macro engine, and a good one, with date math, conditional sections, and script snippets on Pro. Past five active snippets, though, it's a subscription for text replacement.
I ran the math on that subscription before writing this. Sixty dollars a year, every year, once your library outgrows five active snippets. The expansion engine is solid and the cloud sync is genuinely useful. The recurring cost is the tension that sends people looking for an alternative.
ToolPiper does the expansion on a free download, imports your TextExpander library on day one, and adds AI transforms that run on your Mac. Type a trigger, get text - same muscle memory. Select a paragraph, tap the right Command key, and a local language model rewrites it. That second part is outside TextExpander's AI, which suggests snippets you already saved rather than rewriting your text.
Last updated October 2026. Import behavior verified against the shipping importer June 10, 2026. TextExpander plans and pricing re-checked October 3, 2026.
TextExpander has real strengths, too. If you sync snippets across a Mac, a Windows laptop, an iPhone, and a browser, or you run a shared team library, the section on what TextExpander does well covers them.
What does a text expander actually do?
A text expander watches what you type, recognizes short abbreviations you've defined, and replaces them with longer text. Type a trigger like ;addr and the expander deletes those characters and inserts your full mailing address in their place.
That's the whole concept. The value is in the time saved typing things you type constantly, like addresses, signatures, boilerplate replies, code snippets, and meeting links. A good text expander matches the longest trigger first (so ;email and ;em don't collide), handles cursor placement (drop a marker where you want the cursor to land after expansion), and resolves dynamic values like today's date at the moment you expand.
ToolPiper does all of that. Typed delimiter-plus-abbreviation triggers, longest-trigger-first matching, cursor placement via a %| marker, and case-sensitivity modes (sensitive, ignore, or adapt to how you typed the trigger). The trigger has to be flanked by whitespace or punctuation to fire, so a snippet bound to ;fix never triggers in the middle of the word ;fixed.
How is ToolPiper different from TextExpander?
ToolPiper is a free download that does the same trigger-based text expansion as TextExpander, then adds two things TextExpander has no equivalent for. It rewrites selected text using a language model on your Mac, and it ships a built-in clipboard manager with history and OCR. TextExpander's focus is different: sync across devices and shared team libraries.
The static-expansion overlap is close to complete. Where the two diverge is the AI layer and the pricing model.
The AI transform is the real wedge. Select a sentence, tap the right Command key (a press-and-release under 250ms), and ToolPiper replaces the selection with a rewritten version. The selection goes to a local language model over a loopback connection on your Mac. The snippet's prompt is sent verbatim as the system message, and the model's output replaces your selection. Twelve transforms ship built in. The set covers ;fix, ;formal, ;casual, ;concise, ;expand, ;simplify, ;bullets, ;summary, ;tldr, ;active, ;email, and ;rewrite. You can chain them - ;fix ;formal runs in document order, fix first then formal, up to four stages, and aborts on empty output so a bad transform never eats your text. The full transform list and chaining rules are in our AI text snippets deep dive.
TextExpander's snippets insert what you saved, with date math, fill-ins, conditional sections, and script snippets on Pro. Its AI, added in 2026, runs Gemini Nano inside Chrome to suggest saved snippets that fit the page, and TextExpander's stated principle is to retrieve vetted content rather than generate new text. So there's no "clean up this paragraph" or "make this more formal" in its snippets. That's a deliberate choice for teams that need approved wording, and it makes TextExpander a different category of tool. ToolPiper happens to do both categories in one app.
What dynamic values does ToolPiper support?
ToolPiper resolves 11 dynamic values at the moment you expand a snippet: the date in several formats, the time, your name, your email, the computer name, and the frontmost app name. These are computed live, not stored.
Type ;today for the long-form date, ;date for short, ;time for the current time, ;now for date and time together, ;iso or ;timestamp for ISO 8601, ;name for your full user name, ;login for the short user name, ;myemail for your license email, ;host for the computer name, and ;app for whatever app is in front. Drop any of these inside a larger snippet and they resolve when you fire it. A meeting-note template that stamps the date and the app you're in writes itself.
Can I import my TextExpander snippets?
Yes. ToolPiper imports TextExpander's .textexpandersettings export directly. Triggers, expansion text, group abbreviation prefixes, case-sensitivity modes, and expand-when behavior all carry over, and re-importing the same file adds zero duplicates.
This is the part that makes switching low-risk. Export your library from TextExpander (you get a .textexpandersettings bundle), then pick it in the Snippets pane import dialog or drag it onto the pane. Detection is by file content, not extension - the same importer auto-detects eight formats, covering TextExpander, Raycast, Alfred, Espanso, Apple Text Replacements, ToolPiper's own JSON, CSV, and TSV. If you came to TextExpander from Raycast snippets at some point, ToolPiper reads Raycast's JSON export too, and if you're consolidating from more than one tool, every library lands in the same place.
The TextExpander parser handles the fiddly parts. Group abbreviation prefixes and suffixes are applied to every trigger, abbreviationMode maps to case sensitivity, and expandAfterMode maps to expand-when behavior. Placeholders get one of three counted outcomes. Cursor markers and simple date or time placeholders translate to ToolPiper's %|, %date, and %time. Patterns with no equivalent stay in the snippet as literal text and get counted. Anything the importer can't represent honestly skips the whole snippet with a named reason. A literal % in your text is escape-protected, so a snippet containing "100% done" can never accidentally fire a macro.
Re-importing the same file adds zero duplicates. The merge dedupes on a content fingerprint (trigger, kind, expansion text, prompt, and voice phrases, with normalized line endings), so you can re-run an import without cleanup afterward. Two snippets that share a trigger but differ in content both import and get counted as a trigger conflict. Nothing is silently dropped - the import summary reports the detected format, snippets imported, duplicates skipped, trigger conflicts, and a per-reason count of anything skipped. Caps are 32 MB per file and 10,000 snippets per import, well past any personal library.
What doesn't import from TextExpander?
Three TextExpander snippet types do not import into ToolPiper. Fill-in forms, script snippets (AppleScript, shell, JavaScript), and nested %snippet: references are each skipped with a named, counted reason in the import summary instead of being imported as broken text.
We'd rather skip a snippet cleanly than import something that types garbage. A fill-in form without its form UI is a template full of dead placeholders, and a shell script pasted as plain text into an email is worse than absent. The importer counts every skip by reason, so you know exactly which snippets to recreate by hand. The same goes for random-value placeholders and regex-style triggers - whole-snippet skips, named in the summary.
How does the AI rewrite stay private?
The AI rewrite runs on your Mac. ToolPiper sends the selected text to a local language model over a loopback connection on your Mac, gets the rewrite back, and replaces your selection. The text never leaves the machine, and you can confirm that by watching network traffic while you trigger a transform.
This matters more than it sounds like it should. The obvious alternative to ToolPiper's local transforms is pasting your text into ChatGPT or Claude to clean it up. That works, but every paragraph you paste is a paragraph that travels to a server you can't audit. For a casual sentence, who cares. For a client email, a contract clause, or anything with a name in it, the calculus changes.
With ToolPiper, the transform runs locally, so the question of what a remote service does with your text doesn't come up - there's no remote service. We're not asking you to trust a privacy policy. The verification path is a packet inspector. Run one, trigger a ;fix, and confirm that no request carries your text. One native app, no cloud, no Docker, no Python, no API keys - and you can verify it yourself at localhost:9998. The structural fact about cloud rewriting tools is that the text has to arrive at their servers for them to process it. We let you check that ours doesn't.
One precise note, because we'd rather be exact than oversell. The action-snippet selection capture checks the focused element's accessibility role and refuses to read secure or password text fields, failing closed if accessibility access is denied. The action pipeline never reads your clipboard either - the selection is the only input. App-aware suppression for typed snippet triggers is not built yet, so we don't claim snippets never fire inside a password manager. The action-snippet path is the one that probes secure fields today.
What else does ToolPiper do that TextExpander doesn't?
ToolPiper bundles a clipboard manager and push-to-talk dictation, neither of which TextExpander has. The clipboard manager keeps a searchable history (200 items by default, configurable from 50 to 2000) with image OCR and source-app tracking, and the dictation drops spoken text into the focused field on-device.
It's a clipboard manager. ToolPiper keeps a browsable history of what you copy - 200 items by default, configurable from 50 up to 2000 - with fuzzy search across the text, any OCR-extracted text, the source URL, and the source app. Copy a screenshot and Apple Vision OCRs it so the text inside the image becomes searchable. It tracks where you copied from, including the browser tab URL for Safari, Chrome, Arc, Brave, Edge, Opera, and Vivaldi. Items auto-categorize into eight types: text, URL, email, code, JSON, file path, color, and number.
The history is privacy-aware on capture. Items the copying app flags as concealed, transient, or auto-generated, the markers password managers set when they copy a secret, are skipped, and 1Password, Keychain Access, LastPass, and Dashlane are on the ignore list by default, so your password-manager copies don't pile up in clipboard history.
There's also push-to-talk dictation. Hold the right Option key, speak, release, and the transcript lands in the focused field at 127-173ms end-to-end in our testing, running on Apple's Neural Engine. The push-to-talk, voice chat, and snippet expansion paths are interlocked so they can't collide. That's a different workflow than text expansion, but it's the same idea - get text into a field faster - and it's covered in our push-to-talk dictation writeup. None of this is in TextExpander's scope, which is fine. TextExpander is a focused expansion tool. ToolPiper bundles the adjacent jobs.
What does TextExpander do well?
TextExpander is built for sync and teams. It syncs your library across Mac, Windows, Chrome, and iPhone and iPad on every plan, runs shared team libraries with roles, Snippet Requests, and SSO, and has a permanent free plan with 5 active snippets. Pro is $6/month or $60/year; Business is $12/month or $120/year.
Three strengths stand out.
It's everywhere you type. TextExpander runs on Mac, Windows, Chrome (including Chromebooks), and as a keyboard on iPhone and iPad, with sync keeping your snippets identical everywhere, the free plan included. If you type the same snippets on a Mac at work and a Windows machine at home, or you need them on your phone, that reach is the point.
It governs a team library. Shared organization libraries let a whole team pull from one source of truth, so canned responses stay consistent and update centrally. Roles, Snippet Requests, activity history, and organization analytics sit on top, with SSO and SCIM on Enterprise, and TextExpander reports SOC 2, SOC 3, and HIPAA compliance.
It's a managed service with AI hooks. The library is backed up and managed in a TextExpander account, a hosted MCP server in early access lets Claude, ChatGPT, and Copilot Studio list, create, and update snippets with the account's existing permissions, and AI Recommendations in Chrome run on device.
ToolPiper is built for a different case: one person on a Mac who wants fast expansion, on-device AI rewrites, clipboard history, and dictation in one app, with no annual bill for the expander.
ToolPiper vs TextExpander
Here's the side-by-side, with TextExpander's plans as of October 3, 2026.
Get ToolPiper
ToolPiper is a free download (DMG) - grab it from the ToolPiper page. It needs macOS 26 or later and Apple Silicon (M1 or newer). It's not on the Mac App Store because the Accessibility and CGEvent APIs that text expansion needs aren't compatible with the App Store sandbox - the same reason TextExpander, Raycast, Alfred, and Keyboard Maestro all ship outside it. Install it, grant Accessibility once, import your .textexpandersettings export, and your library is live.
This is part of a series on text, clipboard, and snippet workflows on macOS and the broader case for local-first AI on macOS. If you want the deeper dive on the expansion engine itself, see local text expansion on Mac.
