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
| Feature | Perry | Static Hermes |
|---|---|---|
| Status | Pre-1.0 (alpha) — production-track | Research / experimental |
| Install path (macOS arm64) | Homebrew, APT, npm (@perryts/perry) | Not packaged for clean install at time of writing (per perry/benchmarks) |
| Backend | LLVM | Custom (Hermes-based codegen) |
| Input | TypeScript (full) | Typed JS/TS subset |
| Compilation targets | 10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WASM, Web/JS | Primarily mobile (React Native context) |
| Native UI | 25+ widgets via AppKit, UIKit, GTK4, Win32, JNI | Via React Native bridge (when integrated) |
| Standalone CLI app workflow | Yes — `perry compile main.ts` produces a binary | Tied to React Native context |
| Public benchmark suite | Yes — RUNS=11 against Node, Bun, Rust, C++, Go, Swift, Java | Internal / 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.