Installing the Keyboard

Text Preset works as a custom iOS keyboard. You need to enable it in your device Settings once — after that it's available in every app.

1

Open the Text Preset app

Tap the keyboard icon on the home screen and follow the setup guide shown on first launch.

2

Go to iOS Settings → General → Keyboard → Keyboards

Tap Add New Keyboard… and select Text Preset from the list.

3

Enable Full Access

Tap the Text Preset entry and toggle on Allow Full Access. This is required for iCloud sync and usage statistics. Text Preset does not send your data to any server.

4

Switch to Text Preset in any app

Tap any text field to open the keyboard, then hold the globe (🌐) icon and select Text Preset.

Your First Phrase

Open the Text Preset app, tap the + button, type your text, and save. That's it — your phrase is immediately available in the keyboard.

You can also save any text you copied from another app: switch to Text Preset keyboard and tap the Save as phrase button that appears in the header.

Creating & Editing Phrases

Each phrase is a block of text that can contain plain text, line breaks, and any number of variables. Tap a phrase in the list to open the editor.

Alias

An alias is a short identifier for a phrase that lets you reference it from other phrases using {{@phrase=alias}}. Set it in the editor below the phrase text. Aliases must be unique across your library.

Inserting Phrases

In the keyboard, tap a phrase chip to insert it directly. If the phrase contains variables, a guided sheet will walk you through each one before inserting.

  • Tap once — instant insert (no variables) or opens the variable fill-in sheet
  • Long-press — shows a floating preview; hold and release to insert, or use Smart Rewrite (Pro)
  • Copy from the main app — tap the phrase row → long-press → Copy

Abbreviation Expansion

Type a phrase's alias directly in the keyboard, followed by a space, and the full phrase text is inserted automatically — just like TextExpander or Typinator.

Enable Abbreviation Expansion in Settings → Keyboard. Then set an alias on any phrase (e.g. ;sig) — typing ;sig followed by a space will replace it with the full phrase text.

The expansion triggers on the space character and works anywhere the Text Preset keyboard is active. If the phrase has interactive variables, the variable fill-in sheet opens after the alias is deleted. The feature is disabled by default — turn it on in Settings.

Tips:

  • Use a distinctive prefix like ; or / for aliases to avoid accidental matches (e.g. ;brg, /addr)
  • Confidential phrases are excluded from abbreviation expansion unless already unlocked for the session
  • Works with all phrase features: variables, conditional blocks, phrase references, AI variables

Pinning & Ordering

Pin a phrase to keep it at the top of the list regardless of sort order. Long-press a phrase in the main app and tap Pin. Drag to reorder, or enable Sort by Usage in Settings to automatically surface frequently used phrases.

Character Counter

The phrase editor shows a live character count above the variable insert button as you type. Use it as a guide when writing for Twitter/X (280 characters) or SMS (160 characters).

Variables

Variables are placeholders inside your phrase text that get filled in when you copy or insert. Wrap them in double curly braces: {{…}}. The app inserts the variable picker button directly in the editor so you never need to type syntax by hand.

Use the Insert Variable button (sparkle icon) in the phrase editor to add any variable type from a menu — no need to remember the syntax.

Text Input

{{name}}
Free-text placeholder
When inserting, the user types a value into a text field. The label inside the braces is shown as the field name.
Phrase text
Hi {{customer name}}, thanks for reaching out about your order #{{order number}}.
After filling in
Hi Sarah, thanks for reaching out about your order #48291.

Dropdown Picker

{{opt1; opt2; opt3}}
Single-choice picker
Separate options with semicolons. When inserting, a wheel picker lets the user choose one value.
Phrase text
Your issue has been {{resolved; escalated; logged}}. We will follow up within {{24 hours; 2 business days; 1 week}}.
After filling in
Your issue has been escalated. We will follow up within 2 business days.

Auto-Date

{{@date}}
Automatically inserts today's date
No user interaction needed. Supports offsets and format specifiers. Format defaults to medium (e.g. Jun 9, 2026).
Syntax variations
{{@date}} → Jun 9, 2026 {{@date +3}} → Jun 12, 2026 (3 days from now) {{@date -1}} → Jun 8, 2026 (yesterday) {{@date=long}} → June 9, 2026 {{@date=weekday}} → Monday {{@date +7=full}} → Monday, June 16, 2026 {{@date=month}} → June {{@date=year}} → 2026
Example phrase
Invoice date: {{@date}} Due date: {{@date +30=long}}
Result
Invoice date: Jun 9, 2026
Due date: July 9, 2026

Interactive Date Picker

