This is the home of OpenBVE, a license-free, open source, free of charge train driving simulator.


This program includes detailed per-car simulation of the brake systems, friction, air resistance, toppling and more. In 3D cabs, the driving experience is augmented with forces that shake your simulated body upon acceleration and braking, as well as in curves. Besides that, OpenBVE features a 3D positional sound system best enjoyed with surround speakers, train exteriors and timetables for the current run. Finally, via the main menu, routes and trains be easily selected to start a new session, the controls can be configured to keyboard or joystick devices, and a variety of options can be selected.

Compared to other simulators of the genre, especially compared to commercial games, OpenBVE has its main focus on realism, not necessarily on user-friendliness. You should be willing to study operational manuals for the routes and trains you want to drive, and will in many cases not get along by just memorizing a few keystrokes. If you can identify with this focus, OpenBVE might be the right simulator for you.

Latest Stable Release: Stable (2024-05-18)

Current News & Updates:

Whilst the list of changes in this build is quite long, most will not really be of interest to ‘normal’ users, but have instead come about as a result or requirement of introducing running on differing rails, and all the challenges that go with it.

Hotfix to to address an issue cloning animated objects containing sounds- My apologies.

Significant Changes:

  • New: Add Train.DownloadLocation to routefile commands.
  • New: Support the DenshaDeGo! MTC controller doors light. (MarcRiera)
  • New: Add PlayerDistance and PlayerTrackDistance to available animated instructions.
  • New: Links in train / route descriptions are clickable in the legacy WinForms menu.
  • Change: Many improvements / fixes to the Switch functionality. Thanks to all those who tested / reported issues!
  • Change: Standardise date format in logging (KennyHui)
  • Change: Only log an issue once per broken object instead of once per use.
  • Change: Alter TFO loading, and add rail index validation.
  • Change: Block an internal Windows file from the mechanik parser.
  • Fix: Collision not taking into account differing running rails.
  • Fix: Some adaptors produced ghost input when using a DenshDeGo! controller. (MarcRiera)
  • Fix: Implement some of the less common types into the PNG decoder, and some associated issues with API functions.
  • Fix: Correctly handle some broken .X files produced by the BVETS Convertor.
  • Fix: Position of a sound within an animated object incorrectly affected the object’s base position.
  • Fix: An empty line in train.dat could be incorrectly interpreted as an empty acceleration curve.
  • Fix: Some issues with converted acceleration in CarXML convertor.
  • Fix: CarXML convertor not escaping filenames.
  • Fix: An inverted null check causing issues with cloning animated objects containing a sound.
  • Fix: Excessive indentation when using CarXMLConvertor.
  • Fix: XML only trains were not found in several places.
  • Hacks: Add workaround for Yogyakarta- Madiun excessively slow load times.

This is a quick patch release, primarily to address a couple of issues which were inevitably identified just after I’d pushed v1.10.0.0

Significant Changes:

  • New: Add the PlayerPath command to allow for non-changeable switches.
  • New: TFOs are checked when considering the nearest train.
  • Change: Add CTRL + F9 as the default key for SWITCH_CHANGE (existing installs will need to set this key manually, or reset the controls to default)
  • Fix: Touch commands containing an underscore were broken in v1.9.2.5 by the language file refactor.

This release brings another major change, albeit again somewhat of a work in progress / tech demo at best, by allowing the addition of basic forwards / reverse facing switches (points), and for the player train to run on rails other than Rail0.

Please see the documentation for further details:

Significant Changes:

  • New: Support the Densha De GO! Multi-Train controller. (MarcRiera)
  • New: Use separate thread for loading sounds.
  • New: Allow running on rails other than 0.
  • Hacks: Add workaround for Wood Lane (2010) signals.
  • Fix: Some palleted PNG files with low color depths failed to decode.
  • Fix: An unknown key in a Sound related section of an animated file could freeze the parser.
  • Fix: Uncoupling cars could cause the game to crash in certain uncommon circumstances.
  • Fix: The rear axle of a train unintentionally triggered an all cars announcement.

Signficant Changes:

  • New: Add LocoBrakeNotch to Object Viewer.
  • New: Add BillBoard functions to Animated Objects. (WIP)
  • Change: Improvements to the customise control dialog in the GL menu.
  • Change: Improve internal handling of translations.
  • Change: Update pt-PT translation (Alexandre Carvalho)
  • Fix: Sounds incorrectly triggered on reversed routes.
  • Fix: 3D cabs incorrectly positioned on reversed routes.
  • Fix: Speed limits not working correctly on reversed routes.
  • Fix: Correctly order autogen timetable on reversed routes.
  • Fix: Possible crash if a train in the previously used list was moved / failed to load.
  • Fix: Issues with GL textbox string splitting on non-Windows platforms under some circumstances.

This release mostly fixes odd issues, but it should be noted that sound handling for some train related sounds has been subtly altered. These changes should (hopefully) be more logical in general, and also bring us closer to the behaviour of BVE.

Significant Changes:

  • Fix: Crash with some BVE5 motor sound tables (Please note that these are still WIP)
  • Fix: TrainEditor2 failed to close.
  • Fix: Glitch with a duplicated command translation.
  • Fix: Unexpected results and no error when attempting to load a malformed train.xml
  • Fix: Handle rooted paths in .obj files.
  • Fix: Correct texture co-ordinate handling for .obj files exported by Blender.
  • Fix: Some objects with large meshes could have incorrect texture handling.
  • Change: Compressor run-up no longer takes a fixed 5s, but is dynamically calculated using the start / stop sounds.
  • Change: Update routefile patch database.
  • Change: Add various missing translatable strings to TrainEditor2.
  • Change: Update zh-CN translation. (HB EHeJMor)
  • Change: Flange / run sounds are now paused as opposed to stopped when the active index changes. Please see the following errata note:–run-loop–restart-behaviour
  • Change: Pressure drop related sounds are now stopped if the pressure drop stops.
  • Change: A default control is now set for the LocoBrake on new installations/ control resets.