react-native-quick-base64
A blazing fast, native Base64 implementation for React Native using C++ and JSI.
This library is ~30x faster than base64-js. Try the benchmarks in the example app.

Features
- Native C++/JSI implementation for maximum performance
- Automatically installs its JSI bindings at runtime
- Drop-in replacement for
base64-jswith matching API - No additional native setup or linking required
Installation
npm install react-native-quick-base64
Requires the New Architecture. Version
3.0.0+ is a pure C++ TurboModule and only registers when the app runs with React Native's New Architecture enabled:
- Bare React Native:
newArchEnabled=true(default on RN 0.76+; forced on 0.85+).- Expo: SDK 54+ (New Architecture is default), or SDK 53 with New Architecture explicitly enabled.
On the Old Architecture you'll get
TurboModuleRegistry.getEnforcing(...): 'QuickBase64' could not be found. Enable the New Architecture and rebuild (cd android && ./gradlew clean), or pinreact-native-quick-base64@2.2.2to stay on the Old Architecture.
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.
import 'react-native-quick-base64' // triggers native JSI install to global namespace
You can also import individual helpers:
import { fromByteArray, toByteArray } from 'react-native-quick-base64'
Usage
import { fromByteArray, toByteArray } from 'react-native-quick-base64'
const base64 = fromByteArray(new TextEncoder().encode('foo'))
const decoded = new TextDecoder().decode(toByteArray(base64))
API
Compatible with base64-js.
byteLength(b64: string): number
Returns the length of the byte array that corresponds to the base64 string.
toByteArray(b64: string, removeLinebreaks: boolean = false): Uint8Array
Converts a base64 string into a Uint8Array.
If removeLinebreaks is true, all \n characters are removed first.
fromByteArray(uint8: Uint8Array, urlSafe: boolean = false): string
Converts a byte array into a base64 string.
If urlSafe is true, the output uses a URL-safe base64 charset.
trimBase64Padding(str: string): string
Removes trailing = or . padding from base64 or base64url-encoded strings.
Breaking change (#53): The
btoa,atob, andshim()polyfills have been removed. Recent versions of Hermes providebtoaandatobnatively in the JS runtime, so the polyfills are no longer needed. If you need string ⇄ base64 conversion, useTextEncoder/TextDecodertogether withfromByteArray/toByteArray(see Usage below).
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT Takuya Matsuyama