Skip to content

Releases: tvinhas/react-native-macos

v0.85.3-tvinhas — React Native 0.85.3 for macOS

15 May 17:46

Choose a tag to compare

Companion release to v0.83.0-tvinhas. Brings react-native-macos up to upstream React Native 0.85.3 (the latest 0.85.x patch).

Tag named v0.85.3-tvinhas to reflect the exact upstream base (facebook/react-native@0.85.3). Supersedes the earlier v0.85.0-tvinhas cut, which is retired. Includes the full macOS RedBox 2.0 port plus the 6 post-review bug fixes.

Headline content

  • Absorbs facebook/react-native v0.83.0 → v0.85.3 (1,061 commits — skipping 0.84 npm tag, code-equivalent path)
  • Hermes V1 default enginehermes-compiler@250829098.0.10
  • iOS Prebuild as default
  • React 19.2.3
  • TurboModule Cxx cleanup wave
  • New Animation Backend — layout props animatable with useNativeDriver: true
  • @react-native/jest-preset extracted to a separate workspace package
  • Node ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0 floor

macOS-specific additions vs 0.83-tvinhas

  • Native AppKit port of upstream's new RedBox 2.0 dev error overlay (~1500 lines across RCTRedBox2Controller.mm + RCTRedBoxController.mm + +Internal.h headers + companion parsers). NSViewController + NSTableView + NSPasteboard + native keyDown: shortcuts (Esc / Cmd-R / Cmd-Option-C), borderless NSWindow at NSStatusWindowLevel. Wired in via #if TARGET_OS_OSX in RCTRedBox.mm.
  • All 9 macOS PRs filed upstream (PRs #2956#2964) carried forward.
  • Additional 0.85-merge fixes: RCTUtils.mm unclosed-#if recovery, RCTUIManager.mm new-arch stub retyping, RCTFrameTimingsObserver.mm macOS stub, RCTSurfaceTouchHandler.mm gesture guard, RCTScheduler.mm CADisplayLink via NSScreen (macOS 14+), RCTLogBoxView.mm legacy-arch guard, RCTDevLoadingView.mm dealloc branch.

Post-review bug fixes (commit c51879f)

A 5-engineer review surfaced 6 build-clean-but-runtime-broken bugs, all fixed:

  1. RedBox 2.0 dead-code gatingredBoxV2IOS() flag defaults false on all platforms; macOS RedBox 2.0 port was unreachable. Fixed with #if TARGET_OS_OSX unconditional select.
  2. Code-frame cell zero height — added explicit NSScrollView heightAnchor: 140.
  3. Horizontal scroll broken — flipped code label to autoresizing-mask sizing.
  4. Stack-frame Auto Layout warnings — closed the vertical constraint chain.
  5. Escape key broken in legacy RedBox@"\e" (literal "e") → @"\x1b".
  6. Section header missing top anchor — added topAnchor constraint.

Validated

  • RNTester-macOS xcodebuild green (Xcode 26.5, Apple Silicon, arm64, macOS 14.6 target). 51 MB .app.
  • react-native-test-app's example-macos builds clean via Verdaccio publish + pod install + xcodebuild. 49 MB ReactTestApp.app.
  • yarn flow-check, yarn lint, yarn test-typecheck all exit 0.

Consumer install

See MIGRATION-0.85.md (local doc) for the full resolutions / overrides block. The tldr is:

{
  "dependencies": {
    "react-native-macos": "https://github.com/tvinhas/react-native-macos/releases/download/v0.85.3-tvinhas/react-native-macos-0.85.3-tvinhas.tgz"
  }
}

Plus every @react-native/* workspace as a tarball URL in resolutions (yarn) or overrides (npm). npm: use "react-native-macos": "$react-native-macos" in overrides for the peer-dep collapse. Requires React ^19.2.3 and react-native@^0.85.0 (or pin 0.85.3).

Not signed, not on npm

Tarball URLs only. Same posture as 0.83-tvinhas.

v0.85.3-tvinhas.2 (immutable re-pack)

16 May 14:05

Choose a tag to compare

Immutable re-pack of v0.85.3-tvinhas. Same built react-native-macos@0.85.3-tvinhas as the v0.85.3-tvinhas tag, but the tarball's package.json pins its @react-native/* deps to plain npm 0.85.3 (byte-equivalent to upstream) instead of the 0.85.3-tvinhas literal.

Why a new tag instead of clobbering v0.85.3-tvinhas: npm caches a tarball body by URL+integrity. Mutating an asset at a fixed URL traps stale content in consumers' npm cache (~/.npm/_cacache) and the lockfile integrity no longer matches. Each re-pack now cuts a NEW immutable tag (.2, .3, ...); released assets are never replaced.

Asset set is intentionally minimal -- only the two artifacts NOT on the public npm registry:

  • react-native-macos-0.85.3-tvinhas.tgz (the fork itself)
  • react-native-macos-virtualized-lists-0.85.3-tvinhas.tgz (@react-native-macos/virtualized-lists, unpublished)
    Every @react-native/* package resolves from npm at 0.85.3 directly -- no per-package override needed. Consumers need exactly two overrides: "react-native-macos": "$react-native-macos" (name-collision guard) + the virtualized-lists tarball URL.

react-native-macos 0.83.0-tvinhas

14 May 00:01

Choose a tag to compare

Local-release of the 0.83-merge branch with 9 fork-side PRs collapsed for downstream consumption. Filed upstream as PRs microsoft#2956microsoft#2964 against microsoft/react-native-macos; published here as tarballs while review is in flight.

What's included

Beyond upstream 0.83-merge tip:

  • microsoft#2956 codegen — use REACT_NATIVE constant for npmPackageName
  • microsoft#2957 hermes-utils.rb — pick static_h vs main branch by RCT_HERMES_V1_ENABLED
  • microsoft#2958 RCTSwiftUI — expose React-RCTUIKit module to Swift consumers
  • microsoft#2959 Fabric — fix three macOS focus regressions (blur, sendAccessibilityEvent, VirtualView hooks)
  • microsoft#2960 rn-tester — restore RNTesterPods.xcodeproj/project.pbxproj (was missing from 0.83-merge)
  • microsoft#2961 fmt — patch base.h consteval gate via prepare_command for Xcode 26.x
  • microsoft#2962 RCTViewComponentView.mm — guard iOS-only methods so the file compiles on macOS
  • microsoft#2963 include React-RCTUIKit.podspec in npm publish files array
  • microsoft#2964 TouchableBounce + AccessibilityInfo — align macOS `[macOS]` carve-outs with upstream 0.83 restructures

End-to-end validated locally on Xcode 26.5 / Apple Silicon: RNTester-macOS.app + microsoft/react-native-test-app's example-macos both build cleanly with `hermesvm.framework` linked.

How to consume

Each `.tgz` is a packed workspace from the fork's monorepo with workspace dep refs resolved to `0.83.0-tvinhas` literals. Downstream consumers (Epistles, RNTA, etc.) reference the main `react-native-macos` tarball URL from `package.json` and add a `resolutions` (yarn) or `overrides` (npm) block mapping the transitive workspace deps to their tarball URLs from this release.

The 24 tarballs are:

  • `react-native-macos-0.83.0-tvinhas.tgz` — the main package
  • 7 direct workspace deps: `assets-registry`, `codegen`, `community-cli-plugin`, `gradle-plugin`, `js-polyfills`, `normalize-colors`, `virtualized-lists`
  • 16 transitive workspace deps (babel-preset, babel-plugin-codegen, debugger-frontend, debugger-shell, dev-middleware, etc.) — included for whoever needs them

`@react-native/tester` (the fork's internal test harness, ~122 MB) is excluded — not in any consumer's dep chain.

Caveats

  • Not signed, not on npm registry — tarball URLs only.
  • The `0.83-tvinhas` branch source on this fork still has `workspace:*` refs; only the packed tarballs carry the resolved `0.83.0-tvinhas` literals.
  • Deprecated once `microsoft/react-native-macos` ships an official `0.83.x` release.