Snippets

Paste short texts by keyword, placeholders filled in

palupdated 2026-10-27ProductivityComes with pal󰌹1 deep link

Open in pal

Comes with pal, so a new install already has it; the button finds it in pal again if you removed it. This page can't see what your pal has installed.

Snippets: Snippets by name, the keyword as a tag, the first line as the subtitle; dynamic ones (braces) fill placeholders when pasted
Snippets by name, the keyword as a tag, the first line as the subtitle; dynamic ones (braces) fill placeholders when pasted
Snippets: cmd+i shows the whole text under its name, the keyword and dynamic as chips
cmd+i shows the whole text under its name, the keyword and dynamic as chips
Snippets: Paste into the app in front, copy, edit or delete a snippet
Paste into the app in front, copy, edit or delete a snippet
Snippets: Create Snippet: a name, a keyword and the text, its placeholders explained under the field
Create Snippet: a name, a keyword and the text, its placeholders explained under the field
1 of 4

What it does

Short texts you paste by keyword, with the date, the clipboard, the selection and more filled in. Create and edit them in the panel, import or export JSON, and on macOS expand a keyword as you type in any app.

  • enter pastes the snippet into the app in front, cmd+c copies it
  • Placeholders for the clipboard, the selection, Finder files, the date and time (any format, with offsets like +1d) and a uuid
  • One snippet can include another with {snippet name=sig}
  • Find a snippet by name or keyword; create and edit it in a form
  • On macOS, type ;sig in any app to expand it in place, never in terminals or password fields
  • Import and export as JSON; Raycast's snippets export is read as is

Palettes 1

  • Snippetssnippetslist

    Every snippet by name and keyword, plus Create Snippet.

    • ↵Paste into the app in front
    • ⌘CCopy
    • ⌘EEdit
    • ⌃XDelete

Actions

  • PasteHides, then pastes the filled text into the app in front.↵
  • CopyThe filled text onto the clipboard.⌘C
  • EditThe form, filled in.⌘E
  • DeleteAsks first.⌃X
  • Create snippetThe form, on the Create row.↵
  • Import…A JSON file's snippets, the ones you already have skipped.↵
  • Export…Your snippets to a JSON file.↵

Settings

No settings. It works out of the box.

The README

Everything Snippets does, key by key, from the extension's own README.md

Snippets

Short texts by name and keyword, kept in the extension's storage and edited in the panel. Enter pastes the text into the app that was in front, cmd+c copies it instead. The keyword is a row keyword, so typing sig finds the signature; it shows as a tag, the first line of the text is the subtitle, and the whole text is in the detail pane (cmd+i) under its name, the keyword and dynamic as chips.

Placeholders in the text are filled in when it is pasted or copied:

placeholder becomes
{clipboard} the newest text on the clipboard
{selection} the text selected in the app in front (the clipboard when nothing is)
{files} the files selected in Finder, one path per line ({files sep=", "} joins them otherwise); nothing when Finder is not in front or nothing is selected
{date} today, YYYY-MM-DD
{time} now, HH:MM
{datetime} both, with a space between
{uuid} a fresh UUID, a different one per occurrence
{snippet name=sig} another snippet's text (by name or keyword), its own placeholders filled; one level deep
{cursor} where the caret lands after an expansion (below); dropped by a paste from the panel

{date}, {time} and {datetime} take two attributes: format=, with the tokens YYYY YY MM DD HH mm ss ddd (Wed) MMM (Sep) and anything else written as it is ({date format=DD.MM.YYYY}, {time format=HH:mm:ss}, quotes around a format with spaces: {date format="ddd D MMM"}), and offset=, a signed count of days, weeks, hours or minutes applied first ({date offset=+1d}, {date offset=-2w}, {time offset=+3h}, {datetime offset=-90m format=HH:mm}).

Anything else in braces is left as it is, so a snippet of code keeps its braces. A snippet with placeholders carries a dynamic accessory and a braces icon. The grammar is the SDK's (expand in @zcag/pal), shared with quicklinks ({selection} in a url) and obsidian (an appended line).

The palette is indexed, so a snippet's name and keyword find it from the root, and the rows around the list are its tools:

row what
Create Snippet a form: name, keyword (one word, no spaces), text
Import Snippets a form with one path field; reads a JSON array of {name, text, keyword?} (Raycast's export too), skips a snippet whose name and text you already have, says how many came in
Export Snippets writes your snippets as a JSON array (no ids) to the path, ~/Downloads/pal-snippets.json by default, replacing the file

A keyword with a space in it is refused with the message under the field, as is a path that cannot be read or written.

Marked snippets copy together (the texts one per line) or are deleted in one go; Paste and Edit are one snippet's.

Keyboard

keys action
enter Paste: hides, then pastes the filled text into the app in front
cmd+c Copy the filled text
cmd+e Edit: the form, filled in
ctrl+x Delete, after a confirm
cmd+i The detail pane, with the whole text

Setup

No settings. The snippets live in <data dir>/pal/storage/snippets.json (Storage in the Extensions guide), shared by every config profile.

Paste is a synthesised Cmd+V, which macOS only delivers from a process on the Accessibility list: without the permission pal shows the system prompt once per run and a toast, "Paste needs Accessibility", instead of half-doing it. On Linux the paste is Ctrl+V through wtype, else ydotool (which needs ydotoold running); with neither, paste fails and the toast says so. Copy needs nothing.

An import file looks like this:

[
  { "name": "Email signature", "keyword": "sig", "text": "Best,\nAda" },
  { "name": "Today", "keyword": "today", "text": "{date} {time}" }
]

Expansion: the keyword typed in any app (macOS)

With the Text expansion feature on ([features.expansion] enabled = true, Features), a keyword typed in any other app is replaced by its snippet in place: ;sig becomes the signature where it was typed, placeholders filled (the plain forms: format=, offset= and {snippet} are the panel's, an expansion leaves them as written), the clipboard left as it was, {cursor} placing the caret. Off by default. pal watches the keys typed in other apps (needs Input Monitoring) and types the replacement (needs Accessibility, like Paste). The prefix is a setting (;, :, or none for the bare keyword at a word start); terminals and password managers never expand (exclude_apps), nor does a secure text field; the HUD says "Expanded " (hud). The snippets are the feature's: this palette reads and writes them through core/snippets.{list, set}. Not available on Linux, where no portable keyboard tap exists: the palette's Enter and pal://snippets/paste?name=sig are the ways there.

What it does not do

  • No rich text: what is pasted is plain text.
  • No expansion on Linux (above).

Platforms

macOS and Linux. Paste needs Accessibility on macOS and wtype or ydotool on Linux; everything else is the same on both.