uint8-base64

uint8-base64

NPM version build status Test coverage npm download

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);

$ npm i uint8-base64

import { encode } from 'uint8-base64';

const result = encode(Uint8Array.from([65])); // an array containing 'A'
// result is Uint8Array(4) [ 81, 81, 61, 61 ] ('QQ==')
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.

import { decode } from '..';

const result = decode(Uint8Array.from([81, 81, 61, 61])); // an array containing 'QQ=='
// result is Uint8Array(1) [ 65 ] ('A')

The code was largely inspired by: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727

MIT