Base64 Encoding Libraries Comparison
js-base64 vs base-64
1 Year
js-base64base-64Similar Packages:
What's Base64 Encoding Libraries?

Base64 encoding libraries are essential tools in web development for encoding binary data into ASCII string format, which is particularly useful for transmitting data over media that are designed to deal with textual data. These libraries provide developers with the ability to easily encode and decode data, ensuring compatibility with various data formats and protocols. The primary purpose of these libraries is to facilitate the safe transmission of data, such as images or files, in environments that may not support binary data directly. Both 'base-64' and 'js-base64' serve this purpose but come with different features and design philosophies that may influence their selection based on specific project requirements.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
js-base645,477,4774,28138.6 kB910 months agoBSD-3-Clause
base-642,673,893513-124 years agoMIT
Feature Comparison: js-base64 vs base-64

Encoding/Decoding Functions

  • js-base64:

    The 'js-base64' library offers a more extensive set of encoding and decoding functions, including support for both standard Base64 and URL-safe Base64 encoding. This makes it versatile for various applications, including web APIs and data storage.

  • base-64:

    The 'base-64' package provides basic encoding and decoding functions that are straightforward to use. It focuses on performance and simplicity, allowing developers to quickly encode and decode strings without additional overhead.

UTF-8 Support

  • js-base64:

    'js-base64' includes built-in support for UTF-8 encoding and decoding, making it a better choice for applications that need to handle internationalization or special character sets.

  • base-64:

    The 'base-64' library does not natively support UTF-8 encoding and decoding, which may limit its usability in applications that require handling of multi-byte characters.

Size and Performance

  • js-base64:

    While 'js-base64' is slightly larger due to its additional features, it still maintains good performance. However, if size is a critical factor, 'base-64' may be the preferred option.

  • base-64:

    Being a minimalistic library, 'base-64' has a smaller footprint and can be faster in scenarios where only basic Base64 functionality is required. It is optimized for performance with minimal dependencies.

Browser Compatibility

  • js-base64:

    'js-base64' also supports all modern browsers and includes polyfills for older browsers, making it a robust choice for applications that need to support a wider range of environments.

  • base-64:

    The 'base-64' library is designed to work seamlessly across all modern browsers, ensuring that developers can rely on it for consistent behavior in web applications.

Documentation and Community Support

  • js-base64:

    'js-base64' has comprehensive documentation and a larger community, providing more resources, examples, and support for developers looking to implement Base64 encoding in their applications.

  • base-64:

    The documentation for 'base-64' is concise and focused, making it easy for developers to get started quickly. However, it may lack extensive community support due to its simplicity.

How to Choose: js-base64 vs base-64
  • js-base64:

    Choose 'js-base64' if you require a more feature-rich library that includes additional utilities for encoding and decoding, such as support for UTF-8 encoding and decoding. It is better suited for applications that need more comprehensive handling of character sets.

  • base-64:

    Choose 'base-64' if you need a minimalistic library focused solely on Base64 encoding and decoding without additional dependencies. It is lightweight and straightforward, making it ideal for simple use cases.

README for js-base64

CI via GitHub Actions

base64.js

Yet another Base64 transcoder.

Install

$ npm install --save js-base64

Usage

In Browser

Locally…

<script src="base64.js"></script>

… or Directly from CDN. In which case you don't even need to install.

<script src="https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.min.js"></script>

This good old way loads Base64 in the global context (window). Though Base64.noConflict() is made available, you should consider using ES6 Module to avoid tainting window.

As an ES6 Module

locally…

import { Base64 } from 'js-base64';
// or if you prefer no Base64 namespace
import { encode, decode } from 'js-base64';

or even remotely.

<script type="module">
// note jsdelivr.net does not automatically minify .mjs
import { Base64 } from 'https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.mjs';
</script>
<script type="module">
// or if you prefer no Base64 namespace
import { encode, decode } from 'https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.mjs';
</script>

node.js (commonjs)

const {Base64} = require('js-base64');

Unlike the case above, the global context is no longer modified.

You can also use esm to import instead of require.

