Custom Controller Mapper - Control Train Sim World/Train Simulator Classic with Any Joystick or Analog Controller – No RailDriver Required

  • by Liah
  • 6 upvotes
  • Downloaded 1,237 times

Description

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.
Controller Specific Profile Selection

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.
Cab Debugger

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
Visual Calibration

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
Profile Builder 1
Profile Builder 2

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

Changelog

v1.17.3 - 2026/06/16

  • Updated icons

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

  • Fixed macos build

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

  • Upgrade to SDL3

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

  • Minor profile update

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

  • Fix calibration bug

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
    Virtual Controller

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

  • Fixes virtual toggles

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

  • Small bug fixes

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

Installation Instructions

To install the mod and program just head to the releases page and download the latest installer for your platform. Once you launch the app you will just need to use the "Install mod" action to install the latest mod into Train Sim World/Train Simulator Classic

See Github for more details (https://github.com/LiamMartens/tsw-controller-app)

Files

Comments

Loading comments…

About this mod

Created
23 May 2025
Updated
2 hours ago
Game
Train Sim World
Type of content
Utility
Train Sim World Version
Train Sim World 5, Train Sim World 6