Polyfills and patches missing or partially supported web and core APIs.
There are several APIs which React Native does not support. When available, they usally are not spec-conformant. This package aims to fill that gap by providing polyfills and patches to said APIs.
As of React Native v0.63.3:
URL and URLSearchParams are partially implemented.FormData is partially implementedFileReader.readAsArrayBuffer is not implementedReadableStream is not supported and, by extension, Response.body is not implemented. Related discussions:btoa and atob are not supportedTextEncoder and TextDecoder are not supported$ npm install react-native-polyfill-globals
Install the above as necessary.
FormData.set Blobs by FormDataFileReader.readAsArrayBufferURL and URLSearchParams provided by react-native-url-polyfillReadableStream provided by web-streams-polyfillbtoa and atob provided by base-64TextEncoder and TextDecoder provided by text-encodingfetch for text streaming provided by react-native-fetch-apicrypto.getRandomValues provided by react-native-get-random-valuesImport the polyfill function and call it whenever.
import { polyfill } from 'react-native-polyfill-globals';
polyfill();
Add the following import to the top of your app's entry file, index.js, located at the root of your project.
import 'react-native-polyfill-globals/auto';
import { polyfill as polyfillBase64 } from 'react-native-polyfill-globals/src/base64';
import { polyfill as polyfillEncoding } from 'react-native-polyfill-globals/src/encoding';
import { polyfill as polyfillReadableStream } from 'react-native-polyfill-globals/src/readable-stream';
import { polyfill as polyfillURL } from 'react-native-polyfill-globals/src/url';
import { polyfill as polyfillFetch } from 'react-native-polyfill-globals/src/fetch';
import { polyfill as polyfillCrypto } from 'react-native-polyfill-globals/src/crypto';
Patch files located at the patches directory provide additional polyfills and fixes.
Apply all at once with patch-package:
$ npm install -D patch-package
$ npx patch-package --patch-dir node_modules/react-native-polyfill-globals/patches
Apply invidually with Git:
$ git apply --ignore-whitespace node_modules/react-native-polyfill-globals/react-native+0.63.3.patch
Apply invidually with patch:
$ patch -p1 -i node_modules/react-native-polyfill-globals/react-native+0.63.3.patch
Note that Metro, React Native's bundler, at this time does not support tree-shaking nor dead code elimination. As such, beware that even if you apply polyfills selectively and don't use them at runtime, the code will be included in the production bundle regardless. If you don't need a given polyfill, do not import it at all.
MIT © André Costa Lima
$ claude mcp add react-native-polyfill-globals \
-- python -m otcore.mcp_server <graph>