Skip to content

NodeJS library implementation to access information through the Denon StageLinq protocol

License

Notifications You must be signed in to change notification settings

chrisle/StageLinq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 TS v2
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

About

NodeJS library implementation to access information through the Denon StageLinq protocol

Resources

License

Stars

Watchers

Forks

Packages

No packages published