{{@select_date}}
User picks a date before inserting
Shows a calendar date picker. Optionally specify a format with =fmt or a default offset with +N.
Syntax variations
{{@select_date}} → picker, format chosen at insert time {{@select_date=short}} → picker, output as short date (e.g. 6/9/26) {{@select_date=long}} → picker, output as long date {{@select_date +1=full}} → picker starts at tomorrow, full format
Example phrase
Please schedule your appointment for {{@select_date=long}}.

Auto-Time

{{@time}}
Automatically inserts the current time
No user interaction. Supports minute offsets and format specifiers.
Syntax variations
{{@time}} → 14:35 (current time, short format) {{@time +30}} → 15:05 (30 minutes from now) {{@time=medium}} → 2:35:00 PM {{@time=long}} → 2:35:00 PM GMT+3
Example phrase
Call logged at {{@time}} on {{@date}}.
Result
Call logged at 14:35 on Jun 9, 2026.

Interactive Time Picker

{{@select_time}}
User picks a time before inserting
Shows a scroll-wheel time picker. Optionally lock the output format with =fmt.
Example phrase
Meeting starts at {{@select_time=short}}. Please join 5 minutes early.

Number Input

{{@number}}
User types a number before inserting
Like a text input, but opens the numeric keyboard. Use {{@number=Label}} to give the field a descriptive name shown above the input — the same way {{customer name}} labels a text field.
Syntax variations
{{@number}} → numeric input, no label {{@number=Ticket ID}} → numeric input labelled "Ticket ID" {{@number=Quantity}} → numeric input labelled "Quantity"
Example phrase
See Jira ticket {{@number=Ticket ID}} for details.
After filling in
See Jira ticket 4821 for details.

Number Picker

{{@select_number=label; min; max; step}}
Interactive spin-wheel number picker
The user picks a value between min and max in increments of step. The label is shown above the picker.
Syntax
{{@select_number=Quantity; 1; 100; 1}} {{@select_number=Rating; 1; 10; 1}} {{@select_number=Discount %; 5; 50; 5}}
Example phrase
We'd like to offer you a {{@select_number=Discount %; 5; 50; 5}}% discount on your next order.
Result
We'd like to offer you a 15% discount on your next order.

Days Remaining

{{@daysleft=yyyy-MM-dd}}
Number of days until a fixed date
Auto-calculated at insert time. Always 0 or more — never negative. Useful for countdowns to deadlines, releases, or events.
Example phrase
Only {{@daysleft=2026-12-31}} days left until the end of the year!
Result (inserted on Jun 9, 2026)
Only 205 days left until the end of the year!

Random

