Electron bundles Chromium. React Native bundles a JavaScript engine. Perry compiles your code to machine code, so there is nothing extra to ship.
Electron, React Native and Perry compared
ElectronChromium + Node.js per app
React NativeJS engine + native views
PerryLLVM machine code
What ships
Your JS + a full browser
Your JS bundle + an engine
A single native executable
UI
HTML/CSS in a webview
Native views over a bridge
AppKit, UIKit, Win32, GTK4, Android, DOM
Targets from one codebase
Desktop
Mobile first
11: desktop, mobile, watch, TV and web
JavaScript at runtime
Yes
Yes
No. Optional V8 fallback for packages that need it
App size
Includes Chromium
Includes a JS engine
~330 KB hello world
Honest tradeoff
Mature, huge ecosystem
Mature on mobile
Implements a practical TS + Node subset; pre-1.0
How Perry builds your app.
SWC parses your code, Perry lowers it, and LLVM generates machine code. The runtime and garbage collector are linked into the same binary.
01
main.ts / .js
Source
TypeScript or plain JavaScript. Classes, generics, async/await and npm packages.
02
Parse
SWC
Fast parsing into an AST.
03
Transform
Perry IR
Type resolution and lowering.
04
Codegen
LLVM
Machine code for ARM64, x86-64 and WASM.
05
./main
Executable
A single file, from ~330 KB.
One UI codebase, eleven native targets.
perry/ui is a declarative UI library built on stacks. Each widget maps to the platform's own toolkit: AppKit, UIKit, Win32, GTK4, Android Views or the DOM.
97%is the target for Node 26 compatibility. 3,371 of 4,340 tests pass today.
We run Node 26's test suite against Perry module by module and compare the output with Node. 4,340 tests across 53 modules. Failing tests are listed in the repository.
3,371 / 4,340 passingtarget: 97%
REAL NPM PACKAGES, COMPILED NATIVELY
Fastify · Express · mysql2 · pg · ioredis · ws · bcrypt · jsonwebtoken and more. Plain JavaScript compiles too. Known gaps are listed in the repository.
Close JavaScript/TypeScriptJavaScriptTypeScript and npm gaps: Proxy, decorators, weak refs
NEXTafter the core
perry/ui
Wider widget coverage
UI parity across the 11 targets
Core and preview targets moving up a level
LATERon a stable base
Extensions
Perry Publish hosted builds and signing
Coop hosting
More first-party packages and tooling
Need help moving from Electron or React Native?
Perry is an independent project run by its maintainers. If your company needs a platform, package or feature, contact us. Scope, timeline and terms are agreed in writing.
01
Migration reviews
We review your Electron or React Native app and tell you what compiles today and what needs work.
02
Paired implementation
Work alongside the maintainers while your team ships its first Perry build.
03
Sponsored features
Fund a widget, Node module or platform. The work goes into the open-source compiler.
04
Hosted builds & support
Signing, verification and release planning, with support terms set in your agreement.
Everything people ask before compiling their first binary
Does Perry need Node.js or a runtime?
Native Perry binaries run without Node.js, Bun, Deno, or an external JavaScript engine installed. They do include the Perry runtime and garbage collector, statically linked. Packages that need engine semantics can use the optional embedded V8 fallback.
How big are the compiled binaries?
Size depends on the target, imports, and build profile. The published examples range from about 330 KB for hello world to about 7 MB for Mango; full-standard-library or optional-V8 builds can be much larger. Treat any size as a measured example, not a universal output size.
Can I use npm packages?
Many pure JavaScript/TypeScriptJavaScriptTypeScript packages compile natively, and roughly 50 package/API implementations are tracked. Compatibility is not universal: packages using native addons, unsupported dynamic behavior, or engine-specific semantics may need the optional V8 fallback or may not work. Run perry check and consult the limitations.
Which platforms does Perry support?
Perry documents 11 targets: macOS, iOS, iPadOS, visionOS, tvOS, watchOS, Android, Wear OS, Windows, Linux, and Web/WASM. Web and WASM are aliases; HarmonyOS is a separate preview. Platform maturity and API coverage differ, so consult the platform guide.
Is Perry free and open source?
The compiler and runtime repository is MIT licensed, and local compilation requires no account. Hosted Perry Publish and commercial support are separate services; availability, limits, and pricing are confirmed in the service or in writing.
How is Perry different from Bun or Deno compile?
Bun and Deno standalone executables bundle their runtimes; Perry native builds compile through LLVM and do not embed a JavaScript engine by default, although they statically link the Perry runtime and GC. Exact size and startup comparisons are version-, platform-, and workload-specific. See the dated Perry vs Bun and Perry vs Deno pages.
How is Perry different from Electron or Tauri?
Electron ships Chromium and Node.js; Tauri uses a system webview with native-side application code. Perry instead maps its UI model to platform widgets where supported. Bundle size and platform capability vary, so use the dated Perry vs Electron and Perry vs Tauri comparisons rather than a universal size claim.
How mature is Perry?
Perry is pre-1.0 and changes quickly. Real projects use it today, but language, package, and platform parity are still active work. Review the showcase, current limitations, and changelog before committing a production workload.