Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
499 commits
Select commit Hold shift + click to select a range
7c603ee
Invalidate displayLink & deallocate RCTAnimatedModuleProvider before …
zeyap Nov 26, 2025
1493a0a
Extract TurboModuleManager from ReactHost (#54651)
javache Nov 27, 2025
7ba231d
Back out "Expose adding handlers API from `RCTDevSettings`" (#54719)
robhogan Nov 27, 2025
dba18bb
Remove unnecessary `ReactCxxErrorHandler` (#54704)
cortinico Nov 27, 2025
e073ca8
Add lib defs for Node.js fs.glob, etc. (#54695)
robhogan Nov 28, 2025
4982061
translation auto-update for batch 4/61 on master
Nov 29, 2025
e02990c
translation auto-update for batch 4/61 on master
Nov 29, 2025
c3a7ce3
Back out + fix of Back out "[react-native][PR] Expose adding handlers…
vzaidman Dec 1, 2025
0b09e6f
Remove unnecessary classes inside `com.facebook.react.uimanager.layou…
cortinico Dec 1, 2025
d49e07a
RCTTurboModule nits (#54692)
javache Dec 1, 2025
47c4568
Fix NullPointerException in PromiseImpl.reject by allowing nullable c…
ramanverse Dec 1, 2025
5884ec3
Remove stale references to removed jni target (#54746)
Dec 1, 2025
b0e754b
VirtualView: Ship `enableVirtualViewClippingWithoutScrollViewClipping…
yungsters Dec 1, 2025
52186a3
Fix screenshot typo (#54742)
sbuggay Dec 2, 2025
57c29fc
Add optional screenshot argument to FrameTimingSequence (#54743)
sbuggay Dec 2, 2025
e167faa
Implementation of transform, border radius, and background color prop…
coado Dec 2, 2025
49267d4
Cleanup unnecessary logging on ReactHostImpl
cortinico Dec 2, 2025
0b1f862
Update debugger-frontend from 7f25433...4631a6d (#54741)
Dec 2, 2025
ae01be8
Enable RNDT standalone shell by default (#54754)
huntie Dec 2, 2025
064a385
Fix gitignore paths for debugger-frontend (#54756)
huntie Dec 2, 2025
257f036
Add ISerialization interface (#52624)
tsaichien Dec 2, 2025
a5e6add
Remove feature flag cxxNativeAnimatedRemoveJsSync (#54740)
zeyap Dec 2, 2025
4bb24e2
Rename jsi/hermes.h to jsi/hermes-interfaces.h (#54569)
lavenzg Dec 3, 2025
b447d26
Frame screenshot event generation (#54744)
sbuggay Dec 3, 2025
41eace0
Replace `glob@^7.0.0` with `tinyglobby@^0.2.15` (#54737)
kitten Dec 3, 2025
5bb3a6d
fix: Use FQCN to avoid collisions in PackageList.java (#54736)
riteshshukla04 Dec 3, 2025
f3c9a8d
Frame screenshots capture implementation (#54745)
sbuggay Dec 4, 2025
9221772
BeginDrawing: INTENDED_VSYNC_TIMESTAMP -> VSYNC_TIMESTAMP (#54765)
Dec 4, 2025
31a0c9a
Add frames category (#54768)
Dec 4, 2025
cd055e9
Specify correct category for SetLayerTreeId event (#54769)
Dec 4, 2025
3084224
Add changelog for v0.83.0-rc.4 (#54767)
huntie Dec 4, 2025
0874746
Fix remaining missing debugger build flags for open source builds (#5…
huntie Dec 4, 2025
5634e8a
fix(iOS): Respect cancelsTouchesInView in RCTSurfaceTouchHandler (#54…
intmain Dec 4, 2025
d23502b
Add a feature flag for (#54777)
cortinico Dec 4, 2025
a3a890f
Deploy 0.292.0 to xplat (#54788)
SamChou19815 Dec 4, 2025
284d841
Remove deprecated NativeKind class from React Native Android (#54773)
mdvacca Dec 4, 2025
1a28d9e
Update debugger-frontend from 4631a6d...40e2a7d (#54780)
sbuggay Dec 4, 2025
95cc1e7
Add support for Unions in react-native-codegen & Compat Checker (#54489)
arushikesarwani94 Dec 5, 2025
253fdf4
Update Android's adjustsFontSizeToFit algorithm (#54715)
j-piasecki Dec 5, 2025
c800503
Exclude legacy Hermes targets from single host assertion (#54784)
huntie Dec 5, 2025
d7ef651
Pass families to Native Animated (#54613)
Dec 5, 2025
d04e152
Introduce `AnimationBackendCommitHook` (#54138)
Dec 5, 2025
ade19e8
small bugs fixes in C++ Animated that were not observed in production…
sammy-SC Dec 5, 2025
d2b065f
Fix CQS signal readability-braces-around-statements in xplat/jsi/jsi …
Dec 5, 2025
a9a0268
Mark virtual text view descendants clickable
Dec 5, 2025
63b0aef
Clean up weird comment in ReactScrollView (#54807)
joevilches Dec 6, 2025
6be156e
Deploy 0.293.0 to xplat (#54810)
gkz Dec 6, 2025
e4a5a56
Reduce the screenshots size (#54800)
Dec 6, 2025
d176e09
translation auto-update for batch 7/61 on master
Dec 7, 2025
8347cc4
Fix text clipping on Android 15+ due to useBoundsForWidth change (#54…
chrfalch Dec 8, 2025
2efa274
Fix outdated XHRExampleBinaryUpload example (#54803)
huntie Dec 8, 2025
38513f7
Fix multipart/form-data request payload previews on Android (#54804)
huntie Dec 8, 2025
dc73ec4
fix: RNGP using node invocation non-compatible with Gradle Compilatio…
tjzel Dec 8, 2025
f97b9a5
fix(types): add missing standard properties to URL and URLSearchParam…
Dec 8, 2025
9011316
Enable `fixTextClippingAndroid15useBoundsForWidth` in Experimental (#…
cortinico Dec 9, 2025
64bb0d5
Hold lock while changing atomic running_ in TaskDispatchThread (#54817)
Dec 9, 2025
b1b2cab
Back out "fix: RNGP using node invocation non-compatible with Gradle …
cortinico Dec 9, 2025
d0e9b9c
feat: Export usePressability hook as public API (#54813)
natew Dec 9, 2025
602a2d2
Fix action labels on iOS, fixes #53496 (#54286)
maxencehenneron Dec 9, 2025
7bee31c
Implement onStateChange in TracingStateListener jni interface (#54824)
Dec 9, 2025
4d6a450
PerfMonitor to subscribe to InspectorTarget tracing events (#54825)
Dec 9, 2025
814a2cd
Hide Performance Monitor when tracing in RNDT (#54828)
Dec 9, 2025
3e9083b
nullcheck result of getAnimatedNode in NativeAnimatedNodesManager::up…
zeyap Dec 9, 2025
7cecf15
expose if there are any connected devices to dev middleware and addin…
vzaidman Dec 10, 2025
5e81ac9
make the default debugger-shell spawn command unset ELECTRON_RUN_AS_N…
vzaidman Dec 10, 2025
1c282d7
move default React Native DevTools launching params downstream (#54528)
vzaidman Dec 10, 2025
753c1e1
fixed node types for style text "validateStream" (#54778)
vzaidman Dec 10, 2025
c36665f
Fix hash generation for declare const types in API snapshot #54818 (#…
emily8rown Dec 10, 2025
e7f5618
Fix JS API breaking change detection to compare against merge base (#…
emily8rown Dec 10, 2025
c31a5a8
Add support for shadow props to AnimationBackend (#54728)
coado Dec 10, 2025
41c50fd
Fix build issues when RCT_REMOVE_LEGACY_ARCH is turned on internally …
cipolleschi Dec 10, 2025
dd1f83e
fix: RNGP CCache compatibility (#54829)
tjzel Dec 10, 2025
700d320
fix hit test for components using legacy module interop (#54802)
kruczy Dec 10, 2025
2ce3686
fix(test): fix RNTester iOS unit and integration tests (#53848)
artus9033 Dec 10, 2025
f9b0cf8
Add changelog for 0.83.0 (#54844)
huntie Dec 10, 2025
17b3c1c
ReactDelegate: make onBackPressed return correct status
RSNara Dec 10, 2025
80e384a
Add listener API to OverrideColorScheme for dynamic dark mode updates…
alanleedev Dec 10, 2025
6bf4840
translation auto-update for batch 6/61 on master
Dec 11, 2025
37bf285
fix: add missing experimental_ types in manual .d.ts (#54797)
tjzel Dec 11, 2025
ac8fa25
fix: reset listenerCount when invalidating RCTEventEmitter (#54809)
brainbicycle Dec 11, 2025
31a9eee
Add missing props to AnimatedPropsRegistry
j-piasecki Dec 11, 2025
d67fc70
Fix jni aborts when turbomodule creation throws (#54849)
RSNara Dec 11, 2025
28d6ba1
Move state of PackagerConnectionSettings to companion object (#54852)
cortinico Dec 11, 2025
18ebab6
remove ELECTRON_RUN_AS_NODE instead of setting it to empty string (#5…
vzaidman Dec 11, 2025
5c3bfda
Add optional props generation support (#54724)
Dec 11, 2025
05599d0
Add fixtures for optional props generation (#54725)
Dec 11, 2025
e581fa4
Implement optional object props generation (#54726)
Dec 11, 2025
dd390db
Add fixtures for optional object generation (#54727)
Dec 11, 2025
7d2a7c9
Deploy 0.294.0 to xplat (#54862)
marcoww6 Dec 12, 2025
cc9164c
Move JavaScript exports rewrites to publishConfig/prepack (#54857)
huntie Dec 12, 2025
b7ca048
Remove Perf and Network tabs from Element Inspector (#54868)
huntie Dec 12, 2025
72097f0
Remove repeat checkout step from diff-js-api-changes (fix CI) (#54865)
huntie Dec 12, 2025
41380f3
Deprecate XHRInterceptor and WebSocketInterceptor APIs (#54869)
huntie Dec 12, 2025
0fabe26
Make image prefetch JNI batching thread-safe (#54861)
Dec 12, 2025
c4c587e
DevSupport - fix small bugs with Host change dialog (#54855)
cortinico Dec 12, 2025
07bd24e
Align default transform profile Babel preset with legacy Hermes - dro…
robhogan Dec 12, 2025
b9ac408
chore(ci): update GitHub Actions to latest versions with Node.js 24 s…
salmanmkc Dec 15, 2025
076e6a1
Use prebuilt Hermes by default when building Android (#54707)
j-piasecki Dec 15, 2025
66d1ec0
Use nightly Hermes by default when building iOS in OSS (#54864)
j-piasecki Dec 15, 2025
cd4744c
Add support for margin and padding props to AnimationBackend (#54738)
coado Dec 15, 2025
9931aeb
Add support for position props (#54752)
coado Dec 15, 2025
c16eb23
make run-ci-javascript-tests.js use `flow full-check` (#54883)
panagosg7 Dec 15, 2025
c400b88
Add ResourceReceivedData trace event for Performance timeline (#54870)
emily8rown Dec 16, 2025
2abbd47
Fix type of constantsToExport arg (#54718)
javache Dec 16, 2025
1e1a81f
Update debugger-frontend from 40e2a7d...c85f7e9 (#54896)
huntie Dec 16, 2025
498514d
Fix diff-js-api-changes CI job (#54900)
huntie Dec 16, 2025
a22ab42
Loosen JS API breaking change detection, improve Danger message (#54901)
huntie Dec 16, 2025
73d3429
fixed issue with xcconfig being overwritten (#54838)
chrfalch Dec 16, 2025
0c947c8
Fix diffApiSnapshot-test (#54903)
huntie Dec 16, 2025
296f580
Remove checkout the PR sha from danger-pr.yml (#54904)
cipolleschi Dec 16, 2025
f9346fb
translation auto-update for batch 7/61 on master
Dec 17, 2025
4e0b923
Fix prototype check in AnimatedObject.js (#54820)
maman Dec 17, 2025
df9d31b
Use precompipled binaries by default (#54895)
cipolleschi Dec 17, 2025
ca2fc14
Fix mask-based clipping for < API 27 (#54914)
Abbondanzo Dec 17, 2025
ec7b41f
Sync RCTNativeSampleTurboModuleSpec (#54918)
javache Dec 17, 2025
782dc0e
Add support for border width props to AnimationBackend (#54753)
coado Dec 17, 2025
e744329
Add support for filter props to Animation Backend (#54890)
coado Dec 17, 2025
4de9242
Add support for outline props to the AnimationBackend (#54897)
coado Dec 17, 2025
d25af38
Fix backwards-compat for ModuleConstants<::Builder> (#54919)
javache Dec 17, 2025
1ce9946
Rollout useShadowNodeStateOnClone in featureflag config (#54921)
javache Dec 17, 2025
9692e64
Fix binary FormData uploads on Android (#54917)
huntie Dec 17, 2025
33005a4
Gate requestBody processing behind BuildConfig.DEBUG (#54920)
huntie Dec 17, 2025
c7f433a
Remove the legacy arch by default (#54894)
cipolleschi Dec 17, 2025
3bf7a09
Support ReadonlyArray in react-native-codegen (#54924)
marcoww6 Dec 18, 2025
a6b76c0
Support Readonly in react-native-codegen (#54925)
marcoww6 Dec 18, 2025
9c840bf
create fantom benchmark test for animated with and without animation …
zeyap Dec 18, 2025
ee0ff63
Deploy 0.295.0 to xplat (#54939)
panagosg7 Dec 19, 2025
68b0c2a
Fix the build for `unknown` annotation (#54941)
marcoww6 Dec 19, 2025
f41f3bf
Transform all Flow legacy utility types (`$NonMaybeType`) to TypeScri…
marcoww6 Dec 19, 2025
33b2d6d
Add support for flex props to AnimationBackend (#54898)
coado Dec 19, 2025
d35904d
Updating frontend assets to add header for open-in-editor sources pan…
emily8rown Dec 19, 2025
62c567f
Add changelog for 0.83.1 (#54928)
huntie Dec 19, 2025
84e408c
Use dynamic for updates in Animated with Animation Backend (#54872)
Dec 19, 2025
3650ae3
Add support for max/min width/height props to Animation Backend (#54945)
coado Dec 19, 2025
00eba55
Upgrade node-forge to v1.3.2 (#54949)
zeyap Dec 19, 2025
8bc6214
Add test for width, height and opacity (#54873)
Dec 22, 2025
c52d30e
Add synchronous updates to the AnimatedPropsRegistry (#54878)
Dec 22, 2025
6270051
Add fallback value for request body previews (#54961)
huntie Dec 22, 2025
bdcda15
Add error log when failing to convert CDP messageStr (#54962)
huntie Dec 22, 2025
c00173f
add debug statements to debugger shell launching path (#54929)
vzaidman Dec 22, 2025
c8e09e9
Add support for gzipped request body previews (#54963)
huntie Dec 22, 2025
2624e2f
Transform mixed to unknown in xplat/js (#54955)
marcoww6 Dec 22, 2025
894a1f1
Transform mixed to unknown in xplat/js (#54954)
marcoww6 Dec 22, 2025
dc06a71
Add Flow lib defs for Node's zlib zstd support (#54616)
robhogan Dec 23, 2025
391fc3c
Add default case to EventEmitterH generator switch statement (#54950)
alanleedev Dec 23, 2025
75c00c3
translation auto-update for batch 0/61 on master
Dec 24, 2025
17cba6e
Back out "add debug statements to debugger shell launching path" (#54…
cipolleschi Dec 24, 2025
2b74f98
Add Flow lib defs for Node.js streams fromWeb/toWeb (#54615)
robhogan Dec 26, 2025
e6923dd
React 19.2.3 sync int React Native OSS (#54966)
cipolleschi Dec 29, 2025
0fe23d7
Fix modal hover interception to call the correct super method (#54991)
MegaManSec Dec 29, 2025
53944ea
Make TurboModuleBinding constructor private
RSNara Dec 29, 2025
84c8106
Make TurboModuleBinding accept a provider with a runtime
RSNara Dec 29, 2025
7a6a6ae
Stop storing runtime ptr in turbomodule provider
RSNara Dec 29, 2025
e4eb64d
Refactor: Read interop flag directly from feature flags (#54973)
RSNara Dec 29, 2025
cb3015d
Refactor: Clean up bindings installation
RSNara Dec 29, 2025
1c3a5e1
Compile out UIWindowLevelStatusBar usage (#54985)
sbuggay Dec 29, 2025
fef5b84
fix(android): re-enable mBackPressedCallback after invokeDefaultOnBac…
anferrat Dec 29, 2025
eb1c4c1
Compile out UIInterfaceOrientation (#54997)
sbuggay Dec 30, 2025
61a838d
Compile out RCTUIStatusBarManager (#54998)
sbuggay Dec 30, 2025
c98494b
Add Flow lib defs for newer Node.js fs APIs (#54992)
robhogan Dec 30, 2025
50f310d
translation auto-update for batch 4/61 on master
Dec 31, 2025
07d2255
Align Flow lib defs for Node.js path with v24 (#55006)
robhogan Dec 31, 2025
dee203b
translation auto-update for batch 6/61 on master
Jan 2, 2026
83b21bb
Align Flow lib defs for Node.js crypto with v24 (#55009)
robhogan Jan 2, 2026
8084fe6
Align Flow lib defs for Node.js os with v24 (#55014)
robhogan Jan 2, 2026
e73ab78
Enable Network Inspection flags by default (#55015)
huntie Jan 2, 2026
f5c1126
Align Flow lib defs for Node.js util with v24 (#55016)
robhogan Jan 2, 2026
4862cc7
Align Flow lib defs for Node.js buffer with v24 (#55017)
robhogan Jan 2, 2026
cead39c
Align Flow lib defs for Node.js url with v24 (#55021)
robhogan Jan 2, 2026
89ac112
removed unstable functions tracking the existance of connected device…
vzaidman Jan 4, 2026
be91c26
Fix copy-paste error in DevToolsRuntimeSettings (#55010)
Jan 5, 2026
0241b59
translation auto-update for batch 2/61 on master
Jan 5, 2026
f36fd46
do not spellcheck vendored scripts (#55020)
Simek Jan 5, 2026
65cc2e5
fix `print-packages` script (#55019)
Simek Jan 5, 2026
a1e4343
Delete print-packages script (#55034)
huntie Jan 5, 2026
f2948fb
Remove unused code from scm-utils (#55036)
huntie Jan 5, 2026
492df85
Cleanup useNativeEqualsInNativeReadableArrayAndroid flag (#55030)
javache Jan 5, 2026
913e869
Cleanup useNativeTransformHelperAndroid flag (#55031)
javache Jan 5, 2026
8f10b33
Breaking: Bump minimum Node.js version to v22.11 (prev LTS) (#55038)
robhogan Jan 5, 2026
32c3d2f
Pass `unstable_transformProfile` through Babel `caller` API and fall …
robhogan Jan 5, 2026
2166ab7
Replace CDP messageStr conversion error with assert (#55041)
huntie Jan 5, 2026
4d93597
fix(ci): forward-port release integration fixes from 0.83
Saadnajmi Sep 15, 2026
a976521
fix(codegen): match package-relative source paths
Saadnajmi Sep 15, 2026
87adb52
fix(types): canonicalize checkout-relative API imports
Saadnajmi Sep 15, 2026
2b97335
fix(pods): resolve dependency package fallback
Saadnajmi Sep 15, 2026
07921f8
fix(prebuild): fail invalid platform requests
Saadnajmi Sep 15, 2026
584cfd3
fix(text): preserve explicit custom font weights
Saadnajmi Sep 16, 2026
581aa73
fix(release): publish prepared Changesets versions with one tag
Saadnajmi Sep 16, 2026
ac2c766
fix(release): validate prepared version PRs against their base
Saadnajmi Sep 16, 2026
809fa80
test(release): isolate invalid publication graph fixtures
Saadnajmi Sep 16, 2026
75926e2
fix(packaging): complete fork package dependencies and notices
Saadnajmi Sep 17, 2026
ef79dc1
fix(release): preserve fork workspace version relationships
Saadnajmi Sep 17, 2026
35a72da
fix(macos): initialize and dismiss RedBox through its controller
Saadnajmi Sep 17, 2026
3c658c0
fix(pods): resolve platform-specific framework dependency headers
Saadnajmi Sep 17, 2026
b18a9d3
fix(graphics): use canonical HostPlatformColor header import
Saadnajmi Sep 17, 2026
5a7c77b
fix(macos): decouple core views from the optional text framework
Saadnajmi Sep 17, 2026
d7d9fc0
fix(pods): declare direct RCTUIKit framework dependencies
Saadnajmi Sep 17, 2026
ea7972a
fix(macos): link UniformTypeIdentifiers from Fabric
Saadnajmi Sep 17, 2026
0b1306d
fix(pods): link CoreGraphics from its graphics consumer
Saadnajmi Sep 17, 2026
a9e5b9e
fix(pods): link CoreGraphics from the sample module
Saadnajmi Sep 17, 2026
29191b6
fix(macos): size RedBox rows from native table content
Saadnajmi Sep 17, 2026
ff90a9b
fix(fabric): preserve canonical platform headers in frameworks
Saadnajmi Sep 17, 2026
52c69fc
fix(hermes): resolve default artifacts from branch metadata
Saadnajmi Sep 16, 2026
2dd03ee
test(hermes): validate each branch metadata without fixed versions
Saadnajmi Sep 17, 2026
685d05a
fix(packaging): include the Hermes V1 source tag
Saadnajmi Sep 17, 2026
f2467af
test(release): validate graph policy across private and public branches
Saadnajmi Sep 17, 2026
05d941b
fix(release): honor local Changesets bases and repository remotes
Saadnajmi Sep 17, 2026
c440e99
fix(release): generate exported package types before publication
Saadnajmi Sep 17, 2026
4157235
fix(release): preserve private upstream workspace versions
Saadnajmi Sep 17, 2026
0145de8
fix(types): preserve canonical fork event declarations
Saadnajmi Sep 17, 2026
e8a68d0
fix(hermes): preserve macOS slices and symbols during recomposition
Saadnajmi Sep 17, 2026
febd7d6
fix(flow): type Hermes framework validation metadata
Saadnajmi Sep 17, 2026
4de3e75
fix(flow): normalize Hermes metadata command output
Saadnajmi Sep 20, 2026
f741b50
fix(types): resolve private workspace dependencies during generation
Saadnajmi Sep 21, 2026
0a6df26
Merge React Native 0.84 fork point
Saadnajmi Jul 16, 2026
ee4f785
Align macOS key event payload typing
Saadnajmi Jul 14, 2026
4c48c82
Regenerate API snapshot after 0.84 merge
Saadnajmi Jul 14, 2026
7bc7c09
Port React Native 0.84 Apple sources to macOS
Saadnajmi Jul 14, 2026
bb60a2c
Pin Hermes to the 0.84-compatible source revision
Saadnajmi Jul 14, 2026
63777de
Keep macOS accessibility proxy state in sync
Saadnajmi Jul 14, 2026
44426c2
Unify keyboard events on the upstream public model
Saadnajmi Jul 14, 2026
0edd547
Keep macOS Text style overrides in scope
Saadnajmi Jul 15, 2026
7c6d87c
Keep debugger shell private in the macOS workspace
Saadnajmi Jul 15, 2026
f02b1ea
Skip unavailable TextInput accessory APIs on visionOS
Saadnajmi Jul 15, 2026
08da3bc
Avoid unavailable UIScreen fallback on visionOS
Saadnajmi Jul 15, 2026
cbf8c9d
Fix inherited high-severity CodeQL findings
Saadnajmi Jul 15, 2026
ca64b7c
Fix remaining Flow errors after the 0.84 merge
Saadnajmi Jul 15, 2026
d61f9fc
Parse Hermes stack frames without backtracking
Saadnajmi Jul 15, 2026
7578460
Harden remaining CodeQL findings
Saadnajmi Jul 15, 2026
f964686
Parse LogBox errors without backtracking
Saadnajmi Jul 15, 2026
a4b7645
Avoid shell interpolation in release tooling
Saadnajmi Jul 15, 2026
7f7dc66
Fix merged import ordering warnings
Saadnajmi Jul 15, 2026
63543eb
Fix merged PlatformColor formatting
Saadnajmi Jul 15, 2026
40f4da0
docs: add minor merge command
Saadnajmi Jul 16, 2026
467e3e1
fix: regenerate dependencies after upstream rebase
Saadnajmi Jul 16, 2026
cc1783a
fix: align tooling after upstream rebase
Saadnajmi Jul 16, 2026
63f3e38
chore: regenerate API snapshot after upstream rebase
Saadnajmi Jul 16, 2026
4fbf324
fix: restore 0.84 Hermes pod resolution
Saadnajmi Jul 16, 2026
b49b214
fix: preserve native build after upstream rebase
Saadnajmi Jul 16, 2026
8e0cb54
style: format codegen regression test
Saadnajmi Jul 16, 2026
a0507de
fix: select one Fabric view host platform
Saadnajmi Jul 16, 2026
1daba28
docs: defer minor merge skill until stack completion
Saadnajmi Jul 16, 2026
9d45476
chore: preserve Nx removal in the 0.84 lock
Saadnajmi Sep 16, 2026
4d996c7
fix(hermes): resolve source metadata consistently in CI
Saadnajmi Sep 17, 2026
6b6e554
fix: preserve the optional Hermes source reference and package contents
Saadnajmi Sep 17, 2026
226a7ab
fix(ci): apply reviewed release validation repairs
Saadnajmi Sep 22, 2026
94cd29f
fix(ci): apply reviewed release validation repairs
Saadnajmi Sep 22, 2026
9b59f96
fix(ci): align lock metadata with the public registry
Saadnajmi Sep 22, 2026
8a896eb
fix(ci): align lock metadata with the public registry
Saadnajmi Sep 22, 2026
88032ae
fix(ci): refresh validated snapshots and platform fixtures
Saadnajmi Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .ado/jobs/npm-publish.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
jobs:
- job: NPMPublish
displayName: NPM Publish
# Also disable direct template consumers until ADO publication is re-enabled.
condition: false
pool:
name: cxeiss-ubuntu-20-04-large
image: cxe-ubuntu-20-04-1es-pt
Expand Down
3 changes: 3 additions & 0 deletions .ado/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,8 @@ extends:
stages:
- stage: NPM
dependsOn: []
# GitHub Trusted Publishing owns releases. Retain the ADO publication
# path for explicit re-enablement after its contract/auth are reviewed.
condition: false
jobs:
- template: /.ado/jobs/npm-publish.yml@self
274 changes: 41 additions & 233 deletions .ado/scripts/configure-publish.mts
Original file line number Diff line number Diff line change
@@ -1,237 +1,45 @@
#!/usr/bin/env node
import { $, argv, echo, fs } from 'zx';
import { resolve } from 'node:path';

const isGitHubActions = process.env['GITHUB_ACTIONS'] === 'true';

const NPM_TAG_NEXT = 'next';

export type ReleaseState = 'STABLE_IS_LATEST' | 'STABLE_IS_NEW' | 'STABLE_IS_OLD';

export interface ReleaseStateInfo {
state: ReleaseState;
currentVersion: number;
latestVersion: number;
nextVersion: number;
}

export interface TagInfo {
npmTags: string[];
prerelease?: string;
}

interface Options {
'mock-branch'?: string;
tag?: string;
verbose?: boolean;
}

function enablePublishingOnAzurePipelines() {
echo(`##vso[task.setvariable variable=publish_react_native_macos]1`);
}

function enablePublishingOnGitHubActions() {
if (process.env['GITHUB_OUTPUT']) {
fs.appendFileSync(process.env['GITHUB_OUTPUT'], `publish_react_native_macos=1\n`);
}
}

export function isMainBranch(branch: string): boolean {
return branch === 'main';
}

export function isStableBranch(branch: string): boolean {
return /^\d+\.\d+-stable$/.test(branch);
}

export function versionToNumber(version: string): number {
const [major, minor] = version.split('-')[0].split('.');
return Number(major) * 1000 + Number(minor);
}

function getTargetBranch(): string | undefined {
// Azure Pipelines
if (process.env['TF_BUILD'] === 'True') {
const targetBranch = process.env['SYSTEM_PULLREQUEST_TARGETBRANCH'];
return targetBranch?.replace(/^refs\/heads\//, '');
}

// GitHub Actions
if (process.env['GITHUB_ACTIONS'] === 'true') {
return process.env['GITHUB_BASE_REF'];
}

return undefined;
}

async function getCurrentBranch(options: Options): Promise<string> {
const targetBranch = getTargetBranch();
if (targetBranch) {
return targetBranch;
}

// Azure DevOps Pipelines
if (process.env['TF_BUILD'] === 'True') {
const sourceBranch = process.env['BUILD_SOURCEBRANCHNAME'];
if (sourceBranch) {
return sourceBranch.replace(/^refs\/heads\//, '');
}
}

// GitHub Actions
if (process.env['GITHUB_ACTIONS'] === 'true') {
const headRef = process.env['GITHUB_HEAD_REF'];
if (headRef) return headRef;

const ref = process.env['GITHUB_REF'];
if (ref) return ref.replace(/^refs\/heads\//, '');
}

if (options['mock-branch']) {
return options['mock-branch'];
}

const result = await $`git rev-parse --abbrev-ref HEAD`;
return result.stdout.trim();
}

function getPublishedVersionSync(tag: 'latest' | 'next'): number {
const result = $.sync`npm view react-native-macos@${tag} version`;
return versionToNumber(result.stdout.trim());
}

export function getReleaseState(
branch: string,
getVersion: (tag: 'latest' | 'next') => number = getPublishedVersionSync,
): ReleaseStateInfo {
if (!isStableBranch(branch)) {
throw new Error('Expected a stable branch');
}

const latestVersion = getVersion('latest');
const nextVersion = getVersion('next');
const currentVersion = versionToNumber(branch);

let state: ReleaseState;
if (currentVersion === latestVersion) {
state = 'STABLE_IS_LATEST';
} else if (currentVersion < latestVersion) {
state = 'STABLE_IS_OLD';
import {execFileSync} from 'node:child_process';
import {appendFileSync} from 'node:fs';
import {parseArgs} from 'node:util';
import {
createPublishPlan,
isStableBranch,
publishPrepared,
readChangesetStatus,
readWorkspaces,
} from '../../.github/scripts/publishing-contract.mjs';

const {values: options} = parseArgs({options: {
'mock-branch': {type: 'string'},
verbose: {type: 'boolean'},
publish: {type: 'boolean'},
}});
const branch = process.env.GITHUB_REF_NAME ?? process.env.BUILD_SOURCEBRANCHNAME ??
options['mock-branch'] ?? execFileSync('git', ['branch', '--show-current'], {encoding: 'utf8'}).trim();
const isPullRequest = Boolean(process.env.GITHUB_BASE_REF ||
process.env.SYSTEM_PULLREQUEST_TARGETBRANCH || process.env.BUILD_REASON === 'PullRequest');

function output(name: string, value: string) {
if (process.env.TF_BUILD === 'True') console.log(`##vso[task.setvariable variable=${name}]${value}`);
if (process.env.GITHUB_OUTPUT) appendFileSync(process.env.GITHUB_OUTPUT, `${name}=${value}\n`);
}

output('publish_react_native_macos', '0');
if (!isStableBranch(branch) || isPullRequest) {
console.log(`Publication disabled for ${isPullRequest ? 'pull requests' : branch}`);
} else {
const plan = await createPublishPlan({
branch,
status: await readChangesetStatus(),
workspaces: readWorkspaces(),
});
if (options.verbose) console.log(JSON.stringify(plan, null, 2));
output('publishTag', plan.tag ?? '');
if (plan.packages.length) {
output('publish_react_native_macos', '1');
if (options.publish) publishPrepared(plan);
} else {
state = 'STABLE_IS_NEW';
}

return { state, currentVersion, latestVersion, nextVersion };
}

export function getPublishTags(
stateInfo: ReleaseStateInfo,
branch: string,
tag: string = NPM_TAG_NEXT,
): TagInfo {
const { state, currentVersion, nextVersion } = stateInfo;

switch (state) {
case 'STABLE_IS_LATEST':
// Patching the current latest version
return { npmTags: ['latest', branch] };

case 'STABLE_IS_OLD':
// Patching an older stable version
return { npmTags: [branch] };

case 'STABLE_IS_NEW': {
if (tag === 'latest') {
// Promoting this branch to latest
const npmTags = ['latest', branch];
if (currentVersion > nextVersion) {
npmTags.push(NPM_TAG_NEXT);
}
return { npmTags };
}

// Publishing a release candidate
if (currentVersion < nextVersion) {
throw new Error(
`Current version cannot be a release candidate because it is too old: ${currentVersion} < ${nextVersion}`,
);
}

return { npmTags: [NPM_TAG_NEXT], prerelease: 'rc' };
}
}
}

async function enablePublishing(tagInfo: TagInfo, options: Options) {
const [primaryTag, ...additionalTags] = tagInfo.npmTags;

// Output publishTag for subsequent pipeline steps
echo(`##vso[task.setvariable variable=publishTag]${primaryTag}`);
if (process.env['GITHUB_OUTPUT']) {
fs.appendFileSync(process.env['GITHUB_OUTPUT'], `publishTag=${primaryTag}\n`);
}

// Output additional tags
if (additionalTags.length > 0) {
const tagsValue = additionalTags.join(',');
echo(`##vso[task.setvariable variable=additionalTags]${tagsValue}`);
if (process.env['GITHUB_OUTPUT']) {
fs.appendFileSync(process.env['GITHUB_OUTPUT'], `additionalTags=${tagsValue}\n`);
}
}

// Don't enable publishing in PRs
if (!getTargetBranch()) {
if (isGitHubActions) {
enablePublishingOnGitHubActions();
} else if (process.env['TF_BUILD'] === 'True') {
enablePublishingOnAzurePipelines();
} else {
echo('ℹ️ Local run — publishing not enabled');
}
}
}

const isDirectRun =
process.argv[1] != null &&
resolve(process.argv[1]) === new URL(import.meta.url).pathname;

if (isDirectRun) {
// Parse CLI args using zx's argv (minimist)
const options: Options = {
'mock-branch': argv['mock-branch'] as string | undefined,
tag: typeof argv['tag'] === 'string' ? argv['tag'] : NPM_TAG_NEXT,
verbose: Boolean(argv['verbose']),
};

const branch = await getCurrentBranch(options);
if (!branch) {
echo('❌ Could not get current branch');
process.exit(1);
}

const log = options.verbose ? (msg: string) => echo(`ℹ️ ${msg}`) : () => {};

try {
if (isMainBranch(branch)) {
// Nightlies are currently disabled — skip publishing from main
echo('ℹ️ On main branch — nightly publishing is currently disabled');
} else if (isStableBranch(branch)) {
const stateInfo = getReleaseState(branch);
log(`react-native-macos@latest: ${stateInfo.latestVersion}`);
log(`react-native-macos@next: ${stateInfo.nextVersion}`);
log(`Current version: ${stateInfo.currentVersion}`);
log(`Release state: ${stateInfo.state}`);

const tagInfo = getPublishTags(stateInfo, branch, options.tag);
log(`Expected npm tags: ${tagInfo.npmTags.join(', ')}`);

await enablePublishing(tagInfo, options);
} else {
echo(`ℹ️ Branch '${branch}' is not main or a stable branch — skipping`);
}
} catch (e) {
echo(`❌ ${(e as Error).message}`);
process.exit(1);
console.log(plan.reason ?? 'All prepared versions are already published');
}
}
8 changes: 7 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
"access": "public",
"baseBranch": "origin/main",
"bumpVersionsWithWorkspaceProtocolOnly": true,
"changelog": "@changesets/cli/changelog",
"commit": false,
"ignore": [],
"fixed": [["react-native-macos", "@react-native-macos/virtualized-lists"]],
"ignore": ["react-native-macos", "@react-native/tester"],
"privatePackages": {
"version": false,
"tag": false
},
"linked": []
}
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ packages/*/dist
packages/*/types_generated
packages/debugger-frontend/dist/**/*
packages/react-native-codegen/lib
private/react-native-codegen-typescript-test/lib/**/*
**/Pods/*
**/*.macos.js
**/*.windows.js
4 changes: 2 additions & 2 deletions .flowconfig
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ module.name_mapper='^@react-native/fantom$' -> '<PROJECT_ROOT>/private/react-nat
module.name_mapper='^@react-native/fantom/\(.*\)$' -> '<PROJECT_ROOT>/private/react-native-fantom/\1'
module.name_mapper='^@react-native/core-cli-utils$' -> '<PROJECT_ROOT>/packages/core-cli-utils/src/index.flow.js'
; macOS]
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\|ktx\)$' -> '<PROJECT_ROOT>/packages/react-native/Libraries/Image/RelativeImageStub'
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\|xml\|ktx\|heic\|heif\)$' -> '<PROJECT_ROOT>/packages/react-native/Libraries/Image/RelativeImageStub'

module.system.haste.module_ref_prefix=m#

Expand Down Expand Up @@ -103,4 +103,4 @@ untyped-import
untyped-type-import

[version]
^0.289.0
^0.295.0
Loading
Loading