{{@random; a; b; c}}
Picks a random option automatically
No user interaction. A random value from the semicolon-separated list is chosen each time the phrase is inserted. Great for varied greetings, openers, or sign-offs.
Example phrase
{{@random; Hope you're having a great day!; Hope your week is off to a great start!; Hope all is well!}} I wanted to follow up on your recent order.
Example result
Hope your week is off to a great start!

I wanted to follow up on your recent order.

Multi-Select Picker

{{@multiselect; a; b; c}}
User picks one or more options
Shows a checklist. Selected values are joined with a comma and space.
Example phrase
The following items require your attention: {{@multiselect; Invoice; Contract; NDA; Proposal}}. Please review and sign by end of day.
User selected Invoice, NDA
The following items require your attention: Invoice, NDA. Please review and sign by end of day.

Multi-Select from Custom List Pro

{{@multiselect_list=listName}}
Multi-select checklist from a Custom List
Like {{@multiselect}} but options come from a saved Custom List. Selected values are joined with a comma and space. Update the list once — all phrases using it get the new options.
Example phrase
Issues found during review: {{@multiselect_list=Review Checklist}}.

Custom List Picker Pro

{{@list=listName}}
Single-choice picker from a saved Custom List
Shows a wheel picker populated from your Custom List. Great for product names, team members, standard responses — change the list once and all phrases update automatically.
Example phrase
Assigned to: {{@list=Team Members}} Priority: {{low; medium; high; critical}} Product: {{@list=Products}}

Random from Custom List Pro

{{@random_from_list=listName}}
Auto-picks a random item from a Custom List
No user interaction — a random value is chosen from the named Custom List at insert time. Pair with {{@random; …}} when you want randomness without a predefined list. Requires Pro.
Example phrase
{{@random_from_list=Opening Lines}} I wanted to follow up on your recent support request.
Result (one random opening from the list)
Hope you're having a great week!

I wanted to follow up on your recent support request.

Phrase Reference

{{@phrase=alias}}
Embeds another phrase by alias
The referenced phrase is resolved recursively at insert time. Circular references are detected and skipped. The referenced phrase can itself contain variables.
Setup
Phrase "signature" (alias: sig): Best regards, Alex Johnson | Support Lead support@company.com
Referencing phrase
Hi {{customer name}}, Your issue has been resolved. Let us know if you need anything else. {{@phrase=sig}}
Result
Hi Maria,

Your issue has been resolved. Let us know if you need anything else.

Best regards,
Alex Johnson | Support Lead
support@company.com

Conditional Blocks

{{@blockstart=name}} … {{@blockend}}
Named sections the user can include or skip
When copying, a checklist appears letting the user choose which blocks to include. Blocks you don't select are removed from the output. Wrap any part of your phrase in a named block to make it optional.
Example phrase
Hi {{name}}, Thank you for your message. {{@blockstart=Apology}} We sincerely apologize for the inconvenience caused. {{@blockend}} {{@blockstart=Resolution}} Your issue has been fully resolved on our end. {{@blockend}} {{@blockstart=Follow-up}} Our team will reach out within 24 hours with an update. {{@blockend}} Kind regards, Support Team
User included Apology + Follow-up
Hi James,

Thank you for your message.

We sincerely apologize for the inconvenience caused.

Our team will reach out within 24 hours with an update.

Kind regards,
Support Team

Clipboard

{{@clipboard}}
Pastes the current clipboard content
Automatically replaced with whatever is on the clipboard at insert time. No user interaction. Useful for wrapping clipboard text in a fixed template.
Example phrase
Please review the following link: {{@clipboard}} Let me know if you have any questions.
Result (clipboard contained a URL)
Please review the following link:
https://example.com/report

Let me know if you have any questions.

Cursor Position

{{@cursor}}
Places the cursor after insertion
After the phrase is inserted, the cursor is moved to where {{@cursor}} appears in the text. The token itself is removed. Useful when you want to land in a specific spot to continue typing — for example, right before a closing parenthesis or inside a template field.
Example phrase
Dear {{@cursor}}, Thank you for your email. I will get back to you shortly.
Result — cursor lands after "Dear "
Dear ,

Thank you for your email. I will get back to you shortly.

Counter

{{@counter=name}}
Auto-increments every time the phrase is used
Each named counter stores its current value in shared storage. The first use returns 1, the second returns 2, and so on — automatically. Use different names for independent counters. Counter state is shared between the app and the keyboard, and persists across sessions.
Example phrase
Ticket #{{@counter=ticket}} has been created and assigned to our team.
First use
Ticket #1 has been created and assigned to our team.
Second use
Ticket #2 has been created and assigned to our team.

AI Generate Pro

{{@ai=prompt}}
Generates text using Apple Intelligence at copy time
Each time you copy a phrase containing {{@ai=…}}, Apple Intelligence generates fresh text from your prompt — entirely on-device. Great for one-liners, opening sentences, or any text you want to vary each time. Requires Pro, Apple Intelligence enabled, and iOS 26+.
Example phrase
Happy Birthday! {{@ai=write one warm birthday greeting sentence}}
Example result
Happy Birthday! Wishing you a day filled with joy and laughter — you deserve all the wonderful things coming your way!

Global Property Pro

{{@property=key}}
Auto-fills a saved global value by key
Global Properties are key-value pairs saved once in Settings → Global Properties. Every phrase using that key always gets the current value — change your name, title, or phone number in one place and all phrases update instantly. No user interaction at insert time.
Setup in Settings → Global Properties
name → Alex Johnson title → Senior Support Manager email → alex@company.com phone → +1 555 000 1234
Phrase text
Best regards, {{@property=name}} | {{@property=title}} {{@property=email}} · {{@property=phone}}
Result
Best regards,
Alex Johnson | Senior Support Manager
alex@company.com · +1 555 000 1234

Date & Time Formats

Append =format to any @date or @time variable to control the output style. Combine with offsets: {{@date +3=long}}.

Date formats

Format valueExample outputNotes
short6/9/26Numeric, locale-aware
mediumJun 9, 2026Default when no format specified
longJune 9, 2026
fullMonday, June 9, 2026Includes weekday
monthJuneMonth name only
year2026Year only
weekdayMondayDay of week only
quarterQ2Quarter (Q1–Q4)
week24ISO week number

Time formats

Format valueExample output
short2:35 PM (default)
medium2:35:00 PM
long2:35:00 PM GMT+3

Tags & Colors

Tags are color-coded labels that let you group and filter phrases. Assign multiple tags to a single phrase. Manage tags in Settings → Tags.

Creating tags

Go to Settings → Tags and tap Add Tag. Give it a name and pick a color. Tags are available in the phrase editor immediately.

Customer Support Sales Internal

Filtering in the keyboard

The top row of the Text Preset keyboard shows your tags. Tap one or more to filter phrases. Tap again to deselect.

Filter mode — choose between:

  • Any tag (OR) — shows phrases that have at least one selected tag
  • All tags (AND) — shows only phrases that have every selected tag

Toggle the filter mode with the segmented control that appears when the tag row is open.

Free plan: up to 3 tags. Upgrade to Pro for unlimited tags.

Template Packs

Template Packs are curated collections of ready-to-use phrases. Import any pack in one tap — phrases land in your library tagged and organised, ready to customise.

Available packs

  • Customer Support — acknowledgements, resolutions, escalations, follow-ups
  • Sales & Outreach — cold outreach, follow-ups, objection handling, closing
  • Email Signatures — varied professional sign-offs
  • Developer — PR comments, code review, git messages, standup templates
  • Social Media — captions, DM replies, engagement comments
  • Meetings — invites, agendas, follow-up notes, action items
  • HR & Recruiting — offer letters, interview confirmations, rejections
  • Greetings — birthday, congratulations, seasonal messages

Browse and import packs in the main app via the grid icon in the top-right corner of the phrase list.

Custom Lists Pro

Custom Lists are reusable sets of values you can reference in multiple phrases. Changing the list updates all phrases that use it — no need to edit each phrase individually.

Creating a Custom List

1

Open Settings → Custom Lists

Tap New List and give it a name.

2

Add items

Enter each value on a new line. Reorder by dragging. Delete by swiping left.

3

Use in a phrase

In the phrase editor, insert a variable → Custom List → pick your list. The syntax is {{@list=My List Name}}.

Use cases

  • Team members — add the list once, use it in dozens of assignment templates
  • Product names — keep product catalogue current without touching every phrase
  • Standard responses — rotating closings, greetings, or policy references
  • Clients — client names for outreach templates

Global Properties Pro

Global Properties are key-value pairs saved once and reused across all your phrases via {{@property=key}}. Change a value once — every phrase that uses that key updates instantly. Perfect for your name, job title, company, or any piece of info you repeat in many templates.

Managing properties

Go to Settings → Global Properties and tap Add Property. Enter a key (e.g. name) and a value (e.g. Alex Johnson). Keys are case-sensitive and must be unique.

Using in phrases

Insert the variable {{@property=key}} anywhere in your phrase text. It resolves automatically at insert time with no user interaction.

Common properties to set up
KeyExample value
nameAlex Johnson
titleSenior Support Manager
companyAcme Corp
emailalex@acme.com
phone+1 555 000 1234
websiteacme.com/support

Smart Rewrite Pro

Smart Rewrite uses Apple Intelligence (on-device AI) to generate tonal variants of your phrase — Formal, Brief, and Friendly — without leaving the keyboard.

Requires: Pro, iOS 26 or later, and Apple Intelligence enabled on your device.

Using Smart Rewrite in the keyboard

Long-press any phrase chip in the keyboard. A menu appears with three rewrite options: Formal, Brief, and Friendly. Tap one and the rewritten variant is inserted directly.

Using Smart Rewrite in the editor

Open a phrase for editing and tap the Smart Rewrite button (wand icon). Preview all three variants, pick one, and it replaces your current phrase text.

Statistics Pro

The Statistics dashboard shows how much time you're saving with Text Preset. All data is local — nothing is sent to external servers.

Metrics

  • Total insertions — how many times you've inserted phrases across all apps
  • Characters saved — total characters inserted via Text Preset instead of typed manually
  • Time saved — estimated at 200 characters per minute (average typing speed)
  • Most used phrase — your top phrase by insertion count
  • Usage streak — consecutive days you've used Text Preset

Confidential Phrases Pro

Mark any phrase as confidential to hide its content from the phrase list and keyboard. Confidential phrases show only the alias (if set) or blurred text — the content is revealed only after Face ID or passcode authentication.

Requires Pro. Authentication uses Face ID or your passcode — phrase content is stored only on your device.

Marking a phrase as confidential

Open any phrase for editing and toggle Confidential in the editor. Once saved, the phrase shows only its alias or blurred text in the list instead of the actual content.

Unlocking confidential phrases

Tap a confidential phrase in the main app to trigger Face ID or passcode authentication. Once authenticated, all confidential phrases are revealed for the current session. Switching away from the app or locking the screen resets the session.

Keyboard

Confidential phrases are hidden in the keyboard as well. Tapping a confidential chip triggers authentication — Face ID works directly in the keyboard when Full Access is enabled.

Trash & Delete After

Deleted phrases are no longer gone immediately — they move to Trash first and are permanently removed after 30 days. You can restore them any time before that.

Trash

When you delete a phrase, it moves to the Trash bin rather than being removed right away. Access Trash in Settings → Trash.

  • Restore — swipe right on any phrase in Trash to move it back to your library
  • Empty Trash — tap Empty to permanently delete all trashed phrases at once
  • Phrases in Trash are automatically and permanently deleted after 30 days

Delete After

Set an expiry date on any phrase so it moves to Trash automatically when the date arrives — whether you open the app or just use the keyboard.

1

Long-press the phrase

In the main phrase list, long-press any phrase to open the context menu.

2

Tap Delete After

Choose an expiry date from the date picker. The phrase will continue to work normally until that date.

3

Automatic move to Trash

On the expiry date the phrase moves to Trash. From there you have 30 days to restore it before it's permanently deleted.

Delete After is useful for time-limited campaigns, seasonal phrases, or anything that stops being relevant after a certain date.

Import & Export

Move your phrases between devices, share with teammates, or back up your library.

JSON export / import

Go to Settings → Export to save your entire library as a JSON file. Share it via AirDrop, email, or any file app. To import, tap a .json file and choose Open with Text Preset. Existing phrases are preserved; duplicates are skipped.

JSON file structure
{ "version": 1, "exportDate": "2026-06-09T12:00:00Z", "phrases": [ { "text": "Hi {{customer name}},\n\nThank you for reaching out.", "tags": ["Support", "Greetings"], "isPinned": false, "alias": "support-greeting" }, { "text": "Best regards,\n{{@property=name}}", "tags": [], "isPinned": true, "alias": null } ] }
FieldTypeDescription
versionIntAlways 1
exportDateISO 8601 stringDate the file was exported
phrases[].textStringFull phrase text; \n for line breaks
phrases[].tagsArray of stringsTag names; tags are created if they don't exist
phrases[].isPinnedBoolWhether the phrase is pinned
phrases[].aliasString or nullAlias for {{@phrase=alias}} references

CSV import Pro

Import phrases from a CSV or TSV file — useful for migrating from spreadsheets, Notion, or other tools. Available in Settings → Import CSV.

CSV format
phrase text , tag1 , tag2 , ... Hi {{customer name}}, thanks for reaching out.,Support,Greetings "Order #{{@number=Order ID}} shipped on {{@date}}.",Support Best regards,Signatures
ColumnRequiredDescription
1st columnYesPhrase text. Wrap in "quotes" if it contains commas.
2nd column+NoTag names. Each column is a separate tag. Tags are created if missing.
Separator is auto-detected: comma by default, semicolon if the file contains no commas. A first-row header (e.g. "text,tag") is automatically skipped.

Sharing a single phrase

Long-press a phrase → Share. This copies a deep link that your teammate can tap to import that exact phrase (text, tags, variables included) into their own Text Preset library.

Save from any app

Use the iOS share sheet in Safari, Notes, Mail, or any other app — tap Share → Text Preset to save the selected text or URL directly as a new phrase.

Spotlight Search

Text Preset integrates with iOS Spotlight so you can find and copy any phrase without opening the app. Search from the Home Screen search bar, tap a result, and the phrase is instantly copied to your clipboard.

How to use

1

Open Spotlight

Swipe down from the middle of the Home Screen to open iOS Spotlight search.

2

Search for a phrase

Type any word from your phrase text or a tag name — matching phrases appear in the search results.

3

Tap to copy

Tap any result and the phrase is instantly copied to your clipboard. No need to open the Text Preset app.

Settings

Access settings from the gear icon in the main app. Changes sync to the keyboard immediately.

Sort by Usage Count

When enabled, phrases are automatically sorted by how often you use them — most-used first. Pinned phrases always stay at the top regardless of this setting. Disable to use your manual drag order.

Auto Spacing

When enabled, Text Preset automatically adds a space after inserting a phrase if the next character isn't punctuation or whitespace. Saves a tap in most message-writing contexts.

Abbreviation Expansion

When enabled, typing a phrase alias followed by a space in the Text Preset keyboard automatically replaces it with the full phrase text. See Abbreviation Expansion for details.

Format on Insert

When enabled, each phrase chip in the keyboard shows three formatting buttons: UPPER, Title, and lower. Tap a button instead of the chip to insert the phrase in that casing. Useful for phrases you use in different contexts (titles, body text, subject lines).

Smart Rewrite

Toggle AI-powered tone variants on or off. Requires Pro and Apple Intelligence (iOS 26+).

Language

Override the app language independently from your system locale. Select a language from the list — the app restarts to apply the change. Choose System to follow the device language.