$ the-wire · showcase
React 19.3 ships View Transitions, Rust compiler fixes non-ASCII panic
By RepoJournal · Filed · About Meta · Composed from the cited sources · methodology
React 19.3.0 lands with the new `<ViewTransition />` and `addTransitionType` APIs, while the Rust compiler port fixes a UTF-8 offset bug that panicked on non-ASCII source.
React 19.3.0 is out, and the headline addition is `<ViewTransition />` alongside `addTransitionType`, the pair that lets components drive browser View Transition animations [1]. The release notes point to the full React 19.3 blog post for the detail, but the changelog entry itself covers everything that landed on `main` since `v19.2.0` [2], so the surface area is broader than the two new APIs alone.
The Rust compiler port picked up a real correctness fix. `get_identifier_name_with_loc` reads an identifier's name from source when SSA has dropped it, and the fallback sliced a Rust `&str` (UTF-8 bytes) using `SourceLocation.index`, which is a Babel position counted in UTF-16 code units [3]. Those two only agree while the source is ASCII, so after any non-ASCII character later offsets are short by the extra bytes and the slice reads the wrong span or panics outright. The fix reconciles the two indexing schemes, and the same fix carries into the commit-form changelog [4].
React Native work this cycle is cleanup under the C++ Stable API RFC. `RuntimeScheduler.h` no longer transitively includes `PerformanceEntryReporter.h` or `ShadowTreeRevisionConsistencyManager.h`; the types are forward-declared instead [5]. `RCTInstance.h` drops a dead include that pulled `jserrorhandler:jserrorhandler` into a public header even though neither iOS nor macOS `RCTInstance.h` names `ReactInstance` or `JsErrorHandler` [6]. The bridgeless `RCTInstance` runtime also loses its `RCTInstanceRuntimeDiagnosticFlags` getter and `RCTInstanceSetRuntimeDiagnosticFlags` setter, which had no callers anywhere, leaving the getter returning an empty string [7]. Finally, `cxxreact:jsbigstring` is now classified as a public target under the three-tier visibility model, with `#include <react/cxxstableapi/UmbrellaGuard.h>` added to its two exported headers and a new `React/JSBigString.h` umbrella wired into BUCK, CMake and CocoaPods [8].
The `v0.88.0-rc.0` changelog got three corrections: the `Touchable` root export entry is removed as a duplicate of a cherry-picked `v0.87.0` change, and the iOS `RCTArrayBuffer` entry is reworded after reading as a plain addition while sitting under Breaking [9]. If you consume the changelog programmatically, re-read the rc section before quoting it.
Action items
- → Upgrade to react 19.3.0 to pick up `<ViewTransition />` and `addTransitionType` facebook/react [plan]
- → Update the Rust compiler if your source contains non-ASCII identifiers, to avoid the ValidateNoSetStateInEffects panic facebook/react [plan]
- → Drop any usage of RCTInstanceRuntimeDiagnosticFlags or RCTInstanceSetRuntimeDiagnosticFlags in the bridgeless runtime facebook/react-native [monitor]
- → Re-read the v0.88.0-rc.0 changelog section before relying on the corrected entries facebook/react-native [monitor]
References
- [1] 19.3.0 (September 9, 2026) ↗ facebook/react
- [2] Add React 19.3.0 changelog entry ↗ facebook/react
- [3] [rust-compiler] Fix non-ASCII panic in ValidateNoSetStateInEffects ↗ facebook/react
- [4] [rust-compiler] Fix non-ASCII panic in ValidateNoSetStateInEffects (#37539) ↗ facebook/react
- [5] Forward-declare private-target types in RuntimeScheduler.h (#58271) ↗ facebook/react-native
- [6] Remove dead include from RCTInstance.h (#58181) ↗ facebook/react-native
- [7] Remove RCTInstance runtime diagnostic flags getter/setter (#58384) ↗ facebook/react-native
- [8] Cover `cxxreact:jsbigstring` with Stable API guards (#58393) ↗ facebook/react-native
- [9] Correct three entries in the v0.88.0-rc.0 changelog (#58421) ↗ facebook/react-native