require=require('esm')(module);
import {Base64} from 'js-base64';

SYNOPSIS

let latin = 'dankogai';
let utf8  = '小飼弾'
let u8s   =  new Uint8Array([100,97,110,107,111,103,97,105]);
Base64.encode(latin);             // ZGFua29nYWk=
Base64.encode(latin, true);       // ZGFua29nYWk skips padding
Base64.encodeURI(latin);          // ZGFua29nYWk
Base64.btoa(latin);               // ZGFua29nYWk=
Base64.btoa(utf8);                // raises exception
Base64.fromUint8Array(u8s);       // ZGFua29nYWk=
Base64.fromUint8Array(u8s, true); // ZGFua29nYW which is URI safe
Base64.encode(utf8);              // 5bCP6aO85by+
Base64.encode(utf8, true)         // 5bCP6aO85by-
Base64.encodeURI(utf8);           // 5bCP6aO85by-
Base64.decode(      'ZGFua29nYWk=');// dankogai
Base64.decode(      'ZGFua29nYWk'); // dankogai
Base64.atob(        'ZGFua29nYWk=');// dankogai
Base64.atob(        '5bCP6aO85by+');// '小飼弾' which is nonsense
Base64.toUint8Array('ZGFua29nYWk=');// u8s above
Base64.decode(      '5bCP6aO85by+');// 小飼弾
// note .decodeURI() is unnecessary since it accepts both flavors
Base64.decode(      '5bCP6aO85by-');// 小飼弾
Base64.isValid(0);      // false: 0 is not string
Base64.isValid('');     // true: a valid Base64-encoded empty byte
Base64.isValid('ZA=='); // true: a valid Base64-encoded 'd'
Base64.isValid('Z A='); // true: whitespaces are okay
Base64.isValid('ZA');   // true: padding ='s can be omitted
Base64.isValid('++');   // true: can be non URL-safe
Base64.isValid('--');   // true: or URL-safe
Base64.isValid('+-');   // false: can't mix both

Built-in Extensions

By default Base64 leaves built-in prototypes untouched. But you can extend them as below.

// you have to explicitly extend String.prototype
Base64.extendString();
// once extended, you can do the following
'dankogai'.toBase64();        // ZGFua29nYWk=
'小飼弾'.toBase64();           // 5bCP6aO85by+
'小飼弾'.toBase64(true);       // 5bCP6aO85by-
'小飼弾'.toBase64URI();        // 5bCP6aO85by- ab alias of .toBase64(true)
'小飼弾'.toBase64URL();        // 5bCP6aO85by- an alias of .toBase64URI()
'ZGFua29nYWk='.fromBase64();  // dankogai
'5bCP6aO85by+'.fromBase64();  // 小飼弾
'5bCP6aO85by-'.fromBase64();  // 小飼弾
'5bCP6aO85by-'.toUint8Array();// u8s above
// you have to explicitly extend Uint8Array.prototype
Base64.extendUint8Array();
// once extended, you can do the following
u8s.toBase64();     // 'ZGFua29nYWk='
u8s.toBase64URI();  // 'ZGFua29nYWk'
u8s.toBase64URL();  // 'ZGFua29nYWk' an alias of .toBase64URI()
// extend all at once
Base64.extendBuiltins()

.decode() vs .atob (and .encode() vs btoa())

Suppose you have:

var pngBase64 = 
  "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";

Which is a Base64-encoded 1x1 transparent PNG, DO NOT USE Base64.decode(pngBase64).  Use Base64.atob(pngBase64) instead.  Base64.decode() decodes to UTF-8 string while Base64.atob() decodes to bytes, which is compatible to browser built-in atob() (Which is absent in node.js).  The same rule applies to the opposite direction.

Or even better, Base64.toUint8Array(pngBase64).

Brief History

  • Since version 3.3 it is written in TypeScript. Now base64.mjs is compiled from base64.ts then base64.js is generated from base64.mjs.
  • Since version 3.7 base64.js is ES5-compatible again (hence IE11-compatible).
  • Since 3.0 js-base64 switch to ES2015 module so it is no longer compatible with legacy browsers like IE (see above)