Skip to main content
DEJA IO

Beyond the Throttle

DEJA.js isn't just a throttle — it's a full layout automation platform. IO devices let you control turnouts, signals, lighting, sound, and sensors from the same apps you already use to run trains.

Connect an Arduino over USB for wired reliability, or a Pico W over WiFi for wireless flexibility. Configure everything in the Cloud app, then control it all from the Throttle — no code required.

Video walkthrough coming soon

Make sure you've completed the Getting Started guide — your server should be running and your command station connected.

How It Works

DEJA.js connects your browser to your layout hardware through three communication protocols — each optimized for different setups.

Your Phone / Browser

ThrottleCloudMonitor

🖥️ DEJA Server

Node.js on your computer or Raspberry Pi

🔌

Serial USB

Direct wired connection

📡

MQTT WiFi

Wireless via broker

🌐

WebSocket

Real-time bidirectional

Your Layout

TurnoutsLightsSignalsSensorsSounds

Choose Your Protocol

🔌

Serial USB

Direct & reliable

DeviceArduino
LinkUSB cable to server
SpeedLowest latency

📡

MQTT over WiFi

Wireless & scalable

DevicePico W
LinkWiFi to MQTT broker
SpeedLow latency

🌐

WebSocket

Real-time & flexible

DeviceAny networked device
LinkTCP port 8082
SpeedPersistent connection
Supported Hardware

Ready-Made Devices

🔌

Arduino

Serial USB · Wired

🔧PCA9685 servo control for turnouts & signals
💡Digital outputs for LEDs & accessories
🚦Multi-aspect signal heads
📟Sensor inputs for block detection
📡

Pico W

MQTT WiFi · Wireless

📶WiFi connectivity — no wires to the server
🔧PCA9685 servo control over I2C
💡Digital pin outputs for LEDs & relays
⚙️Runtime configuration via MQTT commands
🛠️

Build Your Own

DEJA.js uses open protocols — any device that speaks Serial, MQTT, or WebSocket can join your layout. Send JSON commands and you're in.

Custom Device Guidedocs
Deploy Flow

Configure Once, Deploy Anywhere

🚀

Plug in a new device and it's auto-detected by the server. Configure pins, servos, and outputs in the Cloud app, then deploy with a single command — no re-flashing, no code changes.

Dive Into the Docs