Release Notes for JMRI 5.16 release
Date: MM DD, 2026
From: Release Pumpkin
Subject: Production Release 5.16 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.15 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.16" 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 21 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:
- 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.
- 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.
- 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.
- 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.
- 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.14 release note for more warnings predating the 5.15 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.
- If you're using a Firefox web browser and opening JMRI
help files locally (not over the web), a Firefox bug
can sometimes cause it to enter a loop. There's a
workaround in
this JMRIusers post.
- Since JMRI 5.15.1
The serial communications library that JMRI uses has been updated.
If your JMRI installation is having trouble communicating with your
model railroad hardware, please contact us on
the JMRI users group.
- Since JMRI 5.15.4
The way mouse clicks are handled has been updated.
Although this has been tested with mice and trackpads,
it's possible that this will cause problems with other hardware,
e.g. touch panels. If you do encounter new problems with clicking
on panels, please contact us on the
JMRI users list.
- Since JMRI 5.15.4
The RailCom handling has been updated to current standards. In particular, the enum
representing the orientation has been changed from ORIENTA and ORIENTB to
EAST and WEST respectively and some of the text strings have changed.
These may affect any scripts you have that reference
the direction of a RailCom report (tag) or parse the status messages.
- Since JMRI 5.15.5
The web server folder app has been removed. It
might cause third party applications to fail. If this happens to
you, please contact us on
the JMRI users group.
- Since JMRI 5.15.7
Raspberry Pi GPIO pin numbering has changed.
The Pi4J library has been updated from version 1.2 to 2.8.0.
Pi4J 2.x uses BCM (Broadcom) GPIO numbers instead of the WiringPi numbers
used by Pi4J 1.x.
Any panel files or scripts that define Raspberry Pi sensors or turnouts
must have their GPIO address numbers updated to the equivalent BCM pin
numbers before they will work correctly with this release.
- Since JMRI 5.15.7
Raspberry Pi: the libgpiod2 library is required for GpioD GPIO support.
This release adds support for the Pi4J GpioD plugin, which uses the modern Linux
GPIO character-device interface preferred on kernel 5.10 and later.
To enable it, install the native library before starting JMRI:
sudo apt install libgpiod2
(Raspberry Pi OS / Raspbian) or the equivalent for your distribution.
If libgpiod2 is absent, Pi4J will fall back to the LinuxFS provider
for digital I/O; all sensors and turnouts will still function.
- Since JMRI 5.15.7
Due to the refactoring the JMRI Swing Throttle code, some scripts may be broken, particularly :
- ThrottleFrame was moved to package jmri.jmrit.throttle.implementation (was jmri.jmrit.throttle previously)
- jmri.jmrit.throttle.ThrottleFrameManager.createThrottleFrame() now returns a jmri.jmrit.throttle.interfaces.ThrottleControllerUI
which is an interface implemented by (among other) jmri.jmrit.throttle.implementation.ThrottleFrame (same class name as previously but moved to a new package)
- if you need a small throttle, see ThrottleFrameManager.createSimpleThrottleFrame(RosterEntry) or ThrottleFrameManager.createSimpleThrottleFrame(DccLocoAddress)
Download links:
This production version is made from test releases 5.15.1 through 5.15.10 The
full list of changes
in those is
available from our code repository.
Hardware Support
- Network connections now take their host name/address and port number
from the per-node individual configuration, if available,
and from the shared configurations if not. This will allow
you to have different host name/address for different
computers sharing the same JMRI profile.
- The list of ports on a connection configuration page is now updated
event time to click on it to open it. This lets you e.g. pull out your
command station port, note the list of remaining ones, then reconnect
your command station and select the new port that just appeared.
CBUS
- The RailCom support has been updated:
- DDES messages are now being decoded into
RailCom tags, including the orientation, direction and
motion values.
- Receipt of a RailCom-format DDES message will now
automatically create a reporter for the received device
number if it doesn't already exist.
- Related changes to the RailCom tag table have been made,
see the Miscellaneous category below.
C/MRI
- The node configuration is now preserved if the
connection type is changed. For example, if you
change the connection from serial to simulator,
the node configuration is kept.
DCC++ and DCC-EX
- DCC++ Ethernet connections now automatically attempt to reconnect when
the connection is lost, retrying indefinitely until the command station comes
back online. This behavior can be disabled by unchecking
"Reconnect automatically if connection is lost" in Additional Connection
Settings.
- DCC-EX Traffic Monitor: controls now wrap onto additional rows when the
window is narrowed and the controls area grows upward to keep everything visible,
rather than clipping checkboxes off the bottom
(#15134).
The window title and menu action label also now read "DCC-EX" rather
than "DCC++".
- DCC-EX Traffic Monitor: traffic lines now show an explicit "TX:" or
"RX:" direction marker regardless of whether the translated text or raw
form is displayed, and the raw form is wrapped in <…> rather than
[…] to match DCC-EX's native command syntax.
- A new EXRAIL Automations window (under the DCC-EX menu)
lists your CommandStation's Routes and Automations and lets you trigger them.
Entry details are fetched sequentially for reliability on hardware with small
WiFi buffers (Mega+WiFi)
(PR #15160).
- The EXRAIL Automations window now remembers the last loco
address you entered during the session - the prompt pre-fills it the next time
you trigger an automation. The dialog also validates the address (1-10293)
and re-prompts if the input is out of range or not a number.
- The Virtual LCD window now supports
more than one display. Each display is shown in a single
row in the Virtual LCD window, with
the first display at the left.
- Virtual LCD can now be added to Panel Editor and Layout Editor.
- Change default DCCppOverTCP port from 1235 to 2560 to match DCC-EX default.
- DCC-EX: turnout details are now fetched one at a time after startup rather than
all at once, preventing the command station's WiFi buffer from being overwhelmed
on layouts with many turnouts.
- DCC-EX: out-of-range turnout IDs in the <jT> response (caused by WiFi
buffer overflow on Mega+WiFi) are now ignored with a warning rather than being
registered as bogus turnouts.
- DCC-EX Traffic Monitor: the display limit has been raised from 500 to 2000
lines, sufficient for large layouts that enumerate many turnouts on startup.
- DCC-EX: broadcast messages (<* ... *>) containing angle brackets
in the body are now parsed correctly. Previously the first > inside the
body terminated the frame early, which could leave the programmer stuck
waiting for a reply that never arrived.
LocoNet
- Added LNRP3 to some LocoNet Monitor message types.
- Updated the LocoBuffer-USB and LocoBuffer-NG help.
- Fix bug, PR4 Stand-alone Loconet
- LocoNet-over-TCP connections now automatically reconnect if the server
goes away and comes back. Detection relies on a clean TCP close
from the server; hard disconnects (network drop with no TCP FIN)
are only detected when JMRI next tries to send a message.
MERG
- Fixed a problem introduced in 5.15.4 where some RFID messages
would be improperly decoded as RailCom reports.
MQTT
- Updated the Signal Mast support
so that a mast can be updated by an
MQTT message from the layout.
NCE
- Added a sample script showing how to send and receive NCE messages.
- Fix STL Editor bug introduced in PR 14625.
- Fixed a problem adding signal masts when the
OpenLCB or LCC system letter is not "M".
- Improved display of stream data frames in the Monitor.
- Improved how traffic from an internal hub is
displayed in the Monitor.
- Updated the OpenLCB library to properly display
Stream-related messages.
- The JmriFaceless application can now open an OpenLCB/LCC Hub
- The Reporters have been updated to properly parse
the format in the current version of the
LCC DCC Detector Working Note.
- A bug that would cause LCC Reporters to improperly be created as
Internal Reporters has been fixed. If you have Internal Reporters that
have been created in the past by this bug,
- Start this version of JMRI or later
- Delete all the IdTags and, if relevant, RailCom tags that reference the internal Reporters
- Delete the internal Reporters
- Save your panels and table to your usual file
- Quit and restart JMRI.
- The OpenLCB_Java library has been updated, which brings
- Improvements to how streams are handled, which will make
firmware updates to certain node types more reliable.
- When opening a configuration ("CDI") window, the
window will stay minimized while both the display information (the CDI contents)
and the configuration data contents are read. Although this takes
longer, it prevents you from accessing data variables that
have not yet been loaded. Previously that early access
has led to various problems with inconsistent data.
- Blank lines are now accepted as comments in node backup files
- The LCC/ChangeDefaultBackupFileName.py script has been updated to
include the node's event ID if no node name is available. This
will e.g. reduce confusion when backing up brand-new nodes.
- Improved how special characters in filenames are
handled by the ChangeDefaultBackupFileName.py script
- Updated the OpenLCB_Java library to include an
improvement in how unknown-MTI messages are displayed.
- The event-entry field on the Send Frame panel will now
allow entry of event names.
- The popup menu on event entry fields now lets you copy
the numerical event ID even if a event name has been entered.
- (Internal) The load and store process for the Event Table
now permits multiple "names" elements. This makes it easier
to merge Event Table information from several profiles.
- Improved how mouse clicks are handled with showing/hiding
sections of the configuration screens.
- Resolved an issue where reading a memory space from a CS-105
would timeout and fail.
- Fixed a bug which could cause the Event Table to
refresh too often, which annoyingly caused it to
lose your current selected row.
- Suppress the 'Make Turnouts' and 'Make Sensors' buttons in the configuration
window when they aren't going to do any adds.
- Add option to the popup menu in eventID-entry fields that lets you
name the event ID right there.
Raspberry Pi
- The Pi4J library used for Raspberry Pi GPIO support has been updated
from version 1.2 to version 2.8.0 (the current 2.x release).
Pi4J 2.x uses a new API and a plugin-based architecture replacing
the older
GpioFactory / GpioController model.
- Pin numbering has changed.
Pi4J 1.x addressed GPIO pins using WiringPi numbers.
Pi4J 2.x uses BCM (Broadcom) numbers directly.
Existing panel files and scripts that reference Raspberry Pi sensors
or turnouts will need their GPIO address numbers updated to use
the corresponding BCM pin numbers.
For example, WiringPi GPIO 0 (BCM 17) becomes address 17 in the
new numbering scheme.
- Support has been added for the Pi4J GpioD plugin
(
pi4j-plugin-gpiod), which uses the modern Linux GPIO
character-device interface (/dev/gpiochip*) introduced
in kernel 5.10.
This is the preferred GPIO interface on Raspberry Pi OS with kernel
5.10 or later (including the 6.x kernels shipped with current
Raspberry Pi OS releases).
It requires the libgpiod2 package:
sudo apt install libgpiod2
The plugin is discovered and activated automatically alongside the
existing LinuxFS and PiGpio plugins via Java ServiceLoader; no
configuration change is required.
- Hardware GPIO plugins (
pi4j-plugin-raspberrypi,
pi4j-plugin-linuxfs, pi4j-plugin-gpiod)
are now loaded at runtime via Java ServiceLoader on Raspberry Pi
hardware and are no longer bundled as compile-time dependencies.
SPROG
- Fixed spurious command station slot thread timeouts that could
shut down track power when the GUI was busy. Reply notifications
from the traffic controller to the command station are now
delivered synchronously instead of being queued on the Swing EDT,
so the slot thread is woken immediately when the hardware replies.
- Added a consecutive-timeout retry counter to the command station
slot thread. A single missed reply now triggers a retry with an
idle packet instead of immediately removing track power.
Track power is only removed after three consecutive timeouts.
Zimo MXULF
- New/updated support for the Zimo KLUG
- Added additional, faster speeds to the KLUG connection.
New / Updated decoder definitions
MD Electronics
- The 80101 Turnout Drive decoder is
added. Support for accessory OPS mode programming is
currently missing but service mode programming &
Reset all is included.
MTB Model
- Added series MND25 Locomotive decoders
Piko decoders
- Add scale G decoders, support new firmware versions
- New: Piko Decoder Scale G support, more LC controller types definition
Changes: product-ID identification, new decoder firmware version, new CVs
Bug fixes and various improvements
Update Decoder Definitions is highly recommended
TAMS
- The LD-W-32.2 decoder has been added.
SoundTraxx
- New file TSU2 OEM Athearn N
ZIMO
- Improved how some recent Zimo decoder types are detected.
Control Panel Editor
- Improved how clicks are handled so they'll
be less finicky.
- Change the scaling menu item from "multiply current scaling"
to "set new scaling percentage" form.
- The option Disable loco marker popup menus has been added
to the Marker menu. If it's selected, it's possible to
move around loco markers but it's not possible to open the popup menu for
loco markers. This is useful for dispatcher that wants to move
the loco markers but doesn't want to edit the loco markers.
DecoderPro
Dispatcher
- Defer calling "loadAtStartup" until the layout data file loading is done and
layout block paths have been initialized.
- Create, terminate, open throttle, extend, terminate from LEPanel.
- Added: physics-based acceleration
- Added: Distance based stopping (including overriding stop sensors and slowing to minimum speed within the set distance and stopping by stop sensor)
- Stop train immediately if it has no occupied section, or
blocks go active in the wrong order. This behaviour can be turned off
in dispatcher options.
- Add the current, next block and train held status to the dispatcher screen.
- When resuming from a failure, inform user where the head of train needs to be
or which block needs to be cleared. If they have being using Manual
present them with choice about the direction.
- Fix NPE error on dispatcher train restart.
- Fix up to and fro restart at far end
- Save dispatcher usestrict option correctly.
- Continue tracking blocks thru stopping at end.
Internationalization
- Various work in several languages
Layout Editor
- Provide an option to add a memory variable or a block contents field as an input text
field instead of as a label. This makes it possible to change memory or block values
when using the JMRI web server. Limitations:
- If the value is not a text string, such as a roster entry, changing the displayed
text will replace the item with the new text.
- The panel zoom level must be at 1 to edit the text content.
- Improved how clicks are handled so they'll
be less finicky.
- Change the scaling menu item from "multiply current scaling"
to "set new scaling percentage" form.
- Fixed a problem that could cause bold-text labels to have
their contents truncated. e.g. "West" would be
shown as "Wes...". This was mostly a problem on
Windows, but could have affected any system type.
- You can now add an "Output Indicator" to a
Layout Editor panel. This shows the status of a JMRI Turnout object.
Note that this is not a layout turnout; you can't
connect track to it or use it for signaling.
Rather, it's a way to represent a power switch, accessory
or other non-track thing that's driven by a JMRI output using
a Turnout object.
- Added a new "Make Layout Editor XML output more reproducible" option
to the Load and Store preference pane. The default is off. When
on, this option will result in positions of Layout Editor objects
being stored in a form that's more reproducible. This will result
in fewer spurious changes if you're e.g. storing panel files in a
tracking system like Git.
- Fixed a problem when storing and loading the new Output Indicator icons
- When changing icon images for turnouts, sensors and signal heads, the
resource files are now listed in alpha order by name.
- The LayoutTurnout and LayoutTraverser require manual changes when the
Use Dispatcher with Signal Masts feature is enabled. To
prevent JMRI errors and Java exceptions, these changes have to be removed
before deletion or some modifications. When needed, a dialog is displayed
with a list of the items to be removed.
- Improved the layout of the edit tools to reduce the need for
vertical scrolling when they're at the top or bottom of the window.
- Fixed a bug where the panel bounds wasn't updated when
an icon was moved using the popup menu item
Set Location.
- Handle mouse down events, drag and popup menus, on shapes before background objects
(level 0 and level 1).
- The option Disable loco marker popup menus has been added
to the Marker menu. If it's selected, it's possible to
move around loco markers but it's not possible to open the popup menu for
loco markers. This is useful for dispatcher that wants to move
the loco markers but doesn't want to edit the loco markers.
- Prevent a possible ClassCastException introduced by PR #14492
and PR #14928 to support signals on turntables and traversers. The exception occurs when
Entry/Exit is used and a panel has a turntable and/or a traverser. The added logic
did not consider that the bean might be an Entry/Exit sensor.
NX - Entry/Exit Tool
- Fix an incomplete route cancel cleanup which leaves the protected block allocated.
- Fix route selection when the layout does not have signal masts paired with NX sensors.
LccPro
- Added a copy/cut/paste pop-up menu to text fields that
didn't previously have a pop-up menu.
- Added "Print Table" and "Export CSV" global buttons that
do pretty much what they say.
- Added a "Backup" button to each row that will directly
back up the selected node to a file. The directory
where that file will be placed can be set with the
"Set Backup Directory" action in the Settings menu.
- Improved performance of Active display in lower right
on high-bandwidth links.
- If you have reordered the columns in the main LccPro window and
you export to a CSV file, the columns will now be in that order
and properly labeled in the file.
LogixNG
- Warning
Tables and panels files created with this version or later
and that's using the LogixNG action Error
cannot be opened in earlier JMRI versions.
- The LogixNG action Error has an improved
error message which allows using a local variable or a
formula for the error message.
- LogixNG Tables can now be placed on Panel Editor panels.
The table can be read-only, editable or that only some
columns are editable. It's also possible to have buttons
and comboboxes in the table on the panel.
- Fixes a bug where local variables might have the wrong values
when using the action Execute delayed.
- The action Throttle has been improved. It
has the option to wait for a throttle to be aquired and
then release it immediately after doing its action. This
is useful if you want to dispatch the throttle.
- Add Section and Transit to the bean listeners.
- Fix the Dispatcher Expression. Active train status changes were being missed.
- The LogixNG function regex() has been
added. It lets you use a regular expression to extract
information from a string.
For more information about regular expressions, see the
Java class
Pattern.
- Update the Turnout Lock action description.
OperationsPro
- New feature, you can now build your train using "On Time" mode. Requires using real or fast clock to schedule for your trains.
- Locomotives can now use the quick service tracks feature.
- New tool to quickly enable tracks for quick service.
- Added pick up and set out times for locomotives.
- Trains now have a departure day.
- New automation acton item: Wait for automation to complete.
- New automation acton item: Down Counter.
- Added new dialog message to the Trains window confirming termination of built trains.
- Fix a bug that would crash the Train and Route windows if there were departure times in the train's route.
- Improvements to staging tracks when using the new on time mode.
- Added a "Reset All Trains" button to the Trains window.
- New tool that allows day to name mapping. Now your Manifest or switch list can show which day or date the train departs or arrives at a location.
- New feature, the "Add Locomotives" in the "Train Build Options" allows you to select where the locomotives will terminate.
- Helper improvement, you can now specify how many helper locomotives to assign to a train. Works like the "Add locomotives" feature, except HPT is disabled.
- Improvements to the print Manifest and no page breaks option.
- New larger preview windows when printing.
- The Yardmaster's window now allows you to add cars to the train at the yardmaster's location.
- Fixed the departure time from a route location in the CSV Manifest file.
- Fixed a bug where the RWL or RWE ship address wasn't used when spotted at a spur with a schedule that didn't have a ship address.
- Added the "Random" column to the tool "Show Schedules by Car Type and Load".
- Fixed a bug with the "Edit Car Loads" from the "Show Schedules by Car Type and Load" tools menu.
- Added 2.25" by 11" paper size.
- Made some improvements with line wrapping when printing Manifests and switch lists.
- Added the ability to set the additional line tab size for Manifest and Switch Lists. Useful when using the smaller page widths. See "More Print Options" in the help.
- New feature, manual build for a train. See the OperationsPro help for more information.
- Operations tests now use an isolated
NullProfile per test via @TempDir,
preventing intermittent RosterConfigManager failures on machines with real JMRI profile data.
- New feature, Manifest and switch lists can now display rolling stock last moved date & time.
- Changed switch lists to now list trains arrivals by time, including turns. Previously a turns work was listed consecutively.
- You can now bold a Manifest or switch list word or line. At the start of the text add <b> and </b> at the end of the text.
- Manifest and switch list can now show the rolling stocks last location.
- Users can now modify the missing car message format.
- Fixed some minor printing issues.
Panel Editor
- LogixNG Tables can now be added to a
Panel Editor. The table can be edited and that's is useful
if the user needs to change values in a table.
It's recommended to use Fixed size for
the LogixNG Table on the panel. To move the table, use
Set Location since it's not currently
possible to move the table on the panel using the mouse.
The width of the columns can be changed by dragging the
divider of the column headers. The new width will be
stored when the tables and panels file is stored.
The table is not stored when the tables and
panels file is stored.
It's optional to use a LogixNG Module to validate input
from the user. If a LogixNG Module is selected, it will
be called after the user has edited a cell, before the
new data is written to the cell. If the data is invalid,
the Module can abort the editing by calling the new
LogixNG action Validation Error in the
category Flow Control. It's possible
to add an error message to the Validation Error
to be shown to the user.
A LogixNG Table on a Panel Editor panel
can also have buttons and comboboxes. If the user clicks
on a button, the validation module can then do something.
And a combobox allows the user to select an item from a
list instead of typing it.
- Improved how clicks are handled so they'll
be less finicky.
- Change the scaling menu item from "multiply current scaling"
to "set new scaling percentage" form.
- The option Disable loco marker popup menus has been added
to the Marker menu. If it's selected, it's possible to
move around loco markers but it's not possible to open the popup menu for
loco markers. This is useful for dispatcher that wants to move
the loco markers but doesn't want to edit the loco markers.
- Fixed a bug that caused copy-paste not work in Panel
Editor on Windows.
PanelPro
- Added a "Tables Settings" item to the Tables menu to allow the adding of the Tables menu to the Main Menu.
Roster
- Added: physics parameters for physics based acceleration.
- Improved the locomotive image resolution in printed rosters.
- Increased the size of the roster preview so that it matches the paper size and improved text legibility.
- Update "Export Complete Roster" process so that
upon "Import Complete Roster" the images will
properly display without the need to rebuild the roster.
- The Import Complete Roster action now shows a progress bar.
- Fixed a problem preventing the JMRI permissions from
properly controlling access to added columns.
- If the configured roster location is on a network share or removable
device that is not available when JMRI starts, a dialog now gives you
the choice to Continue (start with an empty roster)
or Quit JMRI to reconnect the device before
restarting. Previously JMRI would silently start with an empty roster,
risking the real roster being overwritten on shutdown.
- The Continue/Quit dialog shown at startup when the configured roster
location is unavailable now treats dismissing the dialog (the close button)
as Quit, matching the behavior of the profile chooser. Previously the close
button fell through to Continue (issue #15148).
- Roster Speed Profiling has been updated to allow profiling from either
High to Low or Low to High and should now work for both NMRA and non NMRA speed steps.
- Roster file saves are now atomic: the roster index is written to a temporary file and then moved into place,
so an interrupted or failed write can no longer truncate or corrupt
roster.xml. (PR #15228)
- Fixed a crash that would occur if you imported an entire-roster backup
while the web server was active. Note that you should restart the
program after importing the entire-roster backup to make sure
all parts of the program are aware of the new entries.
Scripting
- The TransitActionsReport.py has been added. It is used to display
the transit section actions. When the script is run, a dialog displays the list of
transits. If none are selected, a complete report is created.
- Improve TransitActionsReport.py.
- Sort the transit selection list by display names.
- For sensors and signals in actions, use the display name instead of the system name.
- There's a new "WiThrottleMonitorTableSpeedRed.py" script that opens a window displaying
connected WiThrottle devices and locomotives (address, speed)
- Due to the refactoring the JMRI Swing Throttle code, some scripts may be broken, particularly :
- ThrottleFrame was moved to package jmri.jmrit.throttle.implementation (was jmri.jmrit.throttle previously)
- jmri.jmrit.throttle.ThrottleFrameManager.createThrottleFrame() now returns a jmri.jmrit.throttle.interfaces.ThrottleControllerUI
which is an interface implemented by (among other) jmri.jmrit.throttle.implementation.ThrottleFrame (same class name as previously but moved to a new package)
- if you need a small throttle, see ThrottleFrameManager.createSimpleThrottleFrame(RosterEntry) or ThrottleFrameManager.createSimpleThrottleFrame(DccLocoAddress)
- Update the debugging section of Getting Started with Scripting to include the
process to get the script line number from the Java exception report.
- Added a sample script showing how to send and receive NCE messages.
Signals
Signal Systems
- Added a color-discriminated alternate icon set to the basic-enhanced definition
Throttle
- Fixed a problem causing the Function Panel's buttons
to be improperly laid out.
- Throttle code was refactored in order to have a clean seperation between JInternalFrame implementation of JMRI throttles and inner JPanel, some interfaces were introduced, inner classes moved to subpackages
- Jython code was updated accordingly
- A new SimpleThrottleWindow was introduced, it's leveraging the existing throttle panels in order to diplay a much simpler window, it's accessible through the contextual menu of a selected roster entry (It may be relevant to use in other JMRI screens where a simple throttle GUI is required)
- The throttle list window allows drag'n drop from one kind of throttle window to another (hence moving from simple GUI to more complex one)
- UI acquired throttles are actually released on throttle last window close (bug fix)
- New throttle inner components are introduced, particularly a consist function panel allowing to independantly control functions of each locomotive in a consist
- The "Previous running throttle" in a throttle window toolbar wasn't doing anything, fixed
Virtual Sound Decoder
- Added LayoutEditor Traverser support for VSD navigation through a panel.
- The restriction on Turntable using only an even number of rays has been lifted.
Warrants
- Fixed intermittent CI failures in linked/looped warrant tests caused by race conditions and test isolation issues:
stopWarrant() now captures _idxCurrentOrder before
dispatching deAllocate asynchronously, so looped warrants correctly
report warrantComplete rather than warrantEnd.
- Fixed a missed-wakeup race in the Engineer block-sync wait: the block entry
check is now re-evaluated inside the
synchronized block, so a sensor
that fires between the outer check and wait() can no longer leave the
engineer stuck indefinitely.
- Warrant tests now wait for
PROPERTY_WARRANT_START before firing
block sensors for the next leg, ensuring sensors are not delivered before the
new leg's engineer has started.
IndicatorTrackPaths now skips paint callbacks on disposed editor panels.
- Six logix test classes now use an isolated
NullProfile per test
rather than the shared ./temp/ directory, preventing
RosterConfigManager failures on developer machines with real profile data.
- The changes above are done in PR #15151
Web Access
- panel.js: handle BlockContentsInputIcon
Web Server
- JSON Schema support has been upgraded from draft-04 to draft-2020-12,
providing improved validation capabilities and modern schema features
for JSON API responses. This includes updates to 95 JSON schema files
and the underlying NetworkNT JSON Schema Validator library (from 1.0.28 to 1.3.3).
- The web server folder app has been
removed. It might cause third party applications to
fail. If this happens to you, please contact us on
the JMRI users group.
- The JSON WebSocket power and throttle endpoints now support an optional
prefix field, allowing clients to specify which connection
the command should be sent to. WebSocket clients now also receive
state-change notifications only for the connection they subscribed to,
rather than all configured connections.
- The web Control Panel now draws shapes and other positionables in
their display "level" (z-order), matching the desktop Control
Panel Editor. Previously elements were sent in list order, so
overlapping items could be stacked incorrectly in the browser.
Where Used
- Improve how window is sized so you don't have to manually resize it so often.
WiThrottle Server
- Fixed a problem introduced in JMRI 5.15.2 where the
"All Entries" roster group would not appear in WiThrotte
and Engine Driver.
- Throttle list window is now displaying one column for each throttle window, each column showing the throttles for that window
- Throttle list window allows drag'n drop from one window to another
- A throttle preference allows to enable the "ALL" roster group in the roster group seletor of the address panel
- Some interfaces introduced between sing implementation anf throttle controlers
Miscellaneous
- (Developer) Updated build.xml so Ant builds work with Java 25
- (Developer) Updated SpotBugs checker to version 4.9.8. If you use Ant
to do SpotBugs checks locally, i.e. by running "ant spotbugs-check",
you will need to update your local version to 4.9.8. See our
SpotBugs page.
- (Developer) JMRI distributions, starting with this one, will now
be built with the Java 11.0.29 JDK.
- The jSerialComm library that JMRI uses has been updated from version
2.10.4 to version 2.11.4.
- Added a 'JmriFaceless.command' to the macOS distribution that
lets you run a faceless (no GUI) version of JMRI.
- Removed some code that was used for migration to JMRI 4.20
from earlier. If you're updating from before JMRI 4.20,
please go through JMRI 4.20 as described in the migration
instructions above.
- Testing - The JUnit4 RetryRule class has been removed as implementing
tests have been updated to JUnit5
- Some constants in the
RailCom class
have been converted to Enum values.
This primarily affects developers and people who've written scripts for
processing RailCom information directly.
In particular, the orientation values ORIENTA and ORIENTB have
been changed to enum values EAST and WEST respectively.
- Additional columns have been added to the RailCom table to
better show all the information that's gathered from some RailCom reports.
- The macOS launchers have been updated to allow more Java versions and to
have more useful error messages.
- When printing on MacOS, selecting a specific page range to print does not work
correctly. This is a known Java issue. The workaround is to print the entire
document to PDF, and then use a PDF reader to select the pages to print.
- There's a new option in the Load and Store tab of the Preferences
that allows you to exclude storing the contents of memories. Not the configuration
of the memories, just their contents. This might be useful if e.g.
you're storing your panel&configuration files in a storage system like
git that keeps track of changes, and you don't need to track changes in the
(transient) memory contents.
- Added new button icons at resources/icons/buttons.
- The class jmri.jmrix.ConnectionStatus
has been refactorized to use SystemConnectionMemo
instead of systemName and portName.
- Reading and writing of the user-interface.xml preferences file has been made more efficient. This shouldn't have
any effect on users.
- Fixed the bug causing the "Premature end of file" in user-interface.xml.