npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@merlotqi/xproc

v0.1.0

Published

xproc: High-performance Single Producer Single Consumer (SPSC) Inter-Process Communication (IPC) library using ring buffers. Supports both fixed-length frames and variable-length messages.

Readme

@merlotqi/xproc

@merlotqi/xproc is a Node.js binding for xproc, a single-producer single-consumer IPC library with shared-memory and socket transports.

The package keeps the raw Producer / Consumer / Observer constructors, and also adds higher-level xproc.shm and xproc.socket helpers for the common paths.

Install

npm install @merlotqi/xproc

This package is intended to install and load directly from bundled prebuilt Node-API binaries on these platforms:

  • Linux x64 glibc
  • Linux arm64 glibc
  • macOS x64
  • macOS arm64
  • Windows x64

Shared-memory quick start

Fixed-size channel:

const xproc = require("@merlotqi/xproc");

const created = xproc.shm.createFixedChannel({
  path: "/demo-fixed",
  itemSize: 4,
  dataCapacity: 16384n,
  schemaId: 0x1234n,
});

const producer = created.openProducer();
const consumer = xproc.shm.attachFixedChannel({
  path: "/demo-fixed",
  schemaId: 0x1234n,
}).openConsumer();

producer.sendFixedSized(Buffer.from([1, 2, 3, 4]));
const payload = consumer.pollCopy();

Variable-length channel:

const xproc = require("@merlotqi/xproc");

const created = xproc.shm.createVarlenChannel({
  path: "/demo-varlen",
  dataCapacity: 32768n,
});

const producer = created.openProducer();
const consumer = xproc.shm.attachVarlenChannel({
  path: "/demo-varlen",
}).openConsumer();

producer.sendVarlen("hello");
const payload = consumer.pollCopy();

Socket quick start

Fixed-size loopback:

const xproc = require("@merlotqi/xproc");

const listener = xproc.socket.listenFixed({
  host: "127.0.0.1",
  port: 0,
  itemSize: 4,
});

const consumer = listener.openConsumer();
const producer = xproc.socket.connectFixed({
  host: "127.0.0.1",
  port: consumer.socketPort(),
  itemSize: 4,
}).openProducer();

producer.sendFixedSized(Buffer.from([9, 8, 7, 6]));
const payload = consumer.pollCopy();

Variable-length loopback:

const xproc = require("@merlotqi/xproc");

const listener = xproc.socket.listenVarlen({
  host: "127.0.0.1",
  port: 0,
});

const consumer = listener.openConsumer();
const producer = xproc.socket.connectVarlen({
  host: "127.0.0.1",
  port: consumer.socketPort(),
}).openProducer();

producer.sendVarlen("hello-socket");
const payload = consumer.pollCopy();

Raw API

The lower-level constructors are still available when you want direct control over transport options:

const xproc = require("@merlotqi/xproc");

const producer = new xproc.Producer({
  path: "/demo-raw",
  shmSize: xproc.shmSizeForDataCapacity(16384n),
  channelType: "fixed",
  itemSize: 4,
  createIfMissing: true,
});

Repository examples

When working in this repository, these example scripts exercise the high-level Node API:

cd node
npm run example:fixed-channel-inprocess
npm run example:varlen-channel-inprocess
npm run example:observer-peek-demo
npm run example:socket-fixed-loopback
npm run example:socket-varlen-loopback
npm run example:parent-child-struct-monitor

Cross-language example:

cmake --build ../build --target xproc_node_cpp_child_struct_writer xproc_node
npm run example:node-parent-cpp-child-struct-monitor

Development

Build from the repository root:

cmake -S . -B build -DXPROC_BUILD_CAPI=ON -DXPROC_BUILD_NODE=ON
cmake --build build --target xproc_node

Install JavaScript dependencies once:

cd node
npm ci

Typecheck and test:

cd node
npm run typecheck
npm test