Back to comparisons
TS-to-native compiler

Perry vs Static Hermes

Static Hermes (`shermes`) is Meta's research-stage effort to ahead-of-time compile a strongly-typed subset of JavaScript/TypeScript through the Hermes engine, primarily aimed at React Native. Perry is a different bet on the same general idea — TypeScript compiled to native — but built independently in Rust on LLVM, with a working compiler, 25+ native UI widgets, and 10 compilation targets shipping today. As of mid-2026, `shermes` still has to be built from source — Perry's benchmark suite tried it as a peer and found no clean install path via standard package managers — and the Hermes V1 engine that became React Native's default in early 2026 explicitly does not include the static compilation features.

What is Static Hermes?

Hermes is the JavaScript engine Meta built for React Native — bytecode-based, AOT-precompiled, optimized for mobile startup time. Static Hermes is the research effort to extend Hermes with ahead-of-time native compilation of a typed JavaScript subset, intended to give React Native a path to true native code. The `static_h` branch is now the repo's default branch and under active development, but what actually shipped to React Native users is Hermes V1 — a new bytecode compiler and VM that became the default engine in React Native 0.84 (February 2026) — which does not compile JS to native binaries or use type information. Static Hermes itself remains a compiler R&D project; per Perry's benchmark notes, it isn't packaged for routine installation on macOS arm64 yet (`shermes` was skipped from the polyglot bench with a note that it 'is not available on Homebrew or npm in a way that installs cleanly on macOS arm64' — see perry/benchmarks/README.md).

What is Perry?

Perry is a native TypeScript compiler written in Rust, using SWC for parsing and LLVM for code generation. It ships a working CLI (`perry compile`, `perry run`, `perry publish`), 25+ native UI widgets, 10 compilation targets, a self-hosted runtime, and a benchmark suite measured under transparent conditions (M1 Max, RUNS=11). Perry is pre-1.0 but production-track: people are shipping apps built with it (Bloom Engine, Mango, Hone, Pry, dB Meter — see perryts.com).

Side by side

FeaturePerryStatic Hermes
StatusPre-1.0 (alpha) — production-trackResearch / experimental
Install path (macOS arm64)Homebrew, APT, npm (@perryts/perry)Not packaged for clean install at time of writing (per perry/benchmarks)
BackendLLVMCustom (Hermes-based codegen)
InputTypeScript (full)Typed JS/TS subset
Compilation targets10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WASM, Web/JSPrimarily mobile (React Native context)
Native UI25+ widgets via AppKit, UIKit, GTK4, Win32, JNIVia React Native bridge (when integrated)
Standalone CLI app workflowYes — `perry compile main.ts` produces a binaryTied to React Native context
Public benchmark suiteYes — RUNS=11 against Node, Bun, Rust, C++, Go, Swift, JavaInternal / research papers

Where Perry wins

  • +It exists as a usable tool. Perry can be installed today via Homebrew, APT, or `npm install @perryts/perry`, and `perry compile main.ts` produces a binary on the first try.
  • +Broader scope. Perry compiles standalone CLI apps, native desktop apps, mobile apps, watch apps, TV apps, WASM, and the web from one TypeScript codebase. Static Hermes is focused on React Native's native-code path.
  • +Native UI built in. Perry's perry/ui module is a working SwiftUI-style declarative UI layer that compiles to AppKit/UIKit/GTK4/Win32/JNI widgets. Static Hermes leaves UI to its host (React Native).
  • +Public, reproducible benchmark suite with documented methodology — perry/benchmarks shows median + p95 + σ across RUNS=11 against named compilers and runtimes.
  • +LLVM backend means Perry inherits decades of mature optimization passes (autovectorization, IndVarSimplify, scalar replacement) and supports every platform LLVM targets.

Where Static Hermes wins

  • +Backed by Meta — significant engineering resources and a clear strategic anchor in React Native.
  • +Hermes is already shipping in production React Native apps as a bytecode engine; Static Hermes inherits that ecosystem and tooling.
  • +Research-grade work on AOT typing rules and JS-subset semantics that is genuinely novel.
  • +If you're already on React Native, Static Hermes (when available) is a more incremental path than rewriting against a different compiler.

When to choose Perry

Choose Perry if you need a TS-to-native compiler that works today, you want one TypeScript codebase to target desktop, mobile, watch, TV, WASM, and the web, or you want native UI widgets without React Native's bridge.

When to choose Static Hermes

Choose Static Hermes (when available) if you're committed to React Native and want a path from JavaScript/TypeScript to ahead-of-time-compiled native code on mobile, and you're comfortable working at the research-tooling edge.

Verdict

Static Hermes is interesting research from a credible team. Perry is a working product on the same general idea, scoped much more broadly than mobile and shipping today. If you need a TS-to-native compiler in your hands now, Perry is the choice. If you're on React Native and willing to track a research project, watch Static Hermes.

Try Perry

Compile your TypeScript to native today.

Get started