About TTT

I'm Josh McDannel. I've been a software engineer for about 25 years — principal frontend engineer, design systems, the kind of software that has to work every time. I built DEJA.js for my own railroad because the existing options felt stuck in another decade, and I wire my layout the way I'd want any system built: everything on DIN rail, labeled, documented, tested.

Track & Trestle is me offering that to other modelers: the software, the electronics, and the code, done as one system — using inexpensive, off-the-shelf components instead of proprietary hardware that costs ten times as much and locks you in. Any size layout, one yard or a basement empire.

DIN-rail Digital Dispatcher installed under my own layout, with a command station, driver boards, a relay board, and labeled terminal blocks
My own railroad — the DIN-rail Digital Dispatcher that runs it.

Tamarack Junction

My own railroad — and the proving ground for everything I build.

A passenger train rounding a curve below a wooden trestle, with a freight crossing a red truss bridge behind it
The trestle and the gorge.
Overhead view of the autorack yard: rows of new cars on the lot beside the tracks and a loaded auto carrier
The autorack yard, from above.
The yard running the length of the layout room, with signals, a parking lot, and freight cars along the backdrop
The yard, down its full length.

Tamarack Junction runs on one DCC-EX command station (EX-CommandStation 5.6 on an Arduino Mega) and seven devices: three Arduinos on USB, two ESP32 boards and a Pico W on WiFi, and a WLED light strip. One DEJA Server ties them together over USB serial, MQTT, WebSocket, and HTTP. This is its architecture, drawn from the layout's real configuration.

DEJA Throttle
DEJA.JS
Throttle
TRACK & TRESTLE
DEJA.JS
Throttle
TRACK & TRESTLE
WiThrottleAny WiThrottle app
DEJA Server
deja — tam
$
✓ DCC-EX connected · /dev/ttyACM0
✓ Ready — listening on tam
DCC-EX
Command Station
Track

Turnoutsservo10

  • TN NX
  • TN N-1
  • TN N-2
  • TN N-3
  • TN N4
  • TN N-5
  • TN N-6
  • TN ENG1
  • TN ENG2
  • TN TEST

Effects8

  • Frog N1frog
  • Frog N2frog
  • Frog NX1frog
  • Frog NX2frog
  • TSN Relay Arelay
  • TSN Relay Brelay
  • TSN Relay Crelay
  • TSN Relay Drelay
Devices
Tamarack Station South
Arduino Mega

Turnouts15

  • TS SXservo
  • TS S-1servo
  • TS S-2servo
  • TS S-3servo
  • TS S-4servo
  • TS S-5servo
  • TS S-6servo
  • TS S-7servo
  • TS S-8servo
  • TS S-9servo
  • PY C1kato
  • PY C2kato
  • PYDN4kato
  • PYIND1kato
  • PYS3kato

Effects4

  • TSS Relay Arelay
  • TSS Relay Brelay
  • TSS Relay Crelay
  • Tamarack Station North Lightslight

Signals3

  • TS Sig 1
  • TS Sig 2
  • TS Sig 3

SensorsIR10

  • PYN S0
  • PYN S1
  • PYN S2
  • PYN S3
  • PYN MAIN 1
  • PYN SIDING
  • PYN S6
  • PYN S7
  • PYN S8
  • PYN S9
Payette Sub
Arduino Mega

Turnoutskato18

  • PSX1
  • PSX2
  • PSX3
  • PRET
  • PYDS
  • PYDS1
  • PYDS2
  • PY S-4
  • PY AD
  • PYDN
  • PYDN1
  • PYDN2
  • PY N-3
  • PS STR-1
  • PS STR-2
  • PS STR-3
  • PS SID-N
  • PS SID-S

SensorsIR4

  • PYS S1
  • PYS S2
  • PYS S3
  • PYS S4
Roseberry
Arduino Mega

Turnoutskato16

  • RB SUM-INT
  • RB TUNNEL
  • RB P-ENT
  • RB P-EXIT
  • RY RET
  • RY ENT
  • RY 01
  • RY 02
  • RY 03
  • RY 04
  • RY 05
  • RB YD08
  • RI ENT
  • RI LEAD
  • RI STR-1
  • RI STR-2

