# Shortcut Plist Format
Complete documentation of the `.shortcut` file structure.
**Related docs:**
- [ACTIONS.md](./ACTIONS.md) - Action identifiers and parameters
- [FILTERS.md](./FILTERS.md) - Content filters for Find/Filter actions
- [PARAMETER_TYPES.md](./PARAMETER_TYPES.md) - All parameter value types
- [VARIABLES.md](./VARIABLES.md) - Variable references and outputs
- [CONTROL_FLOW.md](./CONTROL_FLOW.md) - Conditionals, loops, menus
## Root Structure
A `.shortcut` file is a binary plist (can be written as XML, then converted). The root is a dictionary with these keys:
```xml
WFWorkflowActions
WFWorkflowClientVersion
2700.0.4
WFWorkflowClientRelease
26A0000a
WFWorkflowMinimumClientVersion
900
WFWorkflowMinimumClientVersionString
900
WFWorkflowIcon
WFWorkflowIconGlyphNumber
59511
WFWorkflowIconStartColor
4282601983
WFWorkflowName
My Shortcut
WFWorkflowHasOutputFallback
WFWorkflowImportQuestions
WFWorkflowOutputContentItemClasses
WFWorkflowTypes
WFWorkflowInputContentItemClasses
WFStringContentItem
WFURLContentItem
```
## Root Keys Reference
| Key | Type | Required | Description |
|-----|------|----------|-------------|
| `WFWorkflowActions` | Array | Yes | Array of action dictionaries |
| `WFWorkflowClientVersion` | String | Yes | Client version (e.g., "2700.0.4") |
| `WFWorkflowClientRelease` | String | No | Release identifier |
| `WFWorkflowMinimumClientVersion` | Integer | Yes | Minimum version number (900+) |
| `WFWorkflowMinimumClientVersionString` | String | Yes | String version of minimum |
| `WFWorkflowIcon` | Dict | Yes | Icon configuration |
| `WFWorkflowName` | String | No | Display name |
| `WFWorkflowHasOutputFallback` | Boolean | No | Has output fallback |
| `WFWorkflowImportQuestions` | Array | No | Import-time questions |
| `WFWorkflowInputContentItemClasses` | Array | No | Accepted input types |
| `WFWorkflowOutputContentItemClasses` | Array | No | Output types |
| `WFWorkflowTypes` | Array | No | Workflow types |
## Icon Configuration
```xml
WFWorkflowIcon
WFWorkflowIconGlyphNumber
59511
WFWorkflowIconStartColor
4282601983
```
### Common Glyph Numbers
| Glyph | Number | Description |
|-------|--------|-------------|
| Globe | 59511 | Default globe icon |
| Star | 59446 | Star icon |
| Heart | 59448 | Heart icon |
| Gear | 59458 | Settings gear |
| Document | 59493 | Document icon |
| Folder | 59495 | Folder icon |
| Play | 59477 | Play button |
| Message | 59412 | Message bubble |
### Color Values
Colors are ARGB integers. Common values:
| Color | Value | Description |
|-------|-------|-------------|
| Blue | 4282601983 | Default blue |
| Red | 4282601983 | Red |
| Green | 4292093695 | Green |
| Orange | 4294967295 | Orange |
| Purple | 4285887861 | Purple |
| Gray | 2846468607 | Gray |
## Action Structure
Each action in `WFWorkflowActions` is a dictionary:
```xml
WFWorkflowActionIdentifier
is.workflow.actions.showresult
WFWorkflowActionParameters
UUID
A1B2C3D4-E5F6-7890-ABCD-EF1234567890
```
### Action Keys
| Key | Type | Required | Description |
|-----|------|----------|-------------|
| `WFWorkflowActionIdentifier` | String | Yes | Action identifier (e.g., `is.workflow.actions.showresult`) |
| `WFWorkflowActionParameters` | Dict | Yes | Action configuration |
### Common Parameter Keys
| Key | Type | Description |
|-----|------|-------------|
| `UUID` | String | Unique ID for referencing this action's output |
| `GroupingIdentifier` | String | Links control flow actions (repeat, if, menu) |
| `WFControlFlowMode` | Integer | 0=start, 1=middle, 2=end |
## Input Content Item Classes
These define what input types the shortcut accepts:
```xml
WFWorkflowInputContentItemClasses
WFAppStoreAppContentItem
WFArticleContentItem
WFContactContentItem
WFDateContentItem
WFEmailAddressContentItem
WFGenericFileContentItem
WFImageContentItem
WFiTunesProductContentItem
WFLocationContentItem
WFDCMapsLinkContentItem
WFAVAssetContentItem
WFPDFContentItem
WFPhoneNumberContentItem
WFRichTextContentItem
WFSafariWebPageContentItem
WFStringContentItem
WFURLContentItem
```
## Binary vs XML Plist
Shortcuts are stored as binary plists but can be created as XML:
```bash
# Convert XML to binary (optional - signing handles this)
plutil -convert binary1 MyShortcut.shortcut
# Convert binary to XML (for debugging)
plutil -convert xml1 MyShortcut.shortcut
```
The `shortcuts sign` command accepts both formats.
## Complete Template
```xml
WFWorkflowActions
WFWorkflowActionIdentifier
is.workflow.actions.gettext
WFWorkflowActionParameters
UUID
11111111-1111-1111-1111-111111111111
WFTextActionText
Hello World!
WFWorkflowActionIdentifier
is.workflow.actions.showresult
WFWorkflowActionParameters
Text
Value
attachmentsByRange
{0, 1}
OutputName
Text
OutputUUID
11111111-1111-1111-1111-111111111111
Type
ActionOutput
string

WFSerializationType
WFTextTokenString
WFWorkflowClientVersion
2700.0.4
WFWorkflowHasOutputFallback
WFWorkflowIcon
WFWorkflowIconGlyphNumber
59511
WFWorkflowIconStartColor
4282601983
WFWorkflowImportQuestions
WFWorkflowMinimumClientVersion
900
WFWorkflowMinimumClientVersionString
900
WFWorkflowName
Hello World
WFWorkflowOutputContentItemClasses
WFWorkflowTypes
```