Skip to main content

Tap.Command.Move.

From the app in your hand to the track under your trains — every layer connected.

Throttle app — slide to control speed

Walkthrough

See it in action.

Coming soon

DEJA.js Apps

Control from any device.

Throttle, Cloud, Monitor — every app connected to the same layout in real time. Open Throttle on your phone, Cloud on your tablet, Monitor on your laptop. Changes sync instantly across all of them.

ThrottleDrive trains, throw turnouts, trigger effects Throttledocs
CloudManage your roster, routes, and automation Clouddocs
MonitorSee everything happening on your layout Monitordocs

Explore each app to see what it can do for your layout.

Throttle app on mobile
Cloud dashboard
deja — tamarack

$ curl -fsSL install.dejajs.com | bash

✓ Installed deja to ~/.deja

 

$ deja start

✓ WebSocket server on :8082

✓ Firebase connected (layout: tamarack)

✓ Serial: /dev/ttyUSB0 @ 115200

✓ MQTT broker connected

 

Ready — listening for commands

DEJA Server

One command. Everything connects.

The DEJA Server bridges your apps to your layout. It speaks WebSocket to your browser, Firebase to the cloud, serial to your DCC-EX command station, and MQTT to your IO devices.

Install it anywhere Node.js runs — your laptop, a Raspberry Pi, or a dedicated server. One curl to install, one deja start to launch, and your entire layout is online.

DEJA IO

Expand endlessly.

Anything that connects to a microcontroller becomes part of your layout. Wire up LEDs for building lights, servos for turnouts, sensors for block detection, speakers for crossing bells — the platform grows as your imagination does.

Arduino

USB serial

USB serial — direct pin control. Great for turnout machines, signals, and panel buttons near the command station.

Pico W

Wi-Fi / MQTT

WiFi MQTT — wireless placement anywhere on the layout. Perfect for lighting, sound, and sensors in hard-to-reach spots.

DEJA IOdocs

What you can build

💡LED StripsAnimated lighting effects, building interiors, streetlamps
🔄ServosTurnout motors, crossing gates, semaphore arms
🚦SignalsBlock signals, ABS signaling, approach lighting
RelaysTrack power switching, accessory control, automation
📡SensorsIR detection, block occupancy, automation triggers
🔊SoundCrossing bells, ambient sounds, announcements
⚙️MotorsTurntable drives, conveyor belts, animated scenes
📺DisplaysStation clocks, departure boards, status panels
🔘ButtonsPhysical control panels, dispatcher boards

Configurations

Start simple. Scale up.

DEJA.js grows with your layout — no rewiring, no reinstalling.

Starter

A loop of track, one phone, one command station. Running in minutes.

Shelf

Add Cloud management and an Arduino for turnouts and signals.

Bedroom

Monitoring, wireless Pico W effects, and full cloud sync.

Basement

Two power districts, multiple operators running trains together.

Club

Multiple command stations, throttles, monitoring, and tour mode.

DEJA.JSThrottleDEJA ServerDCC-EXCommand StationTrackDEJA.js platformDEJA IO devicesDCC-EX (3rd party)Connected peripherals

Under the Hood

How it actually works.

DEJA.js is closed-source, but we believe in being open about how the platform works. Here's what's happening behind the scenes.

Why not WiThrottle?

WiThrottle requires a native mobile app, and native iOS/Android apps are still on our roadmap. DEJA.js runs entirely in the browser — no app store, no installation, instant updates. When native apps arrive, they'll connect through the same platform.

How does authentication work?

Every app — Throttle, Cloud, Monitor — signs in with Firebase Authentication. Sessions are backed by signed JWT tokens and verified on every request, and the DEJA Server checks your subscription against Firestore before it will even open a port. You can share a layout with guest operators without handing out your password, and revoking access is instant.

Is my layout data secure?

Your roster, routes, turnouts, and effects live in Firestore and Realtime Database, protected by per-layout security rules — only accounts you've granted access can read or write them. All traffic between the apps, the server, and Firebase is TLS-encrypted in transit and encrypted at rest on Google's infrastructure. No layout data ever touches a public internet path in plaintext.

How does Firebase work?

Firebase provides real-time sync between your apps and the server. When you change a throttle setting on your phone, Firebase pushes that change to the server instantly — no polling, no refresh. Your roster, routes, turnout states, and effects are all stored in Firebase so they persist across sessions and devices.

What are Cloudflare Tunnels?

Cloudflare Tunnels let you reach your layout from anywhere without exposing your home network. The DEJA Server opens an outbound-only encrypted tunnel to Cloudflare — there are no inbound router ports to forward, no firewall rules to punch holes in, and no DDNS to maintain. Cloudflare then routes authenticated requests through its global edge, giving you a public HTTPS URL that terminates inside your running server.

Why Cloudflare on top of auth?

Cloudflare sits in front of every request as a second layer of defense. It handles TLS termination, shields the server from DDoS and bot traffic, and can enforce Cloudflare Access policies so only your accounts ever reach the tunnel. Combined with Firebase Auth inside the app, that's WAF + identity + subscription validation before any DCC command touches the track.

How does the DEJA CLI work?

The DEJA CLI is a single command that starts the entire platform. It launches the Node.js server, connects to your DCC-EX command station via USB serial, establishes the WebSocket server for browser connections, connects to Firebase for cloud sync, and optionally starts the MQTT broker for IO devices. One command: deja start.

How does MQTT work?

MQTT is a lightweight messaging protocol designed for IoT devices. The DEJA Server runs an MQTT broker that Arduino and Pico W devices connect to wirelessly. When you trigger an effect in the app, the server publishes a message to the appropriate MQTT topic, and the device receives it in milliseconds. It's the same protocol used in industrial automation — reliable, fast, and designed for constrained hardware.

How does serial communication work?

The DEJA Server connects to DCC-EX command stations over USB serial at 115200 baud. Every DCC command — throttle, turnout, function — is wrapped in angle brackets and sent as text: <t 3 50 1> means "set address 3 to speed 50, forward." The command station translates these into DCC signals on the track. Simple, documented, and open-source at the protocol level.

Why DEJA.js

Built for today's layouts.

Model railroad control hasn't kept up with the rest of technology. Legacy tools were built for a different era — desktop-only, single-user, limited to throttle control. DEJA.js is what happens when you start fresh with a modern stack and an ambitious vision.

The stack

TypeScript

End-to-end type safety — from the server to every app.

Vue 3

Reactive, component-driven UI with Composition API.

WebSocket

Real-time bidirectional — every device sees changes instantly.

Firebase

Cloud sync, authentication, and real-time database.

MQTT

Lightweight IoT messaging for wireless device control.

Node.js

Runs anywhere — laptop, Raspberry Pi, dedicated server.

How it all connects

Every piece of the stack has a purpose. TypeScript catches errors before they reach your layout. WebSocket delivers commands in milliseconds. Firebase keeps your roster and routes synced across every device. MQTT lets you place wireless IO devices anywhere on the layout without running wires. And the server ties it all together — one process that speaks every protocol your layout needs.

vs. legacy desktop software

  • No Java runtime required — runs in any browser
  • Multi-device by default, not single-screen
  • Modern, touch-friendly interface — not desktop-era UI
  • Cloud sync keeps your layout data safe and accessible
  • Real-time updates across every connected device simultaneously

vs. standalone throttle apps

  • Not just a throttle — a complete platform
  • Layout management, automation, effects, signals, sounds
  • Works on any device with a browser — iOS, Android, desktop
  • Arduino and Pico W expansion for physical IO control
  • Cloud-powered roster, routes, and configuration management