A native implementation of base64 in C++ for React Native
npm install react-native-quick-base64A blazing fast, native Base64 implementation for React Native using C++ and JSI.
This library is ~16x faster than base64-js on an iPhone 15 Pro Max simulator.
Try the benchmarks in the example app.
| iPhone | Android |
| ------------------------------------------------- | --------------------------------------------------- |
| !iPhone | !Android |
---
- ⚡ Native C++/JSI implementation for maximum performance
- 🧠 Automatically installs its JSI bindings at runtime
- 🧩 Drop-in replacement for base64-js with matching API
- 🔒 No additional native setup or linking required
> ℹ️ Heads-up:
> Starting with recent versions of Hermes, btoa and atob are natively available in the JS runtime.
> You likely don't need to use the versions provided by this library anymore unless you're running on an older engine or want consistent behavior across platforms.
> These methods will remain in the package for compatibility but are considered deprecated.
---
``bash`
npm install react-native-quick-base64
---
This module installs its native bindings automatically.
Simply importing the library is enough to activate the native backend.
Add it to your root entry point file or your first \_layout.tsx.
`js`
import 'react-native-quick-base64' // triggers native JSI install to global namespace
You can also import individual helpers:
`tsx`
import { fromByteArray, toByteArray } from 'react-native-quick-base64'
`tsx
import { btoa, atob } from 'react-native-quick-base64'
const base64 = btoa('foo')
const decoded = atob(base64)
`
---
Compatible with base64-js.
Returns the length of the byte array that corresponds to the base64 string.
Converts a base64 string into a Uint8Array.
If removeLinebreaks is true, all \n characters are removed first.
Converts a byte array into a base64 string.
If urlSafe is true, the output uses a URL-safe base64 charset.
Encodes a string into base64 format.
> Avoid using this unless you're on an older JS engine.
> Use fromByteArray(new TextEncoder().encode(...)) instead for better encoding control.
Decodes a base64 string into a UTF-8 string.
> Avoid using this unless you're on an older JS engine.
> Use TextDecoder + toByteArray() for more robust decoding.
Adds global btoa and atob functions
`ts
import { shim } from 'react-native-quick-base64'
shim()
btoa('foo') // available globally
`
Removes trailing = or .` padding from base64 or base64url-encoded strings.
---
See the contributing guide to learn how to contribute to the repository and the development workflow.
---
MIT © Takuya Matsuyama