Cherri Hero Image

Scale your Shortcut projects and maintain them long-term.

Cherri (pronounced cherry) is a Siri Shortcuts programming language that compiles directly to a signed Shortcut you can then run on your Apple devices.

Try Cherri
/* Hello, Cherri! */

#define glyph smileyFace
#define color yellow

@message = "Hello!"
alert("Message: {message}", "Alert")

Why Cherri?

  • πŸ–₯️ Laptop/Desktop based development
  • πŸŽ“ Easy to learn and syntax similar to other languages
  • 🐞 1-1 translation to Shortcut actions as much as possible to make debugging easier
  • πŸͺΆ Optimized to create as small as possible Shortcuts and reduces memory usage at runtime


Read Documentation Install

VS Code Extension

Provides syntax highlighting and file icon.


Install VS Code Extension

macOS App

You can build and run the Xcode project locally.


View Source on GitHub

Use the glyphs search site to easily generate a Shortcut icon for Cherri outside of Shortcuts.


Generate Shortcut Icon


How does it work?

πŸͺ„ No magic variables syntax, they’re constants instead

const int = 37
show("{int}")

Learn more

#️⃣ Include files within others for large Shortcut projects

#include 'other-file.cherri'
// ...
#include 'another-file.cherri'

Learn more

πŸ”§ Define custom actions

action myCustomAction(text test) {
    show("{test}")
}

myCustomAction("Test")

Learn more

πŸ“‹ Copy-paste actions automatically

copy checkConnection {
    const online = isOnline()
    if !online {
        alert("No internet connection!")
    }
}

// ...

paste checkConnection

Learn more

πŸ₯© Define raw actions with custom identifier and parameters

rawAction("is.workflow.actions.gettext", [
      {
          "key": "WFTextActionText",
          "type": "string",
          "value": "Hello, world!"
      }
])

Learn more

πŸ“‡ Generate VCards for menus

Creates a text action in the VCard format based on the arguments.

makeVCard("Title", "Subtitle")

Learn more

πŸ”’ Type system and type inference

// Declared types
@string: text
@integer: number

// Inferred types
@txt = "Test"
@int = 37

Learn more