Release Notes for JMRI 5.15.8 release
Date: MM DD, 2026
From: Release Pumpkin
Subject: Test Release 5.15.8 of JMRI/DecoderPro is available for download.
This is a draft release note only; the download links do not yet work
Notes:
This is a test release. Please
post a note
if you encounter any new or old bugs!
And please back up your JMRI files before installing this, in case you want to go
back to an earlier version.
This is the next in a series of 5.15.* test releases.
It requires at least Java 11 to work.
We recommend that you use Java 21 if possible.
(See our page on downloading Java)
We expect this series to result in the next JMRI production release in July 2026.
(See the tentative release schedule)
JMRI is now only available under the
GNU General Public License. For more information, please
see our
copyright and licensing page.
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 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 at least
JMRI 5.0
before installing this test release.
See
instructions above.
- Since JMRI 4.99.1
This test release, and all subsequent ones, require the use of
Java 11 or later.
We recommend that you use Java 21.
Java 8 is explicitly not supported.
There's more information on this migration on the
JMRI Tech Road Map and
JVM Capabilities pages.
- 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:
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.
The
full list of included changes is available from our
GitHub code repository.
Hardware Support
- 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.
Acela CTI
Anyma DMX512
Bachrus Speedo
CBUS
C/MRI
DCC++ and DCC-EX
- 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.
- 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.
DCC4pc
Direct
ESU
Hornby
Internal
IPOCSMR
JMRI Simple Server/JMRI Client
KPF-Zeller
Lenz XPressNet
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.
Maple
Marklin CS2
MERG
MQTT
MRC
NCE
Oak Tree
- Fixed a bug which could cause the Event Table to
refresh too often, which annoyingly caused it to
lose your current selected row.
Powerline
RFID
Raspberry PI
Roco z21/Z21
Secsi
SPROG
SRCP
TAMS
TMCC
Uhlenbrock Intellibox
Zimo
ZTC
New / Updated decoder definitions
AE Model
Arnold
Bachmann
BLI
BNM Hobbies
CT Elektronik
DCC Concepts
Digikeijs (Digirails)
Digitrax
Doehler & Haas
ESU
Hattoms
Hornby
Kuehn
LaisDCC
Lenz
MD Electronics
MGP
MTB Model
- Added series MND25 Locomotive decoders
Mistral Train Models
MTH
MRC
NCE
Norsk Modelljernbane (NJM)
Piko decoders
Public Domain and DIY decoders
QSI
Rampino Elektronic
Rautenhaus
RR-CirKits
SoundTraxx
Tam Valley Depot
TAMS
TCS
Team Digital
Technologistic (train-O-matic)
Trix Modelleisenbahn
Uhlenbrock
Umelec
Viessmann
Wangrow
ZIMO
Miscellaneous
Control Panel Editor
- 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.
Circuit Builder
Palette
CTC Tool
DecoderPro
- Fixed a bug were DecoderPro was include the height of
non-visible columns in the row height calculation.
Dispatcher
Dispatcher System
Internationalization
Layout Editor
- 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.
- 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.
LccPro
Logix
LogixNG
- 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.
Meters and MeterFrames
OperationsPro
- 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.
Panel Editor
- 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.
Permissions
Preferences
Resources
Roster
- 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.
Routes
Scripting
- Update the debugging section of Getting Started with Scripting to include the
process to get the script line number from the Java exception report.
Signals
Signal Systems
Signal Heads
Signal Masts
Signal Groups
Cab Signals
Simple Signal Logic
USS CTC Logic
Switchboard Editor
Throttle
Timetable
Tracker
Turnouts, Lights, Sensors and other elements
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
Web Server
Where Used
WiThrottle Server
Virtual Sound Decoder
- The restriction on Turntable using only an even number of rays has been lifted.
Z21 Server
Miscellaneous
- 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.