uint8-base64
You can find a lot of NPM libraries dealing with base64 encoding and decoding.
However, we could not find one that would have as input AND output an Uint8Array. This library does exactly this.
This library is pretty fast and will convert over 500 Mb per second in NodeJS as well as in the browser.
If you need at the end a text rather than an Uint8Array it is also extremely fast to convert the Uint8Array to text using a TextEncoder:
const base64 = encode(bytes);
const string = new TextDecoder('utf8').decode(base64);
Installation
$ npm i uint8-base64
Usage
encode
import { encode } from 'uint8-base64';
const result = encode(Uint8Array.from([65])); // an array containing 'A'
// result is Uint8Array(4) [ 81, 81, 61, 61 ] ('QQ==')
Encoding to text speed test
import { encode } from 'uint8-base64';
const bytes = new Uint8Array(256 * 1024 * 1024).map((_, i) =>
Math.floor(Math.random() * 256),
);
console.time('base64');
const base64 = encode(bytes);
const string = new TextDecoder('utf8').decode(base64);
console.timeEnd('base64');
console.log(string.slice(0, 100));
This code takes 330ms on my MacBook pro M4 to encode 256Mb of data. The encoding itself takes 240ms while the conversion to text takes 50ms.
decode
import { decode } from '..';
const result = decode(Uint8Array.from([81, 81, 61, 61])); // an array containing 'QQ=='
// result is Uint8Array(1) [ 65 ] ('A')
License
The code was largely inspired by: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727