Download and install JMRI®
JMRI Setup and Installation
JMRI environments...
Release Notes
Supported Hardware
Devices, command stations, networks, and protocols:
Source Code
Issues

JMRI Help:

Contents Index
Glossary FAQ

Donate to JMRI.org

Release Notes for JMRI 5.14 release

Date: MM DD, 2025

From: Bob Jacobsen

Subject: Production Release 5.14 of JMRI/DecoderPro is available for download.

This is a draft release note only; the download links do not yet work

We are very pleased to announce that the 5.13 series of JMRI test releases has resulted in a version that's good enough to be recommended for general use, including by new users. We're therefore making that version, "Production Release 5.14" available for download today.

Notes:

JMRI is now only available under the GNU General Public License. For more information, please see our copyright and licensing page.


This release requires Java 11 to work. Java 17 is recommended.
(See our page on downloading and installing Java)


Update From Older JMRI Versions

If you are currently using a version older than JMRI 5.0, please follow these instructions carefully:
  1. Is your current version older than JMRI 4.12? If so, then update to JMRI 4.12 first, and ensure everything works correctly: check start-up, check things you need to be working, and check the JMRI log as well) before doing anything else. Store your configuration and panel files under a new name and use those from now on. Then continue with step 2.

    If you are currently using JMRI 4.7.3 or earlier on Linux or macOS (Windows doesn't need this), then it's very important that you update to JMRI 4.12 and carrying out the migration process described in the JMRI 4.12 release note before updating to any later release.

  2. Is your current version older than JMRI 4.20? Then update to JMRI 4.20 first, and ensure that works correctly (check start-up, check things you need to be working, and check the JMRI log as well) before doing anything else. Save your preferences again. Store your configuration and panel files under a new name, use those from now on, and go on to step 3.
  3. Is your current version older than JMRI 4.24? Then update to JMRI 4.24 first, and ensure that works correctly (check start-up, check things you need to be working, and check the JMRI log as well) before doing anything else. Save your preferences again. Store your configuration and panel files under a new name and use those from now on.
  4. Is your current version older than JMRI 5.0? Then update to JMRI 5.0 first, and ensure that works correctly (check start-up, check things you need to be working, and check the JMRI log as well) before doing anything else. Save your preferences again. Store your configuration and panel files under a new name and use those from now on.
  5. You can then install this release.
Following this multi-step order of updating via stable major releases safeguards you against possible migration issues that can arise from skipping these versions.

New problems with this release

New warnings for this production release:

Older warnings

See the JMRI 5.12 release note for more warnings predating the 5.13 development series, including pointers to various migration issues. These may be relevant to you if you're updating from an earlier version; we strongly recommend you update to JMRI 5.0 before installing this release, see above.

Download links:

Preliminary build files (not the final released files) can be found on the CI project page. --> During development leading to the actual release, you can find test download files on the continuous integration build page. These are development files, and might not be working at any particular time.

Changes since production release 5.12:

This production version is made from test releases 5.13.1 through 5.13.8 The full list of changes in those is available from our code repository.

Hardware Support

  • Added a column to the LccPro main window for the node's user-entered description.

BiDiB

  • Add "keep-alive" setting for netBiDiB connections.
  • Developer: BiDiBReporter now inherits from CollectingReporter like LnReporter does, so getCollection() is available.

CBUS

  • When WiThrottle is asked Share / Steal / Cancel? or Share / Cancel ? , the main JMRI Throttle silent Steal / silent Share options are checked for preferred behaviour.
  • The Console Filter is now displayed as a check-box tree.
  • Improved Node Manager CANCMDB support.

DCC++ and DCC-EX

  • Change DCC-EX heartbeat from <s> to <#>, requested by DCC-EX team

LocoNet

  • Resolved a Console log 'Error' message that could be seen when using the Slot Monitor's "Clear All Non-InUse Slots" button.

MERG

  • If you have multiple CAN-based connections defined (MERG, LCC, OpenLCB), you can now specify which one for a start-up action to use.

OpenLCB / LCC

  • If you have multiple CAN-based connections defined (LCC, OpenLCB, MERG), you can now specify which one for a start-up action to use.
  • The Send Frame tool has
    • some button labels updated,
    • a new Send Global Identify Events button,
    • more reliable control of the Open CDI Editor button state and
    • some clean-up of the window layout.
  • STL Editor: CDI parsing error handling has been improved. Debug output has been enhanced and explained in the STL Editor help page.

Roco z21/Z21

  • Fixes a bug when programming locos.

TMCC

  • Added programming support for the locomotive address and mode

New / Updated decoder definitions

  • A No Decoder decoder with extended addressing decoder has been added. This "no decoder" definition allows a roster entry to be created that does not have a physical decoder of its own.
    It was created to suport the Zimo MX series of funcion-only decoders that allow TWO addresses to be defined for a single decoder - the primary address and a secondary address. Function operations will result from commands sent to EITHER decoder address.
    The initial "No Decoder" definition is limited to a primary address of 1-127, this extended version allows the full range of extended addresses to be used
  • "DCCWorld.com" has been added as a manufacturer ID that DecoderPro recognizes.

Digitrax

  • Updated Series 7 mobile (locomotive) decoder definitions.
  • Added Series 8 mobile (locomotive) decoder definitions.

Public Domain and DIY decoders

  • New definitions for Rokuhan A053 and A059 decoders

Technologistic (train-O-matic)

  • Fix for Brake function key selection (F0-F28), including "no active" value. (Lokommander II decoders)

Control Panel Editor

  • Fixed a bug that would cause Markers to be created in random locations.

DecoderPro

  • The permissions On Program Track and Program On Main has been added in the section Decoder programming. If permissions are enabled, these needs to be enabled for the user to program decoders.
  • There are two new columns in the DecoderPro main display: "Decoder Manufacturer" and "Decoder Family". These start out hidden. To display them, right or control click in the header of any column, and then put a check next to the column name.
  • The individual DecoderPro tab panes can now be detached and independently positioned on the screen. To detach a pane, click on the "two pages" icon on the tab. To reattach, just close the detached window.
  • Fixed a bug where changes to the speed table sliders would not remind you if they had not been saved to the roster file.
  • When working with a single roster entry, there's a new "Comments" page. You can pop that off (using the page icon in the tab) and enter your comments there as you configure the values in the other panes. What you type there will appear in the comment field on the Roster Entry pane and vice versa.
  • Detachable panes no longer appear in the Windows menu unless they are actually detached.
  • Added Help and Windows menus to the detached panes.
  • It's now possible to disable Programming Track and/or Programming On Main. See Preferences -> Roster -> Programmer.
  • DecoderPro now shows a "No Group" choice in the Roster Groups selector. This contains all those roster entries that have not been assigned to a specific group. You can delete roster entries from the roster when displaying the "No Group" by selecting the roster entry, then ctrl-clicking / right-clicking on it and selecting "Delete from Roster".
  • Update the roster XML Schema to fix a bug preventing validation of the roster.xml file in some circumstances.
  • There is now a way to define indexed CVs in a decoder definition so that the PI and SI values will be written to new values afterward, e.g. 11.12.123;0.1
  • Fixed a problem causing the starting value when doing CV reads to erroneously be zero.

Dispatcher

  • At the end of a PAUSE transit action, set speedby signal, do not blindly restore pre-pause value.
  • The RosterSpeedProfile has been corrected to improve calculations for stopping. If you have manually compensated for those errors you may want to re-evaluate the Min/Max throttle settings and stopping distance percentage.
  • The F-Numbers for Transit Section Actions for Light, Bell and Horn can be set on a per train basis.
  • Fix bug delayed start actions not working when using speed profile ramping
  • When creating/editing a transit you may now set the forward and reverse stopping distances for individual sections. The forward and reverse refer to the direction thru the transit not the direction thru the section (this differs from fwd/rev stopping sensors). These are expressed in per cent and are in addition to the adjustment specified when defining a train.
  • Fix Create New Transit caused by bad initialization of stopping distance arrays. Fix crash when transit has no sections.
  • Fix TransitAction SetMaxSpeed
  • Add RosterGroup selection combo to Activate New Train. Remembers selection across sessions.
  • Fix bug ActivateTrain SaveDIalog
  • Correct calculating remaining length of blocks in a section.
  • Display minimum scale speed when activating train.
  • Add basic column sorting on the traininfo selection screen, and correct missplaced columns.
  • Tidy up debug/trace in RosterSpeedProfile.
  • Make info message in allocated section to debug.
  • Fix Exception when starting trains under inauspicious circumstances.
  • Change the default location for the dispatcheroptions.xml file to the dispatcher directory.
  • Optionally, limit Maximum Speed to any Block occupied by the train.
  • Add scroll bars to the Dispatcher Options for the smaller screens

Layout Editor

  • Normally, Layout Editor turnouts in UNKNOWN state are indicated by drawing both legs of the turnout, instead of showing just one as for CLOSED and THROWN. There's a new option 'Show ? When Unknown' in the turnout's contextual menu that will make the UNKNOWN state more visible.

NX - Entry/Exit Tool

  • Fixed a bug which could sometimes cause extraneous messages about failure to create a multipoint route even though one was available.
  • Fixed a bug that would cause Markers to be created in random locations.
  • A problem with LE track drawing and background images from 5.11.6 thru 5.13.3 including 5.12 has been fixed. The problem appears if you have a background image in the Layout Editor. If so, the track disappears behind the background image.
  • Add two options to override the changes made in PR #13857 - Entry/Exit Enhancements
    • Suppress the multi-point failed dialog
    • Revert to the old GUI behavior

LogixNG

  • The class jmri.jmrit.logixng.Category has been split into jmri.Category and jmri.jmrit.logixng.LogixNG_Category.
  • It's now possible to execute some LogixNG commands when a LogixNG error occurs. It's useful if JMRI run without a display and you want a notification for example by a sensor. To use it, select menu item Tools -> LogixNG -> Edit error handling module.
  • Preferences -> LogixNG -> Default error handling has the new option Abort without error. If it is selected and there is an error in the CondtionalNG, the ConditionalNG will be aborted but there will be no logging to the system console. This might be useful together with the Error handling module.
  • The category OperationsPro and the action Run automation have been added. The Run automation lets you run an OperationsPro automation from LogixNG.
  • Fixed a bug in the action Program On Main that caused connection specific programming modes to fail.
  • The new action ExecuteProgram has been added. It lets you launch a program from JMRI.
  • The new action Request update of turnout has been added. It's used when you want JMRI to request the state of a turnout from the layout. Note that not all systems support this.
  • The new action For each with delay has been added. It's similar to For each but has a delay between each item. It's useful when you need to do something for example for every turnout, but where you need to wait some time between each action.

Meters and MeterFrames

  • The shutdown process has been modified to detect changes to the meter settings.

OperationsPro

  • Fixed a bug where a train build would hang after the upgrade to 5.12 and there were also built trains created with an older version of JMRI.
  • Added quick service for classification/interchange tracks. This is an experimental addition, looking for testing and feedback.
  • Additional improvements to quick service tracks
  • Fixed a bug with alternate tracks in FIFO or LIFO mode
  • Printing Manifests or switch list will no longer have a page break in the middle of a locations work
  • Fixed the text header in the export routes tool
  • Enhanced the Cars and Locomotive windows, now to find a car or loco you can now use the enter key to begin the search
  • LogixNG has now the Run automation action that lets you run an OperationsPro automation from LogixNG.
  • New feature, a non-lead car in a kernel departing staging or spur can now have a custom load that doesn't match the lead car
  • Added "hyphen" feature to the train name. The program will drop "-(something)" from the train's name on Manifests and switch lists
  • New enhancement, you can now set the maximum length for a track in a pool
  • Added G scale 1:24 ratio option in the Setting window, renamed G scale 1:32 ratio "Gauge 1"
  • Fix a bug with RWE or RWL and no track assignment, along with using a schedule that doesn't specify car's load
  • Added "Show Locomotives" to edit locations and tracks tools
  • New feature, Track Priority. Cars on a higher priority track get serviced first when building trains.
  • Added car blocking to CSV Manifest and switch list files.
  • Minor improvement to the "Show Schedules by Car Type and Load" tool.
  • Improvements to the Cars print and preview, added car's "Last Location", "Last Train", and "Set out" time.
  • Fixed a bug regarding the printing of the last line of a Manifest or switch list.
  • Improvements to help.
  • Improved passenger car blocking when using custom train blocking.
  • New feature, auto select car types for a train based on the locations serviced by train's route.
  • Major improvement to "Test Destinations" for classification / interchange and staging tracks.
  • Improved train routing when there's multiple locations that can pull a car.
  • When a car arrives at a spur with a schedule, the car's final destination now changes when the car's load status changes.

Panel Editor

  • Fixed a bug that would cause Markers to be created in random locations.

Permissions

  • The permissions On Program Track and Program On Main has been added in the section Decoder programming. If permissions are enabled, these needs to be enabled for the user to program decoders.

Preferences

  • The Shutdown preference help has been updated. The store request now includes a Cancel option which cancels the shutdown process.
  • Prevent duplicate start up entries when adding a WiThrottle start up action.

Roster

  • There are two new columns in the DecoderPro display of the roster: "Decoder Manufacturer" and "Decoder Family". These start out hidden. To display them, right or control click in the header of any column, and then put a check next to the column name.
  • RosterSpeedProfile. Improve accuracy of calculations for stopping.

Scripting

  • Upgrade YAAT to 3.4. The @include statement has been added.
  • Fixed a bug that prevented restarting AbstractAutomaton-subclass objects in scripts.
  • Add MemoryValuesPersistence.py. The script will write the values for selected memory variables at shutdown and load them after starting PanelPro and loading the layout data xml file.

Signals

Signal Heads

  • For signal heads using the DCC Signal Decoder, an option has been added to the Add/Edit dialog to copy the set of appearance numbers from another signal head. This can be used to create a custom set of appearance numbers that can be easily applied to new and existing signal heads.

Switchboard Editor

  • Adds check to prevent a duplicate Turnout / Sensor / Light UserName being set.

Throttle

  • Uses correct connection for non-default Throttle release / dispatch requests.
  • If the selected locomotive has more than 33 functions defined, the Function Panel will switch to a tabbed layout to make the functions easier to locate.

Turnouts, Lights, Sensors and other elements

  • Audio Tables, Add Buffer button - Fixed a bug preventing the Add Buffer window displaying.
  • There's a new "Property Add/Edit" in the item popup menu in the various tables. This lets you add or edit property values associated with a particular item.

Warrants

  • Fix OBlock java.util.MissingResourceException: Resource 'BlockUnknown' not found exception.
  • The getWarrantSpeedMessage() method has been added to the Warrant class. This is a public class that can be used by scripts and LogixNG formulas to get the current Warrant speed message. The message format depends on the Interpretation selection in Preferences ⇒ Warrants.

WiThrottle Server

  • Prevent duplicate start up entries when adding a WiThrottle start up action.

Miscellaneous

  • Fixed a formating problem in "Report Issue" tool
  • Added a link to the JMRI users group in the Help menu
  • Updated OpenLCB_Java library to version 0.8.6, which is just a bookkeeping update without functional changes.
  • Updated the JDOM2 library from 2.0.6 to 2.0.6.1 to resolve a security issue.
  • Testing - JUnitUtil - waitFor condition failure text can be formed from a String Supplier, e.g. a lambda expression. The expression is only evaluated ( lazily ) when the assertion fails.