16.0.0 (2026-07-11)
- feat!: remove legacy architecture (Paper) support (#3974) (58daac9), closes #3814 #3883 #3900 #if #3977
BREAKING CHANGES
- the legacy (Paper) React Native architecture is no
longer supported; the New Architecture is required.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RXhcR2ZgZBVnaaatD3Ad56
- fix: macOS Fabric teardown and dataDetectorTypes conversion
Address review feedback on #3974:
- Compile prepareForRecycle on macOS too. With the Paper
removeFromSuperview cleanup gone, macOS had no path calling
destroyWebView, leaking the KVO observer, script message handlers
and the underlying WKWebView on unmount/recycle.
react-native-macos ships prepareForRecycle in
RCTComponentViewProtocol, so the platform guard is unnecessary. - Fix the Fabric dataDetectorTypes conversion: the bit tests inspected
the local accumulator (always WKDataDetectorTypeNone) instead of
newViewProps.dataDetectorTypes, so the prop was always reset to none.
Also combine every requested type instead of at most one, matching
the RCT_MULTI_ENUM_CONVERTER behavior of the removed Paper manager. - Document the resulting minimum React Native version in the README
and Getting Started guide.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RXhcR2ZgZBVnaaatD3Ad56
- fix: restore default dataDetectorTypes/decelerationRate and automaticallyAdjustsScrollIndicatorInsets on Fabric
Address second round of review feedback on #3974:
- Initialize _dataDetectorTypes to WKDataDetectorTypePhoneNumber and
_decelerationRate to UIScrollViewDecelerationRateNormal in
RNCWebViewImpl. Fabric only converts a prop when it differs from the
codegen default, so the implementation must start from the same
values; previously both ivars were zero, creating the WKWebView with
no data detectors and stopping scroll deceleration dead. - Add automaticallyAdjustsScrollIndicatorInsets to the codegen spec and
map it in the Fabric component. It was previously exported only by
the removed Paper view manager and would have been silently ignored.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RXhcR2ZgZBVnaaatD3Ad56
- fix(android): implement setAutomaticallyAdjustsScrollIndicatorInsets no-op
Adding automaticallyAdjustsScrollIndicatorInsets to the codegen spec
added it to the generated RNCWebViewManagerInterface, so the Android
manager must override it like the other iOS-only props.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RXhcR2ZgZBVnaaatD3Ad56
- fix(ios): wire clearCache Fabric command and deregister cookie observer on teardown
- The Fabric clearCache command was a no-op stub; the removed Paper
manager used to forward it to RNCWebViewImpl clearCache:. Forward it
from the component view instead. - destroyWebView now removes the WKHTTPCookieStoreObserver registration
(added in visitSource when shared cookies are enabled) before
dropping _webView. WKHTTPCookieStore does not retain observers, and
dealloc cannot deregister once _webView is nil, so recycling could
leave callbacks targeting a dead object.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RXhcR2ZgZBVnaaatD3Ad56
- fix: drop iOS-only decelerationRate on Android/macOS and document the newSource contract
- Android and macOS no longer forward decelerationRate to the native
component. It is an iOS-only prop, but it can arrive through untyped
props, and the shared codegen spec types it as a Double, so the
"normal"/"fast" string shortcuts threw during Fabric prop conversion