---
title: "Espanso Alternative on Mac: Text Expansion Without YAML Config"
description: "A free, local Espanso alternative for Mac with a visual snippet editor, AI text transforms, dynamic values, and built-in clipboard history and dictation - no YAML files to hand-edit."
date: 2026-05-28
author: "Ben Racicot"
tags: ["Espanso", "Text Expander", "Alternative", "Privacy", "macOS", "Productivity"]
type: "article"
canonical: "https://modelpiper.com/blog/espanso-alternative-mac"
---

# Espanso Alternative on Mac: Text Expansion Without YAML Config

> A free, local Espanso alternative for Mac with a visual snippet editor, AI text transforms, dynamic values, and built-in clipboard history and dictation - no YAML files to hand-edit.

## TL;DR

ToolPiper is a free, local Espanso alternative for Mac that replaces hand-edited YAML match files with a visual snippet editor. You get the same delimiter-and-abbreviation expansion plus dynamic values (;today, ;now, ;myemail) and case rules configured in a GUI, AI transforms Espanso has no built-in equivalent for (select text, tap right Command, get ;fix or ;formal applied by a local model), and bundled clipboard history and push-to-talk dictation in the same app. Import from TextExpander, Raycast, and CSV. Espanso is still the better call if you need Linux or Windows, or you prefer text-file config you can version in git.

Espanso is a good piece of software. It's free, it's open source, it runs on macOS, Windows, and Linux, and its scripting and extension model goes deeper than most paid expanders. If you've already got a `match/base.yml` open in your editor and you're happy there, this article isn't trying to talk you out of it.

But there's a specific moment that sends people looking for an Espanso alternative on Mac. You want to add a snippet, and the workflow is open a YAML file, get the indentation right, save, and trust that the daemon reloaded. For a quick `;addr` snippet that's fine. For a library you tweak weekly, hand-editing config files is friction you feel every time.

**ToolPiper is a free, local Espanso alternative that keeps the parts you like - delimiter-and-abbreviation expansion, dynamic values, local-first, no subscription - and swaps the YAML for a visual editor.** On top of that it adds something Espanso doesn't ship. AI transforms rewrite selected text with a model running on your own Mac. It also folds in clipboard history and push-to-talk dictation, so the three menu bar apps you'd otherwise run become one.

## How does text expansion work without config files?

Text expansion watches what you type, and when a trigger like `;addr` appears with whitespace or punctuation on both sides, it deletes the trigger and types the expansion in its place. ToolPiper does this through a visual editor instead of a config file - you add a snippet in a form, set its trigger and expansion, and it works immediately.

The mechanism is the same one Espanso uses. A background process monitors keystrokes, matches the longest defined trigger first, and replaces it. Espanso stores those triggers as YAML entries in match files. ToolPiper stores them in a local database you edit through a GUI. **The expansion engine is identical in spirit. The editing surface is the difference.**

Triggers match on whitespace and punctuation boundaries, so `;fix` never fires inside the word `;fixed`. That's the same flanking rule a careful Espanso config relies on, except you don't configure it - it's how the matcher works.

## What can ToolPiper do that Espanso can't?

ToolPiper adds AI text transforms with no Espanso equivalent: select text, tap the right Command key, and a local language model rewrites it in place. It also bundles clipboard history and push-to-talk dictation, and it gives you a visual editor for snippets and dynamic values that Espanso configures through YAML.

The headline difference is the AI transform. Select a paragraph, tap right Command (a press-and-release under 250 milliseconds), and the selected region gets replaced by a rewrite. Twelve transforms ship built in:

-   `;fix` - grammar and spelling
-   `;formal` / `;casual` - tone
-   `;concise` / `;expand` / `;simplify` - length and clarity
-   `;bullets` / `;summary` / `;tldr` - structure
-   `;active` - passive to active voice
-   `;email` / `;rewrite` - general reshaping

You can chain them. Type `;fix ;formal` and ToolPiper runs the fix first, then the formal rewrite, in document order, up to four stages. If any stage produces empty output the chain aborts and your original selection is preserved. There's no clipboard read anywhere in this path - the selection is the only input, which keeps the behavior predictable.

Where does the rewrite happen? It tries Apple's on-device model first (Foundation Models), and falls back to ToolPiper's [local language model](/blog/local-first-ai-macos) over loopback for longer or rejected inputs. Either way **the text never leaves your Mac.** Espanso can run shell scripts and call external commands, so a determined user could wire up a script that pipes text to a local model. ToolPiper ships that as a first-class feature with a muscle-memory trigger, not a scripting exercise.

## The visual editor vs YAML

Here's the part that actually changes the day-to-day. In Espanso, a snippet with a dynamic date looks like a YAML block with a `matches` key, a `trigger`, a `replace` string, and a `vars` section pointing at the `date` extension with a `params` format string. Get the indentation wrong and the daemon won't load it. It's powerful and it's also a config language.

In ToolPiper you open the snippet editor, type the trigger, type the expansion, and drop in a dynamic value from a list. Eleven dynamic utilities resolve at expand time:

-   `;today` - long date, `;date` - short date
-   `;time`, `;now`, `;iso`, `;timestamp` (ISO 8601)
-   `;name` - your full name, `;login` - short user name
-   `;myemail` - your license email
-   `;host` - computer name, `;app` - the frontmost app

Cursor placement uses a `%|` marker dropped right in the expansion text - type it where you want the cursor to land after expansion. Case behavior is a setting, not a script. Choose sensitive, ignore, or adapt (so `;sig` typed as `;SIG` can come back uppercased). Expand-when context rules live in the same form. None of it is hand-edited config.

The trade-off is real and worth naming. YAML config is text you can put in git, diff, share as a gist, and generate programmatically. A GUI database can't be version-controlled the same way. If your snippet library lives in a dotfiles repo and you like it there, that's a genuine reason to stay on Espanso. We're not going to pretend a visual editor wins that argument.

## Do I have to recreate my snippets by hand?

No. ToolPiper imports snippets from TextExpander (.textexpander files), Raycast (JSON export), and generic CSV, so an existing library transfers over including triggers and expansion text. Espanso's YAML files aren't a direct import format, so Espanso snippets are the one case you'd move over by hand or by converting to CSV first.

If you're coming to ToolPiper from TextExpander or Raycast, the import path is direct. Espanso is the gap. Its match files are YAML, and ToolPiper doesn't read them natively. The practical route is to export or script your Espanso triggers into a CSV (trigger, replacement) and import that. For a few dozen snippets, recreating them in the editor is also faster than it sounds, because you're typing them once and getting the dynamic-value picker for free.

## Why local matters for text you type all day

Snippets and transforms touch the most sensitive text you produce. Client emails, contract language, code, internal notes. An AI rewrite that ships that text to a cloud endpoint is making a choice on your behalf about where your words go.

ToolPiper's transforms run on your Mac. The model is local, the inference is local, and you don't have to take our word for it - **you can confirm it by watching network traffic while you fire a `;fix` on a paragraph and seeing nothing leave the machine.** That's the same posture Espanso users already value, because a local-first tool doesn't have a server to leak to. The difference is that ToolPiper extends that property to the AI rewrite, which is exactly the operation a cloud expander would phone home for.

Espanso shares this value, and that's the point. Both tools keep your text on your machine. We respect that overlap rather than claiming it as a wedge - the wedge is the editor and the AI, not privacy.

## One app instead of three

Run Espanso for expansion and you'll still reach for a clipboard manager and probably a dictation tool. ToolPiper carries all three.

The clipboard history keeps 200 items by default (configurable from 50 to 2000), with fuzzy search across the text, any OCR'd text, the source URL, and the source app. Copy a screenshot and Apple Vision OCRs it so the text inside becomes searchable. It tracks which app you copied from, including the browser tab URL for Safari, Chrome, Firefox, Arc, Brave, Edge, and Vivaldi. Password-manager autofills don't land in history - concealed, one-time-password, and transient pasteboard items are skipped, and 1Password, Keychain, LastPass, and Dashlane are on the capture-ignore list by default.

Push-to-talk dictation is the other piece. Hold a key, speak, release, and the transcribed text appears in the focused field. The speech-to-text runs on Apple's Neural Engine at roughly 140 milliseconds end-to-end, with the Parakeet engine processing around 210x realtime. It works offline and the audio stays on your Mac. We cover the engine in detail in [push-to-talk on Mac](/blog/push-to-talk-ai-mac) and [local voice transcription](/blog/local-voice-transcription-mac).

## When Espanso is the right call

Be honest about this. There are people who should stay on Espanso, and recommending ToolPiper to them would be wrong.

If you need Windows or Linux, Espanso is cross-platform and ToolPiper is macOS only. That's not a feature gap we're closing - the action snippets and selection capture depend on macOS Accessibility and CGEvent APIs that don't exist elsewhere. If your workflow spans a Mac and a Linux box and you want one expander on both, Espanso is the answer.

If you live in YAML and like it - version-controlled config, scriptable extensions, snippets generated by other tools - that's a real strength and a real reason to stay. ToolPiper's GUI is faster to edit by hand but it isn't a text file you can commit. And if you simply want a free, open-source, single-purpose expander with no AI and no extra surface area, Espanso does exactly that and does it well.

