# 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 ```