MCPcopy Index your code
hub / github.com/chrisle/StageLinq

github.com/chrisle/StageLinq @v3.1.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.1.4 ↗ · + Follow
429 symbols 1,019 edges 70 files 121 documented · 28%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

StageLinq

TypeScript library to connect to Denon DJ hardware via the StageLinq protocol.

Installation

npm install stagelinq

Quick Start

import { StageLinq } from 'stagelinq';

const stagelinq = new StageLinq({ downloadDbSources: true });

stagelinq.devices.on('trackLoaded', (status) => {
  console.log(`${status.title} - ${status.artist} loaded on deck ${status.deck}`);
});

stagelinq.devices.on('nowPlaying', (status) => {
  console.log(`Now Playing: ${status.title} - ${status.artist}`);
});

await stagelinq.connect();

Features

Feature Go Python This repo
Device Discovery
StateMap Service
BeatInfo Service
FileTransfer Service
TimeSync Service
Broadcast Service
EAAS (gRPC library)
EAAS (HTTP files)
Windows Support
macOS Support
Linux Support
Multi-interface discovery
Database download
Track path resolution
Instance-based API
Static class API
CLI demo tools
Wireshark dissector
Unit tests

Go = go-stagelinq, Python = PyStageLinQ

Supported Devices

  • Denon SC6000 / SC6000M
  • Denon SC5000 / SC5000M
  • Denon Prime 4 / Prime 2 / Prime Go
  • Denon X1850 / X1800 mixers
  • Denon LC6000

API

Instance-based (recommended)

import { StageLinq } from 'stagelinq';

const stagelinq = new StageLinq({
  downloadDbSources: true,
  maxRetries: 3,
});

// Device events
stagelinq.devices.on('ready', (info) => {
  console.log(`Connected to ${info.software.name}`);
});

stagelinq.devices.on('trackLoaded', (status) => {
  console.log(`Loaded: ${status.title} on deck ${status.deck}`);
});

stagelinq.devices.on('nowPlaying', (status) => {
  console.log(`Playing: ${status.title}`);
});

// Database events
stagelinq.devices.on('dbDownloaded', (sourceId, dbPath) => {
  console.log(`Database saved to ${dbPath}`);
});

await stagelinq.connect();

// Later...
await stagelinq.disconnect();

Static class

import { StageLinq } from 'stagelinq';

StageLinq.options = { downloadDbSources: true };

StageLinq.devices.on('nowPlaying', (status) => {
  console.log(`Playing: ${status.title}`);
});

await StageLinq.connect();

Events

// Track events
stagelinq.devices.on('trackLoaded', (status: PlayerStatus) => {});
stagelinq.devices.on('nowPlaying', (status: PlayerStatus) => {});

// Device events
stagelinq.devices.on('ready', (info: ConnectionInfo) => {});
stagelinq.devices.on('deviceConnected', (info: ConnectionInfo) => {});

// State events (200+ states per deck)
stagelinq.devices.on('stateChanged', (state: StateData) => {});

// Beat events (real-time BPM, beat position)
stagelinq.devices.on('beatMessage', (data: BeatData) => {});

// Database events
stagelinq.devices.on('dbDownloaded', (sourceId, dbPath) => {});

View all events →

State Data

The library tracks 200+ state values per deck:

Category Example States
Track ArtistName, SongName, TrackNetworkPath, TrackLength
Playback Play, PlayState, CurrentBPM, Speed
Sync SyncMode, DeckIsMaster, MasterTempo
Loop LoopEnableState, CurrentLoopSizeInBeats
Mixer ExternalMixerVolume, CrossfaderPosition

View all states →

Examples

See the cli/ folder for complete examples:

Run examples:

# Main CLI
npx ts-node cli/index.ts

# Discovery
npx ts-node cli/discover.ts

# Beat info
npx ts-node cli/beatinfo.ts

Tools

Wireshark Dissector

A Lua dissector for Wireshark is included for protocol debugging:

# Copy to Wireshark plugins folder
cp tools/wireshark/stagelinq.lua ~/.local/lib/wireshark/plugins/

Testing

npm test              # Run tests
npm run test:watch    # Watch mode
npm run test:coverage # Coverage report

205 tests across 14 test files.

Documentation

Guides

Services

Reference

Contributors

  • Chris Le (@chrisle) - Maintainer
  • Martijn Reuvers - Core development
  • MarByteBeep (@MarByteBeep) - Original TypeScript implementation
  • honusz - BeatInfo, TimeSync, Broadcast services
  • Kalle Kirjalainen - Contributions
  • docBliny - Contributions

Attribution

This library incorporates code and ideas from other StageLinq implementations:

  • go-stagelinq by Carl Kittelberger (icedream) - EAAS, Windows fix, token utilities
  • PyStageLinQ by Jaxc - Wireshark dissector, protocol documentation
  • kyleawayan/StageLinq by Kyle Awayan - Track path resolution fixes

Related Packages

These libraries power Now Playing — a real-time track display app for DJs and streamers.

License

MIT

Extension points exported contracts — how you extend this code

BroadcastTarget (Interface)
* Interface information for broadcasting
network/announce.ts
Player (Interface)
(no doc) [1 implementers]
devices/Player.ts
StageLinqDevices (Interface)
(no doc) [1 implementers]
network/StageLinqDevices.ts
ConnectionHealth (Interface)
(no doc) [1 implementers]
network/ConnectionHealth.ts
Databases (Interface)
(no doc) [1 implementers]
Databases/Databases.ts
EAASBeacon (Interface)
(no doc) [1 implementers]
eaas/beacon.ts
EngineLibraryClient (Interface)
(no doc) [1 implementers]
eaas/engine-library-client.ts
EAASDiscoverer (Interface)
(no doc) [1 implementers]
eaas/discoverer.ts

Core symbols most depended-on inside this repo

emit
called by 49
StageLinq/index.ts
debug
called by 44
types/logger.ts
on
called by 41
devices/Player.ts
set
called by 37
utils/Context.ts
readUInt32
called by 35
utils/ReadContext.ts
writeUInt32
called by 32
utils/WriteContext.ts
push
called by 27
devices/PlayerMessageQueue.ts
warn
called by 26
types/logger.ts

Shape

Method 214
Interface 94
Function 62
Class 47
Enum 12

Languages

TypeScript100%

Modules by API surface

eaas/grpc-types.ts56 symbols
network/StageLinqDevices.ts26 symbols
StageLinq/index.ts25 symbols
eaas/engine-library-client.ts21 symbols
services/FileTransfer.ts20 symbols
network/NetworkDevice.ts18 symbols
network/ConnectionHealth.ts17 symbols
utils/WriteContext.ts15 symbols
utils/ReadContext.ts15 symbols
eaas/discoverer.ts15 symbols
services/BeatInfo.ts13 symbols
services/TimeSync.ts12 symbols

For agents

$ claude mcp add StageLinq \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact