v3.0.0Published 4 years ago

This package has not had recent updates. Please investigate it's current state before committing to using it in your project.

Isomorphic Base64 implementation

Highly efficient isomorphic implementation of Base64 string encoding and decoding. With the support of Unicode, and non-blocking execution via WebWorker. This library has 100% tests coverage, including speed tests.


  1. 100% tests coverage;
  2. Isomorphic, same API for Server and Browser;
  3. Blazing fast, see speed tests;
  4. Non-blocking browser experience, via WebWorkers;
  5. No external dependencies;
  6. Can replace default Meteor's base64 package.


meteor add ostrio:base64

ES6 Import

1import { Base64 } from 'meteor/ostrio:base64';

Native code support

Native code is disabled by default for Browser. Native code represented as atob, btoa (with extension to support Unicode) in a browser, and Buffer at NodeJS.

Although native code is 10x times faster, its support is enabled only on Server, as natively base64 encoding supports only ASCII symbols in a Browser. To enable native code - pass { useNative: true } in constructor:

1import { Base64 } from 'meteor/ostrio:base64';
2const nativeB64 = new Base64({ useNative: true });

Non-blocking via WebWorker

WebWorker is disabled by default, enable it with passing { allowWebWorker: true } in new Base64() constructor. Once enabled it will be used for all encode/decode calls with the callback. WebWorker is used only if supported by a browser, otherwise, it will fall-back to the main thread. In the real-world application WebWorker, usage will gain you extra FPS, and UI will act more smoothly.



1base64Instance.encode(plainString [, callback]);
1import { Base64 } from 'meteor/ostrio:base64';
2const base64 = new Base64();
4base64.encode('My Plain String'); // Returns 'TXkgUGxhaW4gU3RyaW5n'
6// Async, non-blocking via WebWorker (if supported) at browser:
7base64.encode('My Plain String', (error, b64) => {
8  // b64 === 'TXkgUGxhaW4gU3RyaW5n'


1base64Instance.decode(base64EncodedString [, callback]);
1import { Base64 } from 'meteor/ostrio:base64';
2const base64 = new Base64();
4base64.decode('TXkgUGxhaW4gU3RyaW5n'); // Returns 'My Plain String'
6// Async, non-blocking via WebWorker (if supported) at browser:
7base64.decode('TXkgUGxhaW4gU3RyaW5n', (error, str) => {
8  // str === 'My Plain String'

Constructor new Base64()

1import { Base64 } from 'meteor/ostrio:base64';
2new Base64({ allowWebWorker, useNative, supportNonASCII, ejsonCompatible });
  • opts.allowWebWorker {Boolean} - Default: false. Use WebWorker in a Browser if available;
  • opts.useNative {Boolean} - Default in Browser: false; Default on Server: true. Use native atob, btoa and Buffer.from, when available;
  • opts.supportNonASCII {Boolean} - Default: true. Decreases speed, but gives support for whole utf-8 table;
  • opts.ejsonCompatible {Boolean} - Default: false. Compatible mode with EJSON "binary" format, .encode() method will result as Uint8Array when ejsonCompatible is true.
1import { Base64 } from 'meteor/ostrio:base64';
2// Native with WebWorker
3const nativeB64 = new Base64({ allowWebWorker: true, useNative: true });
5// Native without WebWorker
6const mtNativeB64 = new Base64({ allowWebWorker: false, useNative: true });
8// Use main thread, no WebWorker
9const mtB64 = new Base64({ allowWebWorker: false });

Default base64 package replacement

  1. Download base64-replacement package and place into meteor-app/packages directory, that's it. Run meteor update to make sure new package is applied;
  2. In case of version incompatibility, change base64-replacement version, to the latest available on the mainstream channel;
  3. For more info see base64-replacement package

100% Tests coverage

  1. Clone this package
  2. In Terminal (Console) go to directory where package is cloned
  3. Then run:
# Default
meteor test-packages ./

# With custom port
meteor test-packages ./ --port 8888

Tests include synchronous, asynchronous and speed tests for Browser and NodeJS, for cases with/out the Native code and/or WebWorker usage.

Support this project: