Looking for a way to drive Train Sim World, Train Simulator Classic or Wonders of Sodor using your own joystick, throttle, or custom controller setup? This open-source mod and program directly injects input into the game, giving you complete control over the train.
Installation & More information
For installation instructions and more information you can refer to the Github page
Feature Highlights
Controller Specific Profile Selection
You can select a profile for each controller allowing for a complex multi controller set-up with different active profiles.

Cab Debugger
The cab debugger gives a real time status of the current in-game locomotive as the in game controls are changing. This is useful for configuring new train profiles and checking the relevant values.

Visual Calibration
The new 1.0.0 version also brings a completely overhauled visual calibration mode making it easier than ever to calibrate and configure existing or new controllers

Profile Builder
A graphical profile builder is now available online to help with configuring new profiles if you are not comfortable creating the JSON profiles


Shared Profiles
You can submit profiles for other users to use and download right from the app

Changelog
v1.17.3 - 2026/06/16
v1.17.2 - 2026/06/15
- Add WEBKIT_DISABLE_DMABUF_RENDERER on Wayland
- Add udev installer for linux
- Update wails to 2.21
v1.17.1 - 2026/06/11
v1.17.1 - 2026/06/10
- Update UE4SS to latest experimental
- Update mapping save profile modal with option to replace all assignments
- Updated default calibration values for InfiniteRailtech
- Update HID matching
- Add unique ID to UI
v1.17.0 - 2026/06/04
- Added map keybinding dialog
- Added beta support for running train
v1.16.1 - 2026/06/01
v1.15.0 - 2026/05/30
- Add option to calibrate using the unique device ID instead of the standard device ID (useful for arduino's and other similar devices)
- Improve direct control server restart handling and error logging
- Website security updates
v1.14.2 - 2026/04/12
- Fix invert handling in step thresholds
v1.14.1 - 2026/04/11
- Minor changes to mods and socket lib
v1.14.0 - 2026/04/09
- Minor update to max change rate handling in API control
- Updated direct control to try multiple ports
- Updated logging
- Updated default calibration and SDL map for M3
- Upgrade UE4SS
v1.13.0 - 2026/04/07
- Fix button handling in API control mode
v1.12.0 - 2026/04/01
- Added inspect dialog for debugging controller values
- Disabled status bar overlay for android
v1.11.2 - 2026/03/31
v1.11.1 - 2026/03/21
- Updates calibration form to ignore empty control names instead of silently failing
v1.11.0 - 2026/03/20
- Add mod installation path for Wonders of Sodor
- Add side dection support in API control
- Add named thresholds for step thresholds
- Fixes a bug with the {SIDE} placeholder in direct control
v1.10.1 - 2026/03/15
- Add auto-reloading of configuration when file(s) change
- Updated {SIDE} placeholder to support customizing the placeholders with a new {SIDE:F:B} syntax. This is to support the new Czech locomotives where F = 1 and B = 2 on some controls. With this new placeholder implementation it is possible to use
ControlName_{SIDE:1:2}
v1.10.0 - 2026/03/08
- Adds an easier way of mapping controls through the UI
- Adds option to include the USB ID in the control name specifier to create a multi-controller setup
- Adds the
enable_api_fallback option to direct control to simplify configuration
v1.9.3 - 2026/03/02
- Fix calibration modal bug
- Update negative value handling
v1.9.2 - 2026/03/01
- Added new
step_thresholds option for direct/api/sync control assignments which can be used to manually map lever inputs onto direct control values more accurately
v1.9.1 - 2026/02/26
- Add support for
eq operator in conditions
- Add
match parameter to momentary and toggle assignments which can be a value of exceeds (default) or equals
v1.9.0 - 2026/02/22
- Add searchbox to explore tab
v1.8.3 - 2026/02/20
- Disable UE4ss hot reload by default
v1.8.1 - v1.8.2 - 2026/02/14
- Fixes tags not showing for all profiles in explore tab
v1.8.0 - 2026/02/11
Major Features
- Added support for Train Simulator Classic
Fixes & Improvements
- Refactored data fetching mechanism for better performance and maintainability
- Added support for rail class specific assignments in controller configurations
- Implemented additional configuration options: max_change_rate, control_range
- Made general improvements to API control and improved stability
- Made general improvements to direct control and improved stability
- Fixed CommAPIKey detection for TSW5
- Add support for embedded configuration and profiles
- Fixed bug with inverted calibration normalization
- Add way to remap values when using conditional direct control with partial range
v1.7.1 - 2026/01/14
v1.7.0 - 2026/01/08
- It is now possible to configure a virtual controller using any android device. You can find a quick start guide on how to do so on the website (https://tsw-controller-app.vercel.app/docs)
- Clarify exe selection
- Add select CommAPIKey.txt option
- Don't use control mode if not connected
- Allow embedding calibration into shared profiles to enable fully pre-configured profiles

v1.5.3 - 2025/12/12
- Add notice for unconfigured controllers
v1.5.2 - 2025/12/09
- Change deadzone logic to update the value but set it to 0
- Update deadzone logic to start 0 at the deadzone limit instead
- Apply default deadzones and min/max limit adjustment when configuring new controllers
- Don't override previously configured controls automatically
- Update smoothing logic when processing raw events
- Enable notify by default
v1.5.1 - 2025/12/07
- Add "notify" flag to enable in-game notifications when changing values with direct control
v1.5.0 - 2025/12/06
- Add axis easing to calibration dialog
v1.4.2 - 2025/12/04
v1.4.1 - 2025/12/04
- Fixes auto-selection
- Fixes virtual conditions
v1.4.0 - 2025/12/03
- Implement virtual controls
- Cab Debugger can connect
- Only show last 1000 logs by default
- Fix raw events
- Fix unique joystick IDs
- Allow auto-selecting with only rail class information
- Fix SDL events
- Improvements to DLL mod for memory safety and performance
v1.3.6 - 2025/11/30
- Fix bug when saving calibration files
- Add way to select profile for all controllers
v1.3.5 - 2025/11/29
- Update webkit to 4.1 for debian/ubuntu
- Fix conditions missing from sharing and profile builder
- Fix "Submit now" link
v1.3.3-v1.3.4 - 2025/11/28
- Fix explore tab sources
- Add proxy mode
- Fixes a bug with controller throttling
v1.3.2 - 2025/11/27
- Update profile IDs to not include updated time
- Streamline profile selection logic
- Fixes event throttling bug
- Fixes sync control auto-detection
- Fixes bug in TSW API debugger
v1.3.0-v1.3.1 - 2025/11/26
- Show all profiles regardless of duplicate names
- Show better warnings for duplicate extends
- Add full support for autodetection based on rail class and controller
- Added controller name and USB ID to UI
- Added auto-detection notice
v1.2.0-v1.2.1 - 2025/11/23
- Fixed additional "Metadata" key when saving profile for sharing
- Added "Always on top" option in settings
- Fixed api control action bug
- Added more information in profile selection dropdown
- Added support for author information in explore tab
- Add "extends" option for profiles to compose profiles
v1.1.0 - 2025/11/22
- Implements new "api_control" mode to utilize the API instead of the mod. This uses the same control name but sends the value using the HTTP API (may require the API key to be configured).
Note has higher overhead than the direct control mode.
- Updates cab debuggger to utilize HTTP API if available
- Added search box to cab debugger
- Added preferred control mode in settings
- Made minor improvements and fixes
v1.0.4 - 2025/11/04
- Fixed filepath handling on Windows
v1.0.3 - 2025/11/04
- Fixed build version on Windows
- Show all logs in logs tab
- Add option to save logs to file
- Add option to reset cab debugger state
v1.0.2 - 2025/11/02
v1.0.0 MAJOR NEW RELEASE - 2025/11/02
- This is a major overhaul release. Check out the full changelog details on github
v0.2.6 - 2025/09/13
- fixes build to work with the latest UE4SS experimental build (YOU WON'T NEED THIS UPDATE IF YOU ARE STILL ON AN OLDER UE4SS BUILD)
v0.2.5 - 2025/07/27
- fixes calibration mode SDL mapping writing same filename for all controllers
v0.2.4 - 2025/06/15
- Fix calibration mode not exiting and writing files.
v0.2.3 - 2025/06/06
- Update the mixing of
null values to act as free range zones instead of automatic interpolation zones. This makes for smoother actions between detents. Eg, the following steps value: [0.0, null, 0.5, 0.6, null, 1.0] - will snap to 0.5 and 0.6 but allow free range of motion between 0.0 and 0.5 and 0.6 and 1.0.
Tags:
gamepad
joystick
raildriver
Loading comments…