Registry / serialization / engine.io-parser

engine.io-parser

JSON →
library5.2.3jsnpmunverified

engine.io-parser is a foundational JavaScript parser library responsible for encoding and decoding packets and payloads for the Engine.IO protocol, which underpins Socket.IO. It enables seamless communication by handling various data types including strings, numbers, buffers, and ArrayBuffers across both Node.js and browser environments. The current stable version is 5.2.3, and it is actively maintained as part of the broader Socket.IO ecosystem, receiving updates alongside major Socket.IO releases. Its key differentiators include robust cross-environment compatibility (Node.js, browser, WebWorkers) and flexible binary data handling (encoding to/from ArrayBuffer, Blob, or Buffer), making it a critical component for real-time, low-level data transmission.

serializationhttp-networkingcommunication
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

While CommonJS uses a default-like `require('engine.io-parser')`, ESM typically exposes functions as named exports or a namespace object for internal libraries. Using `* as parser` ensures compatibility with the object-oriented API shown in documentation.

import * as parser from 'engine.io-parser';

For ESM, individual functions can be directly imported. For CommonJS, these are methods on the main 'parser' object.

import { encodePacket } from 'engine.io-parser';

Key parsing functions like `decodePayload` are named exports. There is no `Parser` class for direct instantiation; methods are exposed directly or via the main imported object.

import { decodePayload } from 'engine.io-parser';

This quickstart demonstrates encoding and decoding single Engine.IO packets and multi-packet payloads, including binary data, showcasing the library's core functionality.

import { encodePacket, decodePacket, encodePayload, decodePayload } from 'engine.io-parser'; import { Buffer } from 'buffer'; // Node.js Buffer for example const data = Buffer.from([ 1, 2, 3, 4 ]); console.log('--- Packet Encoding/Decoding ---'); encodePacket({ type: 'message', data }, true, encoded => { console.log('Encoded Packet:', encoded); // Should be a string or ArrayBuffer const decodedPacket = decodePacket(encoded, 'arraybuffer'); console.log('Decoded Packet:', decodedPacket.data); // Should be { type: 'message', data: ArrayBuffer } }); console.log('\n--- Payload Encoding/Decoding ---'); const testBuffer = new Int8Array(10); for (let i = 0; i < testBuffer.length; i++) testBuffer[i] = i; const packets = [ { type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello world' } ]; encodePayload(packets, encodedPayload => { console.log('Encoded Payload:', encodedPayload); decodePayload(encodedPayload, (packet, index, total) => { console.log(`Decoded Payload Packet ${index + 1}/${total}:`, packet); if (index === 0) { console.log(' Binary data (ArrayBuffer):', new Int8Array(packet.data)); } else { console.log(' String data:', packet.data); } }); });
Debug
Known footguns
gotchaThe API primarily uses callback-based asynchronous patterns for encoding and decoding operations. Developers accustomed to Promise-based or async/await syntax may find this less ergonomic, potentially leading to nested callbacks (callback hell) if not managed with utilities like `util.promisify`.
gotchaWhen handling binary data, `engine.io-parser` automatically encodes it as base64 strings within payloads if not explicitly handled as raw binary. While convenient for universal transport, this can introduce a performance overhead due to increased data size and encoding/decoding CPU cycles, especially for large binary payloads. Be aware of the `binary support` parameter in `encodePacket` and the `binary type` in `decodePacket`.
gotchaThe representation of binary data (Buffer, ArrayBuffer, Blob) varies between Node.js and browser environments. While `engine.io-parser` abstracts some of this, direct manipulation or assumptions about the underlying binary type can lead to cross-environment bugs if not carefully handled. `decodePacket` can return `ArrayBuffer` in Node.js, but `Blob` in browsers.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
15 hits · last 30 days
bytedance
5
gptbot
4
ahrefsbot
4
script
1
Resources