v0.4.24 — tvOS 타겟, Linux에서 iOS/macOS 크로스 컴파일, perry login

하나의 코드베이스. 모든 플랫폼.
네이티브 성능.

Perry는 TypeScript를 macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly, 그리고 웹에서 네이티브 GUI 및 CLI 앱으로 컴파일합니다. 런타임 없음. Electron 없음. 네이티브 바이너리만.

terminal

$ perry compile main.ts

main.ts 컴파일 중...

✓ 컴파일된 실행 파일: main (2.3 MB)

$ ./main

Hello, World!

10
타겟
25+
네이티브 UI 위젯
0 ms
시작 시간
App Store
준비 완료

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를 네이티브 코드로 컴파일. 진짜 플랫폼 위젯. 제로 런타임 오버헤드.

프레임워크언어네이티브 코드네이티브 위젯런타임 오버헤드
PerryAOT 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.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);
 
// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
네이티브 바이너리

성능 비교

네이티브 컴파일이 비교할 수 없는 효율성을 제공합니다

지표PerryNode.jsBun
바이너리 크기2-5 MB~80 MB~90 MB
시작 시간~1 ms~30 ms~10 ms
런타임 종속성없음Node.jsBun
메모리 오버헤드최소V8 + GCJSC + GC

벤치마크 결과: 2.2배 빠름

Perry vs Node.js v24 (macOS ARM64, 낮을수록 좋음)

closure
4.5x
object create
3.5x
array read
3.0x
math intensive
3.0x
method calls
3.0x
binary trees
2.7x
string concat
2.5x
fibonacci
2.1x
mandelbrot
1.9x
factorial
1.7x
바이너리 크기낮을수록 좋음
Perry
5 MB
Node.js
80 MB
Bun
90 MB

시작하기

Perry를 설치하고 TypeScript를 네이티브 실행 파일로 컴파일하세요

1설치

terminal
$ brew tap PerryTS/perry
$ brew install perry

Homebrew가 필요합니다. macOS arm64 및 x86_64 지원.

2사용법

파일 컴파일
perry build main.ts

main.ts를 네이티브 실행 파일로 컴파일합니다

사용자 지정 출력
perry build main.ts -o myapp

출력 실행 파일 이름 지정

V8 런타임 포함
perry build main.ts --enable-js-runtime

JavaScript 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 불필요, 빠른 네이티브 코드만.

데이터베이스

mysql2pgmongodbbetter-sqlite3ioredis

보안

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

데이터 처리

cheeriosharpzliblodash

날짜 및 시간

dayjsmomentdate-fnsnode-cron

유틸리티

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
가져와서 사용하기만 하면 됩니다 — Perry가 자동으로 네이티브 구현을 사용합니다

코드에서 App Store까지

Perry는 앱을 컴파일할 뿐만 아니라 사용자의 손에 전달합니다.

perry build컴파일 및 서명
perry publish패키징 및 제출
스토어 및 다운로드App Store, Play Store, 직접 배포
perry verify모든 플랫폼 테스트

빌드 및 서명

하나의 명령으로 크로스 플랫폼 빌드. macOS, iOS, Android, Windows의 코드 서명을 자동으로 처리합니다. Xcode 프로비저닝 프로파일이나 Android 키스토어와 씨름할 필요가 없습니다.

배포

App Store, Play Store에 푸시하거나 직접 다운로드로 배포. Perry Publish가 패키징, 공증, 제출을 처리합니다.

검증

Geisterhand 기반. 6개 모든 플랫폼에서 자동화된 UI 테스트. 사용자가 알려주기 전에 앱이 모든 곳에서 작동하는지 확인하세요.

오픈소스 프로젝트는 무료. 팀 요금제 → /publish

작동 원리

TypeScript 소스에서 네이티브 실행 파일까지 몇 초 만에

TypeScript.ts 파일
SWC
파서빠른 파싱
HIR
변환Monomorphization
Crane
lift
코드 생성머신 코드
실행 파일2-5 MB 바이너리

컴파일러 내부 작동 방식이 궁금하신가요? 컴파일러 내부 구조