qsys-qrc
v0.5.0
Published
Q-SYS Remote Control (QRC) client, null-terminated JSON-RPC wire framing, and shared types — the core the qsys CLI and qsys-mcp server both build on.
Maintainers
Readme
qsys-qrc
TypeScript client for QSC's Q-SYS Remote Control (QRC) protocol — the null-terminated JSON-RPC-over-TCP interface every Q-SYS Core (and Q-SYS Designer in Emulate mode) serves on port 1710.
Handles the wire framing, request/response correlation, change groups,
keepalive, and transparent auto-reconnect, and ships shared types for
controls, components, and engine status. It is the core that the
qsys CLI and the
q-sys-mcp server build on.
Install
npm install qsys-qrcUsage
import { QrcClient } from 'qsys-qrc';
const qrc = new QrcClient({ host: '192.168.1.10' });
await qrc.connect();
const status = await qrc.statusGet(); // typed helpers…
await qrc.setControl('MainGain', -6, 2); // value -6, 2 s ramp
const [gain] = await qrc.getControl(['MainGain']);
await qrc.send('Component.GetComponents'); // …or raw QRC methods
qrc.close();Typed helpers cover the whole protocol surface: status, components, named controls, change groups (poll-based watch), and snapshots.
The client keeps the socket alive (NoOp keepalive) and reconnects
transparently if the Core drops the connection. In-flight reads are
retried on the new socket; an in-flight mutation whose response was
lost rejects with QrcIndeterminateError instead of being retransmitted —
QRC has no request dedup, so a blind retry could double a trigger or
playback start. Re-read state (or re-issue explicitly) to reconcile.
Disclaimer
This is an independent open-source project, not affiliated with, endorsed by, or supported by QSC, LLC. "Q-SYS" is a trademark of QSC. The client speaks the publicly documented QRC protocol and contains no QSC code.
License
MIT
