What is fast-text-encoding?
The fast-text-encoding npm package is a polyfill for the TextEncoder and TextDecoder APIs, which are part of the Encoding Living Standard. These APIs provide a straightforward way to encode and decode text using various character encodings, primarily UTF-8. This package is particularly useful in environments where the native TextEncoder and TextDecoder are not available, such as older browsers or specific Node.js versions.
What are fast-text-encoding's main functionalities?
Text Encoding
This feature allows you to encode a JavaScript string into a Uint8Array of bytes using UTF-8 encoding. It's useful for preparing text data for transmission or storage in binary formats.
const textEncoder = new TextEncoder();
const encoded = textEncoder.encode('Hello, World!');
console.log(encoded);
Text Decoding
This feature enables you to decode a Uint8Array of bytes into a JavaScript string using UTF-8 or other supported encodings. It's commonly used for reading text data received in binary format.
const textDecoder = new TextDecoder();
const decoded = textDecoder.decode(new Uint8Array([72, 101, 108, 108, 111]));
console.log(decoded);
Other packages similar to fast-text-encoding
text-encoding
The text-encoding package is another polyfill for the TextEncoder and TextDecoder APIs, similar to fast-text-encoding. It supports a wider range of encodings beyond UTF-8, making it more versatile for applications that need to work with different character sets. However, it might be larger in size and potentially slower than fast-text-encoding, which focuses on speed and efficiency for UTF-8 encoding.
buffer
While not a direct polyfill for TextEncoder and TextDecoder, the buffer package in Node.js provides similar functionalities for encoding and decoding text in various character encodings. It's more integrated into the Node.js ecosystem and offers a broader set of features for manipulating binary data, but it might be more complex to use for simple text encoding/decoding tasks compared to fast-text-encoding.

This is a fast polyfill for TextEncoder
and TextDecoder
, which let you encode and decode JavaScript strings into UTF-8 bytes.
It is fast partially as it does not support^ any encodings aside UTF-8 (and note that natively, only TextDecoder
supports alternative encodings anyway).
See some benchmarks.
^If this polyfill used on Node v5.1 through v11 (when Text...
was introduced), then this simply wraps Buffer
, which supports many encodings and is native code.
Usage
Install as "fast-text-encoding" via your favourite package manager.
You only need this polyfill if you're supporting older browsers like IE, legacy Edge, ancient Chrome and Firefox, or Node before v11.
Browser
Include the minified code inside a <script>
tag or as an ES6 Module for its side effects.
It will create TextEncoder
and TextDecoder
if the symbols are missing on window
or global.
<script src="node_modules/fast-text-encoding/text.min.js"></script>
<script type="module">
import './node_modules/fast-text-encoding/text.min.js';
import 'fast-text-encoding';
</script>
⚠️ You'll probably want to depend on "text.min.js", as it's compiled to ES5 for older environments.
Not Including Polyfill
If your project doesn't need the polyfill, but is included as a transitive dependency, we publish an empty version that you could pin NPM or similar's version algorithm to.
Use "fast-text-encoding@empty".