Skip to content

[0.88] Hermes: JSI implementation batch backported to 260318099.0.0-stable (landed) #1413

Description

@fabriziocucci

Target Branch

0.88

Link to commit or PR to be picked

Description

Bookkeeping record. All 10 commits have already landed on 260318099.0.0-stable, so there is nothing to action here. Filing it so the 0.88 pick list reflects the work, and so the remaining release-side blocker is written down somewhere.

The gap

RN 0.88 moved to Hermes 260318099, whose stable branch was cut from static_h around 2026-03-18. facebook/hermes#1988 ("Backport new JSI improvements", 21 commits from static_h) landed on the 250829098 branch (used by RN 0.87) on 2026-04-15, after that cut.

The 260318099 branch received only half of it. The JSI declarations ("Add X API") crossed over, the Hermes implementations ("Implement X") and their SynthTrace support did not. The JSI surface in API/jsi/jsi/jsi.h was byte-identical between the two branches, so nothing failed to compile and nothing raised an error. Every affected API silently fell through to the jsi base implementation.

This was found through tryGetMutableBuffer, where expo-modules-core's Android instrumentation tests caught the zero-copy regression on 0.88.0-rc.0 (expo/expo#49910). The other five APIs had the same defect and were latent.

Where each commit landed

# Source (250829098.0.0-stable) API Landed on 260318099.0.0-stable
1 d44b213d74f Array.push impl 9841318e1
2 f5ce8f0e586 Array.push SynthTrace 2daaa8aa8
3 9a50bd0f364 tryGetMutableBuffer impl ccb4fb5bd (via facebook/hermes#2179)
4 5d5c9334bec getMutableBuffer SynthTrace 41ed32d43
5 93eee4c7e4c ArrayBuffer.detached impl fd3724fb1
6 1aea879f113 createUInt8Array impl 7b15bccd7
7 9d28826712c createUInt8Array, TypedArray::buffer SynthTrace c926dd7a1
8 5b31237bf83 Error creation impl 5d1e7237d
9 e6268f9dee7 Error creation SynthTrace 1b374ae69
10 5a7f83aa3a1 String::length impl 7e5dfcd59

Nine landed as Graft "[SH] ..." to shermes/stable. Number 3 landed through facebook/hermes#2179.

Verified by content rather than by commit subject. Every HermesRuntimeImpl method (push, tryGetMutableBuffer, detached, createUint8Array, isTypedArray, createError, createRangeError, createSyntaxError, length) is now present in API/hermes/hermes.cpp on the 0.88 branch, and API/hermes/TracingRuntime.cpp matches the 0.87 branch exactly (4 / 1 / 2 occurrences of createUint8Array / tryGetMutableBuffer / createError, against 0 / 0 / 0 before).

Still outstanding, and this is the part that affects the release

There is no 260318099.0.3 tag. Tags stop at hermes-v260318099.0.2, and RN 0.88-stable pins 260318099.0.2 in packages/react-native/sdks/hermes-engine/version.properties and packages/react-native/package.json. None of the work above reaches the release until a new tag is cut and RN is bumped to it.

Three separate things are waiting on that tag:

  1. This batch of 10 commits.
  2. The back-out of the VariableScope rescan pick ([260318099.0.0-stable] pick: Avoid unnecessary rescans of VariableScopes facebook/hermes#2149). hermes-v260318099.0.2 was tagged at 2026-09-08 03:05 PDT and the back-out landed at 11:18 PDT the same day, so .0.2 still carries the change that was reverted for causing SIGSEGV crashes in Messenger Android (D118959426).
  3. xplat/static_h still carries that same change (maybeDeadVariableScopes_ is still present in lib/IR/IR.cpp on static_h). The back-out called this out as a follow-up that was not included, since static_h is the source the next stable sync pulls from.

Closing as landed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type Pick RequestPick requests to include commits inside a React Native release

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions