One snippet, the right details every time
Add today's date, a deadline next week, what you just copied, a name you type in, or another snippet. Retext fills them in as the snippet expands.
Dynamic fields come with every plan, Free included
Every field
Examples assume today is Wednesday, October 28, 2026, on a Mac set to US English.
{date}Today's date→ October 28, 2026
The long date, written the way your Mac's region settings write it.
{date:short}Today's date, short→ 10/28/26
The short date in your region's format.
{date+7}A date in the future→ November 4, 2026
Any number of days ahead. {date+1} is tomorrow and {date+30} is 30 days out.
{date-1}A date in the past→ October 27, 2026
Any number of days back. Add :short for the short form, as in {date+14:short}.
{time}The current time→ 3:45 PM
Hours and minutes, in your Mac's 12- or 24-hour setting.
{day}Day of the week→ Wednesday
The full name of today's weekday.
{clipboard}Your clipboard→ whatever text you last copied
The text on your clipboard when the snippet expands. Your clipboard is left as it was afterwards.
{fill:Name}A fill-in prompt→ what you type in the form
Retext asks for each fill-in before it pastes. Use the same label twice and you're asked once; both spots get your answer.
{cursor}Where the cursor lands→ (nothing; your cursor goes here)
After expanding, the cursor sits here instead of at the end, ready for you to keep typing.
{snippet:sig}Another snippet→ the full text of ;sig
Drops one snippet inside another. Use the trigger without the semicolon.
Worked examples
Copy any of these into Retext. In the results, | marks where your cursor lands.
Meeting follow-up
;fuOne fill-in for the name, a date two days out, your signature from ;sig, and the cursor waiting where the personal line goes.
Snippet
Hi {fill:First name},
Thanks for your time on {day}. As promised, I'll send the proposal by {date+2}.
{cursor}
{snippet:sig}What gets typed
Hi Priya, Thanks for your time on Wednesday. As promised, I'll send the proposal by October 30, 2026. | Best, Sam Rivera
Invoice terms
;termsDate math does the counting, so the due date is right every time.
Snippet
Invoice date: {date}
Payment due: {date+30} (net 30)
Reference: {fill:Invoice number}What gets typed
Invoice date: October 28, 2026 Payment due: November 27, 2026 (net 30) Reference: INV-1042
Quote what you copied
;reCopy a line from an email or a chat, type ;re, and reply right under the quote.
Snippet
You wrote:
> {clipboard}
{cursor}What gets typed
You wrote: > Can we move the launch to Friday? |
Support reply with a shared closing
;refundEvery reply ends with ;support-close. Change that one snippet and every reply that uses it changes too.
Snippet
Hi {fill:Customer name},
I've refunded order {fill:Order number}. You'll see it on your statement in 5 to 10 business days.
{snippet:support-close}What gets typed
Hi Jordan, I've refunded order 88213. You'll see it on your statement in 5 to 10 business days. Anything else, just reply here. The Acme Support Team
Timestamped note
;logA quick stamp for changelogs, call notes and standups.
Snippet
[{date:short} {time}] {cursor}What gets typed
[10/28/26 3:45 PM] |
Status update
;wkThe skeleton you'd retype every Friday, with the date filled in.
Snippet
Week ending {date+2:short}
Done:
- {cursor}
Next:
-
Blocked on: {fill:Blocker, or none}What gets typed
Week ending 10/30/26 Done: - | Next: - Blocked on: none
The fine print
How fields behave at the edges.
Nest up to five deep
A snippet can include another, which can include another, five levels down. Reuse one as often as you like in the same snippet. A snippet that includes itself, or a trigger that doesn't exist, stays as typed so you can spot it.
One cursor
If a snippet has more than one {cursor}, the first one wins and the rest are removed.
Your Mac's formats
Dates and times follow your Mac's language and region settings, so a UK Mac writes 28 October 2026.
Fill-ins in the snippet you type
Put {fill:…} fields in the snippet you trigger. Fill-ins inside a nested snippet aren't asked for, so keep shared pieces like a signature fill-in free.
Previewed by autocomplete (beta)
With autocomplete on, ghost text shows a dynamic snippet the way it will read: today's date filled in, and fill-ins as [Name].
Converted on import
Import from TextExpander, Espanso, Raycast or Alfred and their placeholders become these fields wherever they mean the same thing. The import preview lists anything that didn't convert.
Questions? Answers.
What are dynamic fields?
Placeholders in curly braces that Retext replaces as the snippet expands. {date} becomes today's date, {clipboard} becomes what you copied, and {fill:Name} asks you for a name. The same snippet comes out right every time you use it.
Do fill-ins ask every time?
Yes. Each time a snippet with {fill:…} fields expands, Retext shows a small form with one box per label, then pastes the finished text where you were typing. Cancel the form and nothing is pasted.
Can I add or subtract days from a date?
Yes. {date+7} is a week from today and {date-1} is yesterday. Use any whole number of days, and add :short for the short format: {date+30:short}.
What happens with {snippet:…} if the snippet doesn't exist?
The field stays in the text exactly as written, so you can see what's missing. The same goes for a snippet that includes itself and for anything nested more than five levels deep.
Does {clipboard} change my clipboard?
No. Retext reads the text on your clipboard, pastes the finished snippet, and puts your clipboard back.
Do dynamic fields work in team snippets?
Yes. Team snippets are expanded the same way as your own, fields and all.
How Retext compares
See how Retext's fields compare with other text expanders for Mac.
Stop retyping the date
Download Retext, paste in one of the examples above, and type its trigger.