하나의 코드베이스. 모든 플랫폼.
네이티브 성능.
Perry는 TypeScript를 macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly, 그리고 웹에서 네이티브 GUI 및 CLI 앱으로 컴파일합니다. 런타임 없음. Electron 없음. 네이티브 바이너리만.
$ perry compile main.ts
main.ts 컴파일 중...
✓ 컴파일된 실행 파일: main (2.3 MB)
$ ./main
Hello, World!
왜 Perry인가?
TypeScript를 네이티브 애플리케이션으로 컴파일하는 데 필요한 모든 것
런타임 불필요
독립형 네이티브 실행 파일을 생성합니다. Node.js 없음, V8 없음, 런타임 의존성 없음. 어디서든 실행되는 단일 바이너리.
빠른 컴파일
SWC 파싱과 Cranelift 코드 생성을 통한 TypeScript에서 네이티브 코드로의 직접 컴파일. 중간 JavaScript 없음.
작은 바이너리
출력 바이너리는 일반적으로 2-5MB. JS npm 패키지용 선택적 V8 런타임 포함 시 15-20MB. 더 적게 배포하고, 더 빠르게 전달.
타입 안전
TypeScript의 타입 시스템을 최적화에 활용합니다. 타입이 Monomorphization을 통해 더 나은 코드 생성을 가능하게 합니다.
포괄적인 표준 라이브러리
fs, path, crypto, os, Buffer, child_process 등의 네이티브 구현이 내장되어 있습니다. 익숙한 Node.js API를 사용하세요.
선택적 V8 런타임
순수 JavaScript npm 패키지를 사용해야 하나요? V8 런타임 플래그를 활성화하여 전체 npm 생태계 호환성을 확보하세요.
25개 이상의 네이티브 UI 위젯
버튼, 텍스트 필드, 텍스트 영역, 테이블, Canvas, 스크롤 뷰, QR 코드, 보안 필드, 스플래시 화면 등 — 모두 AppKit, GTK4, Win32, UIKit, JNI를 통해 실제 플랫폼 위젯으로 컴파일됩니다.
컴파일 타임 플러그인 시스템
모듈이 빌드 타임에 합성됩니다 — 런타임 플러그인 오버헤드 없음, IPC 경계 없음. 종속성이 최종 바이너리에서 직접적인 네이티브 함수 호출이 됩니다.
진정한 멀티스레딩
parallelMap, parallelFilter, spawn을 사용한 실제 OS 스레드. 컴파일 타임 안전성이 변경 가능한 캡처를 거부합니다 — SharedArrayBuffer 없음, Worker 없음, 스레드만.
컴파일 타임 i18n
자동 문자열 추출, 30개 이상 로케일에 대한 CLDR 복수형 규칙, 컴파일 타임 유효성 검사. 번역이 바이너리에 내장되어 런타임 조회가 거의 없습니다.
모든 플랫폼에서 네이티브
Perry는 TypeScript를 네이티브 UI 프레임워크, WebAssembly, JavaScript로 컴파일합니다 — 웹 뷰가 아닌, Electron이 아닌. 모든 플랫폼에서 진짜 네이티브 위젯을, 그리고 웹까지.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
모든 조건을 충족하는 유일한 프레임워크
TypeScript를 네이티브 코드로 컴파일. 진짜 플랫폼 위젯. 제로 런타임 오버헤드.
| 프레임워크 | 언어 | 네이티브 코드 | 네이티브 위젯 | 런타임 오버헤드 |
|---|---|---|---|---|
Perry★AOT compiled to native binary | TypeScript | None | ||
React NativeJIT / interpreted at runtime | JS / TypeScript | Hermes / V8 + Bridge | ||
FlutterAOT compiled, custom renderer | Dart | Dart VM + Skia engine | ||
KMP + ComposeJVM on Android, native on iOS | Kotlin | 부분적 | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | 공유 UI 없음 | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | 부분적 | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
TypeScript를 작성하고, 네이티브로 배포
익숙한 TypeScript 문법과 API를 사용하세요. Perry가 나머지를 처리합니다.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!성능 비교
네이티브 컴파일이 비교할 수 없는 효율성을 제공합니다
| 지표 | Perry | Node.js | Bun |
|---|---|---|---|
| 바이너리 크기 | 2-5 MB | ~80 MB | ~90 MB |
| 시작 시간 | ~1 ms | ~30 ms | ~10 ms |
| 런타임 종속성 | 없음 | Node.js | Bun |
| 메모리 오버헤드 | 최소 | V8 + GC | JSC + GC |
벤치마크 결과: 2.2배 빠름
Perry vs Node.js v24 (macOS ARM64, 낮을수록 좋음)
시작하기
Perry를 설치하고 TypeScript를 네이티브 실행 파일로 컴파일하세요
1설치
$ brew tap PerryTS/perry$ brew install perryHomebrew가 필요합니다. macOS arm64 및 x86_64 지원.
2사용법
perry build main.tsmain.ts를 네이티브 실행 파일로 컴파일합니다
perry build main.ts -o myapp출력 실행 파일 이름 지정
perry build main.ts --enable-js-runtimeJavaScript npm 패키지 호환성을 위해 V8 활성화
perry check ./src네이티브 컴파일을 위한 TypeScript 코드 유효성 검사
기능 지원
포괄적인 TypeScript 및 Node.js API 커버리지
Core Language
- Numbers64-bit floating point (f64)
- StringsUTF-8, all common methods
- Booleanstrue/false, logical operators
- ArraysTyped and mixed-type arrays
- ObjectsObject literals and field access
- BigInt256-bit integer support
- EnumsNumeric and string enums
Functions
- Function DeclarationNamed functions
- Arrow Functions() => {} syntax
- Default ParametersParameters with defaults
- Rest Parameters...args syntax
- ClosuresIncluding mutable captures
- Higher-Order FunctionsFunctions as arguments/returns
- Async/AwaitAsync function support
Classes
- Class DeclarationBasic class syntax
- ConstructorsWith parameters
- Private Fields (#)ES2022 #privateField syntax
- Static Methods/FieldsClass-level members
- Getters/Settersget/set accessors
- Inheritanceextends keyword
- Super Callssuper() constructor calls
Type System
- Type AnnotationsExplicit type declarations
- Type InferenceAutomatic type detection
- GenericsMonomorphization (like Rust)
- InterfacesInterface declarations
- Union Typesstring | number support
- Type Guardstypeof operator
- Type Aliasestype X = ... declarations
Standard Library
- fsreadFileSync, writeFileSync, existsSync, etc.
- pathjoin, dirname, basename, extname, resolve
- cryptorandomBytes, randomUUID, sha256, md5
- osplatform, arch, hostname, memory info
- Bufferfrom, alloc, toString, slice, copy
- child_processexecSync, spawnSync
- JSON/Math/DateFull implementations
30개 이상의 네이티브 npm 패키지
인기 npm 패키지를 네이티브 Rust로 재구현. npm install 불필요, node_modules 불필요, 빠른 네이티브 코드만.
데이터베이스
보안
HTTP
데이터 처리
날짜 및 시간
유틸리티
코드에서 App Store까지
Perry는 앱을 컴파일할 뿐만 아니라 사용자의 손에 전달합니다.
빌드 및 서명
하나의 명령으로 크로스 플랫폼 빌드. macOS, iOS, Android, Windows의 코드 서명을 자동으로 처리합니다. Xcode 프로비저닝 프로파일이나 Android 키스토어와 씨름할 필요가 없습니다.
배포
App Store, Play Store에 푸시하거나 직접 다운로드로 배포. Perry Publish가 패키징, 공증, 제출을 처리합니다.
검증
Geisterhand 기반. 6개 모든 플랫폼에서 자동화된 UI 테스트. 사용자가 알려주기 전에 앱이 모든 곳에서 작동하는지 확인하세요.
오픈소스 프로젝트는 무료. 팀 요금제 → /publish
작동 원리
TypeScript 소스에서 네이티브 실행 파일까지 몇 초 만에
lift
컴파일러 내부 작동 방식이 궁금하신가요? 컴파일러 내부 구조