The case for switching is narrower and specific. You're on a Mac, you'd rather click than hand-edit YAML, and you want AI rewrites and clipboard and dictation in one local app. If that's you, ToolPiper fits. If it isn't, Espanso is a tool we respect.

## What ToolPiper doesn't do

Snippet expansion works in most standard text fields, but apps with non-standard text input - some terminal emulators, certain Electron apps, custom text engines - may not accept injected text. The clipboard and AI snippets still work there, you just paste manually.

App-aware suppression of snippet triggers isn't built yet. The clipboard capture skips password managers, and the action-snippet selection capture refuses secure and password text fields (it probes the focused element's accessibility role and fails closed if Accessibility is denied or times out at 250 milliseconds). But ordinary typed-trigger expansion doesn't yet suppress itself by app, so that's a real limitation today, not a settled capability.

And ToolPiper isn't cross-platform. Espanso wins that outright. We're a Mac tool by design.

## Get ToolPiper

ToolPiper is a free download from [modelpiper.com](https://modelpiper.com) (DMG). It requires macOS 26 or later and Apple Silicon (M1+). It's not on the Mac App Store because Accessibility and CGEvent APIs are incompatible with the App Store sandbox - the same reason TextExpander, Raycast, and Alfred ship outside it. Import your TextExpander or Raycast library from Settings, or start fresh in the snippet editor.

_This is part of a series on [text expansion and clipboard tools for Mac](/workflow/text-clipboard) and the broader pillar on [local-first AI on macOS](/blog/local-first-ai-macos). If you're weighing the whole category rather than Espanso specifically, the [local TextExpander alternative](/blog/text-expander-mac-local) walkthrough covers the same engine from the subscription-tool angle._

## FAQ

### Is there an Espanso alternative with a GUI?

Yes. ToolPiper is a free, local Espanso alternative that uses a visual snippet editor instead of YAML match files. You add a snippet in a form - trigger, expansion text, dynamic values from a picker, case rules from a dropdown - and it works immediately, with no config file to indent correctly or daemon to reload. It also adds AI text transforms, clipboard history, and push-to-talk dictation that Espanso doesn't bundle.

### Does ToolPiper require config files?

No. ToolPiper has no YAML or text config to hand-edit. Snippets, dynamic values, case-sensitivity modes, and expand-when context rules are all set through a visual editor. The trade-off is that the snippet library lives in a local database rather than text files, so you can't version-control it in git the way you can an Espanso config. If versioned config matters to you, that's a reason to prefer Espanso.

### Is Espanso free?

Yes. Espanso is free and open source under a permissive license, and it runs on macOS, Windows, and Linux. Those are genuine strengths - if you need cross-platform support or want to version your snippet config in git, Espanso is likely the better fit. ToolPiper is also a free download but is macOS only and not open source. The wedge between them is the editing surface (visual vs YAML) and the AI transforms ToolPiper adds, not the price.

### Can ToolPiper import my Espanso snippets?

Not directly. ToolPiper imports from TextExpander (.textexpander), Raycast (JSON), and generic CSV, but Espanso's match files are YAML and aren't a native import format. The practical route is to export or script your Espanso triggers into a CSV of trigger and replacement pairs and import that. For a small library, recreating snippets in the visual editor is often faster than converting.

### How do AI text snippets work in ToolPiper?

Select text, tap the right Command key (a press and release under 250 milliseconds), and a local language model rewrites the selection in place. Twelve transforms ship built in (;fix, ;formal, ;casual, ;concise, ;summary, and more) and you can chain them, like ;fix ;formal, up to four stages. ToolPiper tries Apple's on-device model first and falls back to ToolPiper's local model over loopback. The selection is the only input - nothing is read from the clipboard and nothing leaves your Mac. Espanso has no built-in equivalent.

### Does ToolPiper work alongside Espanso, or do I have to choose?

You can run both, but having two expanders watching your keystrokes invites trigger collisions if they share abbreviations. The cleaner setup is to pick one. If you want a visual editor plus AI transforms plus clipboard and dictation on a Mac, ToolPiper covers all of it. If you need Linux or Windows support or version-controlled YAML config, keep Espanso. Most people switch fully rather than layering the two.

### Why isn't ToolPiper on the Mac App Store?

ToolPiper uses Accessibility APIs to detect snippet triggers and inject expanded text, and CGEvent taps for global key monitoring. Both are incompatible with the Mac App Store sandbox. This is the same reason TextExpander, Raycast, and Alfred are distributed outside the App Store. ToolPiper is a free direct download (DMG) from modelpiper.com.
