Skip to content

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';conststagelinq=newStageLinq({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}`);});awaitstagelinq.connect();

Features

FeatureGoPythonThis 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';conststagelinq=newStageLinq({downloadDbSources: true,maxRetries: 3,});// Device eventsstagelinq.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 eventsstagelinq.devices.on('dbDownloaded',(sourceId,dbPath)=>{console.log(`Database saved to ${dbPath}`);});awaitstagelinq.connect();// Later...awaitstagelinq.disconnect();

Static class

import{StageLinq}from'stagelinq';StageLinq.options={downloadDbSources: true};StageLinq.devices.on('nowPlaying',(status)=>{console.log(`Playing: ${status.title}`);});awaitStageLinq.connect();

Events

// Track eventsstagelinq.devices.on('trackLoaded',(status: PlayerStatus)=>{});stagelinq.devices.on('nowPlaying',(status: PlayerStatus)=>{});// Device eventsstagelinq.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 eventsstagelinq.devices.on('dbDownloaded',(sourceId,dbPath)=>{});

View all events →

State Data

The library tracks 200+ state values per deck:

CategoryExample States
TrackArtistName, SongName, TrackNetworkPath, TrackLength
PlaybackPlay, PlayState, CurrentBPM, Speed
SyncSyncMode, DeckIsMaster, MasterTempo
LoopLoopEnableState, CurrentLoopSizeInBeats
MixerExternalMixerVolume, 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:

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

Stars

38 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages