Local + remote inter-process communication

Move messages between any processes.

node-ipc 14 pairs a native-ESM Node.js package with a dependency-free Rust crate. They share the normal event envelope and delimiter framing while each runtime keeps a direct transport implementation.

Node.js covers Unix sockets, Windows named pipes, TCP, TLS, and UDP. Rust covers native local sockets, TCP, and UDP; applications supply a verified TLS stream.

JavaScript runtime boundary.

The node-ipc JavaScript package is Node.js-only. It does not run in web browsers, whether bundled or unbundled. “Native ESM” here means Node.js ESM, not native browser ESM; this documentation site's browser code is separate from the npm runtime.

14.0.0 · Node 22.13+ · Rust 1.85+Version 13 was not published Native ESM · zero-dependency RustMIT licensed
Node.js correctness inventory19539 focused five-case groups
Rust native inventory38Separate VanillaTest cases
Node / Rust interoperability2Separate TCP directions
Test sets4Unit · functional · integration · regression
Transports5Local · TCP · TLS · UDP4 · UDP6
Build step0Native Node.js, no transpiler

Choose one lane

Match the transport to the boundary

Same machine

Use Unix domain sockets or Windows named pipes for fast local process communication without the network stack.

Open local sockets →

Reliable network

Use TCP for ordered, reliable remote messages. Keep loopback as the default until the application is ready for exposure.

Open TCP →

Encrypted network

Use TLS with explicit certificates. Add mutual TLS or application authentication when the server must identify clients.

Open TLS →

Latency over delivery

Use UDP4 or UDP6 for independent datagrams where occasional loss is acceptable and the application handles ordering.

Open UDP →

Configure the runtime

Review message, retry, log, and socket-root options before the first connection is created.

Open configuration →

Select message controls

Compare Raw, Fast, Guarded, and Assured by exact per-message work and trust boundary.

Open runtime profiles →

Bring a parser

Use an official parser, opt into js-message compatibility, or implement the two-method custom contract.

Open parser contract →

Know the contract

See the small public surface: connect, serve, disconnect, emit, broadcast, stop, events, and stores.

Open API reference →

Use native Rust

Build TCP, UDP, Unix-domain, or Windows named-pipe peers with no runtime or build dependencies.

Open the Rust guide →

Evidence, not a footnote

Testing stays visible

The 195-case Node.js correctness inventory is split into 39 focused five-case groups. Rust's 38 native cases and the 2-case Node/Rust interoperability gate remain separate.

55

Unit inventory

Small, isolated contracts for defaults, parsing, public surface, and transport state.

See 11 group pages →
55

Functional inventory

Consumer-visible behavior across public objects, configuration, serialization, and routing.

See 11 group pages →
45

Integration inventory

Live transport collaboration with explicit deadlines and deterministic teardown.

See 9 group pages →
40

Regression inventory

Named compatibility contracts that prevent previously supported behavior from drifting.

See 8 group pages →
Correctness stays honest.

The 38 Rust cases and 2 interoperability cases, 8-assertion cross-process transport smoke, runtime loader smoke, installed-package smoke, benchmark harness checks, and tracked-record validators are reported separately. They do not inflate the 195-case Node.js correctness count.

Paired release

Install exact 14.0.0 packages

npm install --save-exact node-ipc@14.0.0
cargo add node-ipc@14.0.0 --exact

Node.js requires 22.13+; Rust requires 1.85+. Pin exact releases for reproducible deployments.