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.
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
muslnode 18–226 runs
build_error
glibcnode 18–226 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);
}
});
});
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.