Tinycast
Features

Snippets

Reusable Markdown templates with placeholders, arguments and keyword expansion.

A snippet is a piece of text you reuse, stored as a plain Markdown file you can edit by hand.

Paste one from the launcher, or type its keyword in any app and have it expand in place.

Settings → Snippets holds the feature switch. It ships off.

SettingDefault
Enable snippetsOff
Show in launcherOn

The enable switch is also the consent for keystroke matching — there is no separate toggle. It explains itself before turning on, then requests Accessibility.

Turning Show in launcher off hides the section but keyword expansion keeps working.

snippetsEnabled is deliberately excluded from settings backups, so importing a file can never enable keystroke listening.

The file format

One Markdown file per snippet, in Tinycast's Application Support folder. Frontmatter is optional.

---
name: "Meeting Notes"
keyword: "!notes"
enabled: true
show_confirmation: false
---

## {date format="EEEE, d MMMM"}

Attendees: {argument name="Attendees"}

{cursor}

name defaults to the filename, keyword is optional, enabled defaults to true, and show_confirmation defaults to false.

Strings must use double quotes. Keys are case-insensitive with no aliases; unknown keys, unquoted strings, duplicates and non-lowercase booleans are rejected by name rather than ignored.

Everything after the closing --- is the body, preserved byte for byte — blank lines, line endings, Unicode and any later --- lines.

Each channel has its own folder, so stable and beta never share files.

Placeholders

TokenGives
{clipboard}The clipboard as plain text
{clipboard offset=1}The Nth most recent clip
{selection}Selected text from the app you were in
{date} {time} {datetime}In your locale
{day}Weekday name
{uuid}A fresh UUID per token
{date format="yyyy-MM-dd"}Any date format
{date locale="fr-FR"}Another locale — cannot combine with format
{time offset="+3h +30m"}Signed offsets: m h d M y
{argument}Prompts, named "Argument"
{argument name="Recipient"}A named prompt
{argument default="Hi"}Optional — expands without prompting
{argument options="a, b, c"}Prompts with a picker
{snippet:Name}Another snippet, inline
{cursor}Where the caret lands

{selectedText} is accepted as an alias for {selection}.

Modifiers

Pipe them left to right: {clipboard | trim | uppercase}

Available: uppercase · lowercase · trim · percent-encode · json-stringify · raw

{cursor} and snippet references take no modifiers.

When a token is wrong

An unparseable token is left in the output exactly as written — never silently dropped. If you see {arguemnt} in your pasted text, that is the typo telling you about itself.

{browser-tab} and {calculator} are not supported.

Limits

Arguments are unique and prompted in first-appearance order, including ones inside referenced snippets. Inserted values are literal — token-shaped text in a value is not re-expanded.

Snippet references are case-insensitive and nest five levels deep with cycle detection. A missing, cyclic or too-deep reference leaves the token visible.

All {cursor} tokens are removed; the first one wins.

Keyword expansion

With a keyword set, typing it in any app expands the snippet in place.

  • Keywords match case-insensitively, by longest suffix, so a more specific keyword wins.
  • The typing buffer holds at most 256 characters and resets on app or session change, on Secure Event Input, on navigation and modifier shortcuts, and after 15 seconds of inactivity.
  • Before deleting the keyword and before inserting, every gate is re-checked. A failed gate leaves what you typed untouched.

Status is shown plainly in Settings: Off, Needs Accessibility, or Active.

How the text is delivered

The preferred path is a single atomic Accessibility replacement.

Editors that grant Accessibility but expose no writable text fall back to synthetic keystrokes. Short single-line expansions — up to 100 characters — use Unicode key events. Longer or multiline text uses a temporary paste, but only when your existing clipboard's first item is restorable plain text, and the change count is checked before restoring so a newer copy is never overwritten.

An image, empty or unreadable clipboard uses the keystroke path instead. The clipboard poller ignores these temporary writes, so they never enter your history.

In the launcher

Enabled snippets appear in launcher search while Show in launcher is on, and both the name and the keyword are searchable, scored in the same band as an app name.

pastes the snippet.

The editor

Drafts live in memory and write only on Save. New creates no file until the first save.

Saving over a file that changed underneath is rejected as a conflict, not silently merged. Reopening shows what is actually on disk.

Show confirmation is per snippet and off by default. When on, a brief pill names the snippet after a confirmed insertion. Failed, cancelled and prompt-cancelled expansions never show it.

On this page