hermes — Engineering Performance
32 engineers all time · Jan 2025 – Aug 2026 · built 2026-09-08 · GitHub
Performance snapshot
Today's rolling 90-day reading for hermes, compared with the start of the series. Pick a window to move that comparison point.
Avg. perf / dev / mo
−100.0%
0.10 → 0.00 ETV
Active engineers
−68.4%
19.0 → 6.0
Features
−23.7pp
23.7% → 0.0%
hermes vs. Meta
Per-engineer ETV for hermes against Meta as a whole. Both lines are 90-day rolling averages scaled to a 30-day month, so they share one axis and can be read against each other at any point. Pick a window to zoom the chart to it.
Performance Composition
Each month's output split by type of work: Features (new value), Maintenance (sustaining systems), Tests, Docs, and Fixes (rework). The yellow line is output per engineer, so when it rises each engineer is delivering more, whatever the team size did. Unit: Engineering Throughput Value (ETV).
Engineering capacity
Effective engineers behind hermes, against its pre-AI baseline. Each subject has its own: hermes's is 0.10 ETV / dev / mo, its first reading in April 2025. Per-engineer ETV divided by that gives a capacity multiple, and that multiple applied to the engineers active in the trailing 90 days turns it into engineer-equivalents. The line is the real headcount, so the gap between line and area is what the leverage is worth. Because each baseline is its own, every subject opens at 1.0x on its first day: multiples measure improvement and are not comparable between subjects.
Knowledge concentration
How dependent is this repo on a small number of engineers? Higher top-1 share = higher key-person risk.
Chi Tsai owns 19.6 % of commits.
Behind the numbers
Written summary of the work completed each month.
No monthly reports available yet.
Most impactful commits
Top 10 by ETV in the all-time window.
- 5.5ETVRevert deletion of old Hermes CDPHandler Summary: X-link: https://github.com/facebook/react-native/pull/54078 Changelog: [General][Fixed] 6e1c0a removed old Hermes CDPHandler, which is a breaking change, revert here. Reviewed By: cipolleschi Differential Revision: D84076229 fbshipit-source-id: 7ac426178754d6320c1803a50d57afa10e3126e5Gang Zhao · f1cfa651 · 2025-10-08
- 3.4ETVReplace use of private serde and quote internals Summary: This crate is blocking a serde update. These APIs are not public and not stable over time. You are not supposed to use them. https://www.internalfb.com/code/fbsource/[45d32fb2e51fdc0f015a735a18b284c2aae7fc98]/xplat/hermes/unsupported/hermes/crates/hermes_estree_codegen/src/codegen.rs?lines=11%2C360%2C736%2C755%2C790 Reviewed By: diliop Differential Revision: D82673555 fbshipit-source-id: bf094b3f5ed122d4e86d184a02a900300c8c4c36David Tolnay · 96c99c98 · 2025-09-18
- 1.4ETVBackport multi-session debugger support Summary: Backport from static_h of D90862351 (a bugfix) and the multi-session debugger stack (D90585931 through D90862348). Local changes on top of the graft: - Add CDPAgentMultiDebuggerTest.cpp to srcs and CDPAgentTest.h to headers in BUCK - Add DebuggerDomainCoordinator.cpp to srcs and DebuggerDomainCoordinator.h to exported_headers in api.bzl Reviewed By: fbmal7 Differential Revision: D90864318 fbshipit-source-id: db510823dcfd79e1655e4071df5b8883a89d2a94Moti Zilberman · c8df3ed5 · 2026-02-12
- 0.7ETVAdd intermediate state for the Hermes Root API Summary: This diff adds the Hermes Root API interface, but keeps the static functions within HermesRuntime still. This is a necessary intermediate step for RN ([see failing tests here](https://github.com/facebook/react-native/actions/runs/14800547982/job/41558052598?pr=51082)), which depends on the version of Hermes that is on `main`, which does not have the Root API yet. Once this lands, we can land the next diff in the stack that migrates all the usages to `makeHermesRootAPI`, and remove all the static methods from `HermesRuntime`. Reviewed By: neildhar Differential Revision: D74594455 fbshipit-source-id: 7db62051082e3384b0f5215a2262cda58208db9fChi Tsai · 3abf653c · 2025-05-14
- 0.5ETVAdd `TypedArray`, `UInt8Array` in JSI Summary: X-link: https://github.com/facebook/react-native/pull/56158 Add TypedArray and Uint8Array types to JSI with supporting APIs. New types: - `TypedArray`: Base class for all typed arrays - `Uint8Array`: Uint8Array type extending TypedArray New IRuntime APIs: - `getBuffer(TypedArray)`: Get underlying ArrayBuffer - `getByteOffset(TypedArray)`: Get byte offset property - `getByteLength(TypedArray)`: Get byte length property - `getLength(TypedArray)`: Get length property - `createUint8Array(size_t)`: Create Uint8Array with length - `createUint8Array(ArrayBuffer, offset, length)`: Create from ArrayBuffer - `isUint8Array(Object)`: Check if object is Uint8Array Changelog: [Internal] Reviewed By: lavenzg Differential Revision: D95245175 fbshipit-source-id: 33e7f5d9de42bfcc0b7a57c681fdd73711c2bb13Chi Tsai · 5f82b877 · 2026-04-15
- 0.4ETVAlign HermesRuntime with SH and make non-static methods virtual Summary: Make these functions virtual so that it is simpler to have multiple different Hermes versions loaded in the same application. This should not add any overhead in most cases, since Hermes is typically a separate dynamic library, so invocations of these methods would take an indirection through the PLT. Also add methods that currently are implemented in SH, with throwing implementations. Reviewed By: tmikov Differential Revision: D69219627 fbshipit-source-id: 6eabd012d05ff1c529750781a5f560881e2fc700Neil Dhar · 91354c6a · 2025-02-14
- 0.4ETVSetup Hermes publishing to Maven for commitlies and releases on Android and iOS (#1752) Summary: Pull Request resolved: https://github.com/facebook/hermes/pull/1752 This setups publishing Android and iOS artifacts on commits and releases to be used by React Native. ## Motivation Reduce CI time by decreasing the number of Hermes builds currently running on the React Native repo by moving them to the Hermes repo with less traffic. Reviewed By: cortinico Differential Revision: D79163000 fbshipit-source-id: e80978a4f32e48c5c2c0ce5574e1956319693697Dawid Małecki · 0c3b6631 · 2025-08-12
- 0.3ETVUse IHermes, use shared_ptr<jsi::Runtime> in Synth Traces in all other version of Hermes Summary: Cast into `IHermes` in Synth Traces when Hermes-specific runtime functionalities are used, instead of performing `dynamic_cast` While we are here, also updated all unique_ptr usages of `jsi::Runtime` to shared_ptr. Reviewed By: neildhar Differential Revision: D73525167 fbshipit-source-id: 8aab275bc4fa3fd1f5c34f162710296859af9096Chi Tsai · 3cc0974e · 2025-05-15
- 0.3ETVFix get_assigned_codepoints bug Summary: The very first range element in `Assigned` was incorrectly being generated as `(0,0)`. Fix this by initializing `cp_begin` to `None`. Reviewed By: neildhar Differential Revision: D68579548 fbshipit-source-id: ece91e7ca929f251adc485f3aec395b6566f52f0Michael Leon · d63b9d79 · 2025-01-24
- 0.3ETVApply breakpoints when Debugger domain is re-enabled Summary: While working on Performance panel, I've noticed a native crash happening, if user has any breakpoints set. This happens because of the failed assertion here: https://www.internalfb.com/code/fbsource/[fc5f1ebf5b8d]/xplat/hermes/API/hermes/cdp/DebuggerDomainAgent.cpp?lines=196 When user starts recording a trace in Performance panel, Chrome DevTools will send `Debugger.disable` method. Once recording stops, it will send `Debugger.enable`. At this step the referenced assertion will fail. What changes with this diff: - We will clear `HermesBreakpoints` in `CDPBreakpoints` on `disable`, because they are already cleared in local debugger: https://www.internalfb.com/code/fbsource/[fc5f1ebf5b8d]/xplat/hermes/API/hermes/cdp/DebuggerDomainAgent.cpp?lines=233-236 This is covered by BreakpointsSurviveDomainReload test. - We will apply any persisted `CDPBreakpoints` to local Hermes Debugger again on `enable` method. This is covered by BreakpointsSurviveDomainReloadAndCorrectlyPauseVM test. Reviewed By: dannysu Differential Revision: D70251389 fbshipit-source-id: 2aad376c2d3b64819abd6bb397ac33781e108bffRuslan Lesiutin · 1268ba14 · 2025-03-06