Effectspower1

  • AC MAIN
Eagle Nest
ESP32

Turnoutsservo5

  • EN SV-INT
  • DM SV-INT
  • EN HELIX
  • EN PASS
  • DM PASS

Effectspin4

  • EN16
  • EN17
  • EN18
  • EN19
Switchyard Module
ESP32

Turnoutsservo14

  • MSY0
  • MSY1
  • MSY2
  • MSY3
  • MSY4
  • MSY5
  • MSY6
  • MSY7
  • MSY8
  • MSY9
  • MSY10
  • MSY11
  • MSY12
  • MSY13

Signals1

  • MSY Sig 3
Thunder City
Pico W

Turnoutskato2

  • Helix Loop Int
  • HX-PY Exchange

Effectsstreetlight8

  • Arling Tower
  • Jug Mountain Labs
  • Thunder City Casino
  • High Valley Condos
  • Snowbank Tech
  • Thunder City 11
  • ICBC Bldg
  • Streets
Station Lights
WLED
  • 50-LED strip
  • Throttle ↔ Server
  • WiThrottle
  • DCC-EX
  • USB
  • WiFi
  • DCC track power
  • Peripherals
Tamarack Junction's architecture, drawn with the same DEJA.js system diagram the DEJA site uses.
turnouts — 39 servo, 41 Kato
80
routes
51
locomotives
31
effects and lights
25
IR train sensors
14
automations
8
signals
4
track diagrams
9

Counted from Tamarack Junction's DEJA configuration, October 2026.

Under the hood

DEJA.js is built the way I build software for a living: typed end to end, tested on every change, and released on a schedule. It's one TypeScript monorepo — the Throttle app, the DEJA Server, the command-line tools, the device firmware, and the shared packages behind them.

The stack

Throttle app
Vue 3, TypeScript, Vite, Pinia, and Tailwind. An installable web app that runs on any phone, tablet, or computer.
DEJA Server
Node.js and TypeScript on your layout: USB serial to DCC-EX and Arduino, a built-in MQTT broker for WiFi devices, WebSockets to the app, Bonjour discovery, and the WiThrottle protocol for apps like Engine Driver.
Devices
Firmware for Arduino, ESP32, and Pico W, plus WLED lighting — turnouts, signals, sensors, and effects.
Accounts & data
Firebase sign-in and real-time databases keep your roster and layout in sync across every device.
Quality
Vitest unit and integration tests, Playwright end-to-end tests, a Storybook catalog of every UI component, Sentry error monitoring, and Changesets-managed releases.

Connects to what you already have

The DEJA Server speaks the protocols model railroad gear already uses, so your devices and apps plug in instead of being replaced.

DCC-EX
Drives your command station over USB — trains, turnouts, accessories, and CV programming.
WebSocket
A live, two-way link between the Throttle app and your layout. A change on one device shows up on every device.
MQTT
A built-in broker for WiFi devices: ESP32 and Pico W boards report sensors and take commands with no extra setup.
WiThrottle
Run trains from apps you may already use, like Engine Driver. They find the server on your network automatically.
USB serial
Arduino boards and DCC-EX connect straight to the server over USB.
DCC accessory decoders
Third-party decoders and DEJA's own decoder firmware for turnouts on the track bus.
WLED
Addressable LED lighting scenes, run from the same app as your trains.
QR and room codes
Operators and visitors join your layout by scanning a QR code or typing a room code.

DEJA Throttle — the most capable DCC throttle

Throttle is the app you and your operators hold. I design every screen in it myself, for one job: running trains.

  • Five throttle styles — buttons, slider, dial, dashboard, and a prototype-style lever. Each operator picks their own.
  • Plug in a game controller and drive with that instead.
  • Phones that support it buzz under your thumb when you press a control.
  • Conductor View puts your throttles, the loco you're driving, and your turnouts side by side on one screen — made for a tablet or a dispatcher's desk.
  • A UI component library I custom-built for DEJA Throttle: bright, easy to read, and easy to touch.
  • Installs like an app on any phone, tablet, or computer.

What it runs: throttles and your roster, turnouts, signals, sensors and block detection, routes, automations, CV programming, lighting effects, and sounds.

dejajs.com (opens in a new tab)