Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Platform Overview

Perry compiles TypeScript to native executables for 6 platforms from the same source code.

Supported Platforms

PlatformTarget FlagUI ToolkitStatus
macOS(default)AppKitFull support (127/127 FFI functions)
iOS--target ios / --target ios-simulatorUIKitFull support (127/127)
Android--target androidJNI/Android SDKFull support (112/112)
Windows--target windowsWin32Full support (112/112)
Linux--target linuxGTK4Full support (112/112)
Web--target webDOM/CSSFull support (127/127)

Cross-Compilation

# Default: compile for current platform
perry app.ts -o app

# Compile for a specific target
perry app.ts -o app --target ios-simulator
perry app.ts -o app --target web
perry app.ts -o app --target windows
perry app.ts -o app --target linux
perry app.ts -o app --target android

Platform Detection

Use the __platform__ compile-time constant to branch by platform:

declare const __platform__: number;

// Platform constants:
// 0 = macOS
// 1 = iOS
// 2 = Android
// 3 = Windows
// 4 = Linux

if (__platform__ === 0) {
  console.log("Running on macOS");
} else if (__platform__ === 1) {
  console.log("Running on iOS");
} else if (__platform__ === 3) {
  console.log("Running on Windows");
}

__platform__ is resolved at compile time. The compiler constant-folds comparisons and eliminates dead branches, so platform-specific code has zero runtime cost.

Platform Feature Matrix

FeaturemacOSiOSAndroidWindowsLinuxWeb
CLI programsYesYesYes
Native UIYesYesYesYesYesYes
File systemYesSandboxedSandboxedYesYes
NetworkingYesYesYesYesYesFetch
System APIsYesPartialPartialYesYesPartial
Widgets (WidgetKit)Yes

Next Steps