JMRI: Acknowledgements
Author: Bob Jacobsen
Keywords: java model railroad JMRI decoderpro panelpro names people credits

## Acknowledgements: People who've contributed to JMRI

A number of people have contributed their effort to JMRI. They are listed below in alphabetical order and deserve our thanks.
See the JMRI copyright and licensing page for the terms under which they make their work available to others.

In addition, a large number of people have donated to the project. For more information, or to donate, please see our donations page.

A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

- Phil Abernathy, who updated the AnyRail export-import documentation.
- Sakae Akanuma provided a Japanese translation.
- Kerry Albrecht, who helped debug a problem loading panel files
- Nelson Allison, who provided scripts for Roco cranes
- Debbie Ames of Lenz USA, who has provided valuable information on the Lenz decoders and loaned equipment for testing
- Ronald Angel, who figured out how to run the demo on GNU/Linux
- Ian Anderson, who set up the documentation Wiki, which lets a lot of people easily contribute to building better documentation.
- Chris Atkins helped improve the instructions for using a separate jython install
- Ron W. Auld, whose llnmon program formed the basis for the LocoNet monitoring
- Cees Baarda, who expanded the DigiRails DR4018/DR4024 decoder definitions
- Harald Barth, who improved the SRCP implementation and the DCC++ implementation.
- Michal Basta, who contributed the Czech internationalization
- Patrick Beard, who allows us to distribute his javax.comm.MRJ package for the Macintosh
- Rick Beaber contributed definitions for MRC decoders
- Robin Becker, who has had a major role in the Soundtraxx decoder definitions, created our Windows icons, has debugged several difficult problems, created several Tam Valley decoder definitions, and is a primary author of EngineDriver.
- John Bell, who improved the NCE instructions
- Paul Bender, who wrote the XpressNet throttle code, maintains the XpressNet implementation, created the LI101 configuration tool, has made important contributions to the base code, added Lenz XPA support, wrote the Lenz feedback code, wrote the Lenz consisting support, provided the SLSF (Frisco) signals, provided the jmris server tree, and in general has made more contributions than can be counted.
- Taylor Berg, who worked on the DCC++ support.
- Daniel Bergqvist, primary author of the LogixNG tool who also does a lot of GitHub administration, particularly of PRs.
- Andrew Berridge, who debugged and fixed problems with the SPROG serial interface
- Jim Betz provided a version number for TCS decoders and a model definition for the Z2 decoder.
- Thomas Beutel, who helped with the early EasyDCC tests
- John Bicknell, who worked with Ian Birchenough to update ZTC decoder definitions
- Leo Bicknell, who updated the LocoNet monitor
- Lolke Bijlsma provided a decoder definition for the Shine Plus decoder series from Train-O-Rama.
- Pierre Billon, who translated decoder files to German and French and provided decoder definitions for Doehler and Haass.
- Ian Birchenough, who contributed (with Phil Grainger) six ZTC decoder definition files, plus the ZTC 4007, and the Lenz Standard decoder.
- Rodney Black, who has worked on refining the JMRI interfaces as part of creating his CATS system.
- Bob Blackwell, who moderates the jmriusers mailing list, accumulating the decoder ID info, and updated the DecoderPro manual
- Herve Blorec, who worked on the French translation
- Don Borden, who loaned a Soundtraxx decoder for testing the dual-decoder support
- Joseph T. Bore, who contributed the code upon which we built the scripting windows
- Sip Bosch, who contributed Zimo and ESU decoder definitions, helped test the physical data fields in the decoder definitions, added features to the decoder index, decoder selection tree, and speedometer, and created the connection to the Zimo MX1 DCC system
- Johan Bostrom, who committed the code to support the Bluetooth LocoBridge adapter.
- Dan Boudreau, who added support for the new NCE turnout command and read-back of turnout positions, updated the "send packet" tool to send NCE binary messages, added a tool to let NCE users send macro commands, updated the NCE-USB support, fixed a lot of details in the NCE support, and improved the support for NCE consists. He worked on improving the way we read and write our panel files. He created the operations section of the code, and did a huge amount of work improving the general quality of the code.
- George Bowler, who helped with testing support for Olimex RFID readers
- Dave Boydston of Serialio.com, who helped with the Windows connection to an MS100. Check out their great Java serial library!
- Peter Brandenburg, for many CT Elektronik decoder definitions, definitions for Haber & Koenig decoders, and for creating the SPROG web page
- Chris Bradshaw, who fixed some broken links, provided a decoder definition for the TCS Z2, and provided a definition for the ANE Model Loco-Cruiser LC201 decoder.
- Rodolphe Braud, who updated the French translation
- Jerry Britton, who acquired and maintained the domain registration for decoderpro.com, despite Matt Katzer's despicable behavior, and wrote a scripting example page
- Egbert Broerse, who worked on translations, added Switchboards, graphic state display in the tables, the Output Matrix signal mast and the Rio Grande 1965 signal definition, localized hardware connection tools and improved the signaling help, website content and the GUI for adding turnouts and signals.
- Dick Bronson, who created the great LocoBuffer-II and worked hard to make sure it worked well with JMRI. He also contributed sets of USS, PRR and B&O panel icons for PanelPro, worked on the PanelPro logo, created fantastic clinics on PanelPro, provided CTC sounds, and made numerous improvements to the Simple Signal Logic.
- Stephen Brooks, who did the initial testing of the Grapevine and Maple support
- Stuart Brorson, who provided the decoder definition for the SDD-001 from BNM Hobbies
- Andy Brown, who helped solve a problem with NX entry/exit pairs and fixed a problem with memory icons.
- Bill Brown, whose layout was used for the first NCE tests
- Graeme Brown, who helped debug the Mac OS X disk images and startup scripts for 10.4 and provided updates for NCE decoders
- Bob Bucklew, who as an early CTC-builder showed the way to better functionality, provided images, and keeps use moving toward better CTC models. See in particular his online panel tutorial.
- Geoff Bunza, who provided serial input and output scripts for Arduino.
- Mike Burgett, who provided information on prototype CTC layout and behavior.
- Bob Byck, who did extensive testing of test release 1.7.3
- Allen Byrne, who has systematically made improvements in the syntax and structure of the JMRI code
- Ken Cameron, who wrote the NCE fast clock support, added support for more than two systems to the preferences, added the Light Control, provided sample scripts, improved the titling of throttle windows, and created the InstallTest app.
- Paco Cañada, who provided decoder definitions for PpP decoders.
- Claudio Capaccio of LaisDCC provided definitions for their line of decoders
- Bill Carman, who located information on the MRC/Athearn F Unit and Challenger decoders
- Joan Carrancà, who provided the German DB signal set.
- Alain Carasso, who provided decoder definition for Arnold and Mistral Train decoders
- Peter Cesaro provided MRC decoder definitions
- Xavier Chazelle, who provided a definition for the N scale Fleischmann "Leig einheit" F830681 double unit van equipped with a Fleischmann specific dual decoder for opening or closing doors
- Barry Chinn, who created the PDF file of our manual
- Bill Chown, who did a lot of work on the MRC decoder definitions
- Chris Why, who fixed a tough bug in the speed-profiling code.
- Bob Clearfield, who helped fix some broken links
- Nigel Cliffe, who updated the CT Elektronik decoder definitions, provided sample scripts, provided new Zimo MX620 and ZTC 471 definitions, provided MERG decoder definitions, created a script tool for setting Zimo function options, designed the DecoderPro 3 GUI, and created a DCC Concepts decoder definition.
- John Clutterbuck helped with Fleischmann decoder definitions
- Normal Clymer, who contributed a TCS definition file
- Seth Cohen, who helped get serial sensors and NCE AIUs to work, and wrote the speedometer web page
- Glen Colbert, who contributed the MRC AD370 decoder definition
- Bob Coleman added the CTI Acela support and did a huge amount of work on the operations code tests.
- Jeff Collell, who added Light support for OpenLCB.
- Joe Comuzzi added new icon tests and added a definition for CNJ 1974 signals
- John Crellin contributed numerous new and improved decoder definitions for MRC decoders and the Kato FL11.
- Peter Cressman provided a major improvement to Logix, improved Sensor Groups, fixed some problems in Routes, and provided the Warrant system for scripted running
- Andrew Crosland create the SPROG implementation, SPROG programming tools, has generously contributed lots of time for SPROG users, and worked on the CAN and CBUS support
- Mark Dance provided train order signal icons in resources/icons/smallschematics/trainorder
- Mike Davison, who got the Linux serial connection working with Java 1.4, has helped with the EasyDCC code, helped debug the Ant compilation process, and has been working on decoder files
- Ray deBlieck, who let us test on his Empire Builder
- Joan de Castro who contributed the Catalan internationalization
- Andrew Deak who added the CPMEGA C/MRI option.
- Fred Decker who improved the Walthers Diesel Soundtraxx decoder.
- Svata Dedic who improved input validity checking.
- Lou DeHayes, who provided a definition for the MRC Sound Brilliance 1806 decoder and a fix for the DS54 definition.
- Eddie Delozier, who write the TCS M1 decoder file.
- Luca Dentella, who contributed the CmdMapper script.
- Kevin Dickerson, who figured out the ECoS protocol so JMRI could connect to one and wrote code for ECoS throttles and turnouts, added turnout monitoring to the ECoS support, fixed a problem what would sometimes improperly disable Logix and Conditionals, worked on improving the throttles, and fixed problems in the SPROG and multisensor icons.
- Robert Doss, who provided ID information for the MRC 330 decoder
- David Duchamp, who has added diagnostics to the C/MRI code, did much of the customization work for the fast clock, created the C/MRI light controls, added Light support, updated the Route functionality, created Logix and the Layout Editor, added "two outputs per turnout" support for C/MRI, fixed a bug with complex definition loading, and produced some great clinics.
- Dave Duchesneau, who provided a decoder definition for the MERG accessory decoder
- Jim Duncan, who did a lot of the initial Grapevine debugging
- Michael Dunn, who provided a decoder definition for the MRC 1645 decoder
- Mike Dunston, who provided several updates for the DCC++ code
- Frederik Elestedt, who improved the MQTT support.
- Joe Ellis provided the DecoderPro configuration files for the Lenz LE077XF decoder and has done a fantastic job on the manual
- Wayne Eric, who provided the MRC AD370 decoder definition
- Max Ettinger, who made JMRI work with the QSI Quantum Programmer on Windows and wrote great instructions.
- Jim Exler, who fixed a Digitrax CV definition.
- Dave Falkenburg created the original DecoderPro application (and found the perfect name for it!) He created our Mac Classic and Mac OS X icons and worked on the PanelPro logo. He also updated the NCE support to work with new NCE EPROMs that require binary commands, and made it work with TCS decoders. He's helped with networking and various Macintosh issues, including the XML IO system.
- Don Fiehmann provided MRC decoders for testing
- Bill Fitch, who created the Dispatcher System tools for working with Dispatcher.
- Marco Forcone, who sacrificed two turnouts motors to the cause of debugging XPressNet Turnout support
- Dan Foltz created the Manifest Creator and Switch List Creator for operations
- John Forsythe, who helped with the timing needs of TCS decoders
- Enzo Fortuna, who created the Italian translation
- Marc Fournier, who improved the TCS decoder definition, did the detail work to update the Soundtraxx manufacturer name, and fixed some Soundtraxx variable names.
- Paul Fraker, who wrote the documentation for the Throttles and provided MRC decoder definitions
- Joe Fugate and the other people of Model Railroad Hobbyist emagazine for putting the JMRI clinics from the NMRA 2008 Anaheim convention on the web.
- William C Gage provided an MRC decoder definition
- Steve Gigiel, who fixed the XML definition of the block contents icon, and helped fix the Transit implementation of comments.
- Brian Gilhuly, who helped debug a programmer problem in JMRI 3.11.1
- Simon Ginsburg has helped with advanced consisting, provided some Digitrax definition files, and translated much of DecoderPro into German
- GitHub, who hosts a large part of our development and distribution infrastructure.
- @gitophile, who found the fix for a broken link.
- Joseph Goldstone, who put together the javax.comm implementation for Mac OS X
- Martin Gostling, who provided CML and Digitrax decoder definitions
- Phil Grainger, who wrote articles about DecoderPro in the UK press, greatly helped with ZTC decoder definitions, provided the DH83FX definition, and many great suggestions
- Bill Gray suggested web page improvements
- Michael Greene, who corrected a bug in the SoundTraxx decoder definition; provided our jmri.info, decoderpro.info and packetpro.info domain names; provided definitions for the E-Z Command and Zimo MX61_N decoders; and updated the Digitrax definition for new types.
- Tom Gretton, who helped with documentation and the Groups.io migration
- Walter Griffin, who provided graphics for signals and CTC panels
- Costin Grigoras, who added an option to start the DCC++ TCP server at startup and updated the DCC++ implementation to do a background refresh of the function values.
- Jerry Grochow, who helped with the scripting documentation
- Mark Gurries, who provided loaner equipment and great ideas. He's currently working on decoder definitions for DecoderPro
- Victoria K. Hall led the legal action that held Matt Katzer responsible for his depredations against JMRI
- Rob Hamerling, who got the demo to run on OS/2, contributed his scripts and has been patiently testing
- Jim Hanna, who helped with instructions for NCE units
- Sonny Hansen, who did a lot of work on the Danish translation
- David Harris, who fixed some bugs in the Lenz decoder definitions
- Matthew Harris, who provided instructions for installing JMRI on EeePCs, updated the roster pane to work on small screens, improved handling of screen insets, provided a shutdown task, wrote our Windows installers, greatly improved the handling of scroll bars on panels, and added greatly improved audio capabilities.
- Phil Hartung, who provided some CTC graphics
- Tim Hatch, who added the support for TCH Technology devices
- Ian Havercroft, who provided the correct identification codes for ESU decoders
- David Heap, who has provided many updates for decoders, particularly the difficult QSI and ESU decoders, and improved how signal head aspects are supported.
- Rob Heikens, who created ESU decoder definitions and programmer pages
- Freek Heite, who located some important XpressNet info
- Austin Hendrix, who improved how the throttle handles speed steps andimproved the quality of the code and documentation.
- William Hipple, who registered the JMRI.org and DecoderPro.org domains for us
- Brett Hoffman, who provided support for zero-config ("Bonjour"-like) networking and WiFi access to throttles.
- Osvaldo Hojvat provided definitions for several LDH decoders
- Hornby Hobbys, who provided a full set of TTS manuals plus information regarding various CVs.
- Al Huberty, who organized our first users meeting at the NMRA Toronto convention
- AJ Ireland of Digitrax, who loaned equipment, answered questions and made valuable suggestions
- John Jabour, who created the excellent LocoBuffer and thereby made reliable LocoNet communications routine
- Brian Jackson who updated the Hornby TTS library
- Bob Jacobsen, who wrote some of the early code and does packaging and user support
- Martin Jahner, who fixed the constant checkboxen and built a replacement library for Mac OS X
- Jay Janzen, who debugged a RobotThrottle problem, and provided improvements for Dispatcher, including a fix to allow dispatcher to allocate to the end block.
- Lionel Jeanson, who added images to the roster, updated the throttle to add preferences for displaying them, cleaned up some code problems in the throttle, and created Jynstruments for improving the GUI
- Richard Johnson, who provided info on DCC Concepts decoders
- Robert Johnson, who provided info on the DZ123 decoder
- Colin Jones, who first recognized the LocoButter
- Randy Jones, who provided identification info for several Quantum decoders
- The Jython project, who provided a very powerful scripting engine for us
- Georg Kautzsch, who provided a decoder definition for the Uhlenbrock 67800 servo decoder.
- Klaus Killinger, who improved the sound support and has provided multiple sound projects
- Scott Kitts, who helped debug the new communications library for Mac OS X
- Michael Kneebone, who gave permission to allow us to use his SliderSnap class that corrects the behavior of JSliders, making them snap whilst sliding rather than afterwards.
- Tony Koester, who helped with signaling
- W.D. Kok created and maintained some Umelec decoder definitions and updated the Fleischman definitions
- James Koretsky, who contributed the Burlington Northern 1989 signal definition
- Github user Koryphon, real name unknown, who contributed to the MacOS X documentation.
- Matjaz Krajnc, who provided better code and icons for the web throttle
- Andrew Kroll, who improved the Operations documentation
- Ross Kudlick, who researched options switches on Digitrax command stations
- Ronald Kuhn, who improved our German translations and provided definitions for some Kuehn decoders
- Nick Kulp, who helped test much of the C/MRI and signaling logic, presented a nice clinic on how to start making panels, and contributed numerous icons
- Tighe Kuykendall improved documentation.
- Bjorn Kvisli, who provided Doehler & Haass decoder definitions.
- John Lang, who provided several signal definitions
- Al Lautenslager of CVP Products, who loaned some EasyDCC hardware and found answers to programming questions
- Jeff Law provided two Umelec decoder definitions
- Jim LeFevre, who did the testing on the TMCC implementation, including buying components so we could do a more complete job, and coded the function support. He's also put a lot of work into test and development of the C/MRI support.
- Alain Le Marchand, who provided a number of decoder definitions and updates
- Karl Johan Lisby, who made large improvements to the Uhlenbrock Intellibox support and contributed the Signal Controlled Warrant support
- Peter Lloyd-Jones, who contributed a script for playing a sound when a function key is pressed on a throttle and wrote instructions and an installer Ubuntu Linux
- Stephen Lowens, who updated the Digitrax sound decoder definitions
- Kelly Loyd, who contributed throttle code for EasyDCC
- Carsten S. Lundsten, who let us make icons from the artwork on his great signaling website http://www.lundsten.dk/us_signaling.
- Jason M'Sadoques, who created the Android phone throttle application and improved the WiThrottle support.
- Matthew Macdonald-Wallace arranged support for Linux on ARM V7 processors
- Jeffrey Machacek updated the WiThrottle server and updated LocoNet SlotMonitor.
- Greg Madsen improved the operations backup and restore code
- Jim Malone, who created a decoder file definition the Digitrax DN163K1a
- Peter MacKenzie, who added definitions for the Hattons MD4 and Gaugemaster Opti DCC25 decoders.
- Konrad Malkowski, who created and contributed the function label icon sets and domino control panel icon sets.
- Peter Mansvelder, who contributed Fleischmann decoder definitions
- Francesc Pinyol Margalef, who provided a fix for the Digikeijs DR4018 (accessory DCC decoder) definition and helped with the Z21XpressNet interface.
- Mark Marowicz, who provided the CT Elektronik SL 51 decoder definition
- Ken Mazer, who provided the GP40-2 Soundtraxx definition
- John McAleely, who contributed Hornby and Bachmann decoder definitions
- Greg McCartney, who provided a Norfolk and Western signal definition, the B&O 1980 signal definition, the Southern 1981 system, and the C&O 1980 system.
- Bob McCown, who helped with the migration of the jmriusers list to groups.io
- David McDowell of the North Raleigh Model Railroad Club created a clinic covering Block Occupancy, Transponding and Simple Signal Logic.
- David McGowan, who handled many aspects of JMRI legal defense against Matt Katzer
- Elmer McKay, who provided a nice help file on how to start signaling your layout.
- Randy McKenzie, who contributed some CTC panel background images
- Ron McKinnon, who fixed some problems with the lighting options in the SoundTraxx Tsunami Steam definitions
- John McMasters, who provided definitions for his Digitrax Sound projects
- Dave McMorran, who worked on the MQTT JSON coding
- Larry Meaney provided decoder ID for the Digitrax DN163K0b decoder
- Eckart Meyer, who updated the aspect controls in the DB HV 1969 signals.
- Philip Middlemiss provided a decoder definition Hornby R8215 decoder.
- Bob Milhaupt, <-- devel-bobm --> who fixed a problem with transponding messages in the LocoNet monitor, provided a lot of usability improvements in the LocoNet monitor, updated several LocoNet-related help pages, and provided significant help with the USSCTC tools.
- Dennis Miller, who greatly improved the CV printing, added the run-time help system and repackaged the window icons
- Jon Miller, who has been doing user support and decoder testing, plus contributing good ideas and loaning equipment for testing on sound decoders, Linux and small form factor computers.
- The good people at MindVision.com, who let us use their excellent Installer Vise to build our early Windows installers.
- Mike Moir, who provided a lot of information on how Grapevine works.
- Jeff Moonmaw, who provided the WPRR 1971 signal system definition.
- Michael Mosher, who helped identify the way Digitrax decoder models are organized, has done a lot of work to improve the decoder definitions for NCE, Soundtraxx and Atlas decoders, provided new definitions for TCS, MRC and (lots of!) QSI and Zimo decoders; a real hero of decoder definition distinction
- Gert Muller fixed some issues with international characters, improved the layout of the on-screen throttle when running Linux, added improved alignment options to the PanelEditor, improved adding text labels and worked on the MQTT coding.
- Robert Myers provided instructions for installing JMRI on an OLPC XO laptop
- Bill Nanney, who tenaciously worked to help find a bug where certain decoders wouldn't read and write all sheets
- Seth Neumann, who provided information on Wangrow decoders
- Mark Noble, who found some broken links
- John O'Duffy, who improved low-speed profiling
- Glen Oberhauser, who added LocoNet throttles
- David Phillip Oster provided key information and a useful tool to help get USB working on Mac OS X
- Pål <-paoSoft --> who worked on the LocoNet refresh algorithm
- Howard G. Penny provided info on the NCE D14SR decoder, then went on to become an active developer, including providing the code for indexed CVs (ala QSI), better support of text and clocks on panels, providing a "factory reset" feature for decoders, and fixing multiple hard bugs
- Phill Perry, who contributed a decoder definition for the New York Byano Limited locomotive
- Bruce Petrarca, who has started offering CDs so nobody else has to burn them and provided decoder information for the Soundtraxx Diesel Tsunami
- Bob Phillips provided an MRC decoder definition
- Alger Plke, who provided programmer fixes for the Zimo MX1 and MXULF
- Ronnie Pinkerton, who worked on a throttle update
- Martin Pischky improved the LocoNet firmware downloader and fixed some bugs.
- Rob Plevier, who provided instructions for running JMRI on OpenSUSE GNU/Linux
- John Plocher, who make good suggestions on XML DTD items, created the infrastructure for this web site, lead the construction of the demo layout for the JavaOne show, worked on GUI updates, and built a replacement RXTX library for Mac OS X 10.4.
- Herb Poppe, who diagnosed a problem in some Digitrax decoder definitions
- Michael Povel, who provided definitions for TAMS decoders
- Ian Price who contributed the LocoTracker.py script
- Vladimír Preclík who contributed fixes to the panel JavaScript code
- Oscar A. Pruitt, who provided the implementation to support RFID readers using the EM-18 protocol
- Gerry Pruss, who provided information on connecting to the QSI Programmer
- Balazs Racz, <-- balazsracz --> who fixed a bug in startup and improved our tech documentation, updated the OpenLCB support to their version 0.7, and added support for bean properties to the Tables
- Steve Rawlinson, who fixed a bug in Layout Blocks and generously provided the previous Jenkins CI server.
- Simon Reader, who improved the throttle, added a check for completed status to Routes, and added the "invert" option to LocoNet Turnouts.
- Mark Riddoch, who provided the Reporter implementation for CBus to enable the use of CBus attached RFID readers.
- Bill Robinson of Team Digital, who provided a schematic of their MS100-equivalent level shifter, contributed the LnSendTool.py script and decoder definitions for Team Digital products, helped fix a problem with overrunning LocoNet command stations, and provided example web pages for layout control via the mini-webserver.
- Mark Rogerson, who provided the RXTX (Java communications library) for Mac OS X machines with Intel processors
- Wim Ros, who provide help with the direct connection to the Intellibox
- Heiko Rosemann, who created the Slackware repository version of JMRI and worked on WiThrottle protocol issues.
- Klaus Ruebsam, who is hosting German and English JMRI discussion groups on his http://www.dcc-portal.net/ website.
- Mathias Rufer created the first pre-release version of the ESU LokPilot Standard V1.0 decoder definition.
- Peter Rushworth helped to add a reporter icon to the layout editor.
- John Sacrey wrote instructions for getting Java to work on 64-bit Windows
- Joe Salemi, who contributed the Atlas 345 decoder definition and updated the TCS Tx definition.
- Bruno Sanches, who fixed a bug in the DCC++ throttle implementation.
- Dave Sand, who's worked on Layout Editor, Logix, Entry/Exit signaling and other things.
- Richard Sauerbrun provided a definition for the DN163K4B decoder.
- Jeff Schmaltz, who contributed decoder definitions for the Massoth eMotion and LGB decoders, the Zimo MX65, and the ESU LokPilot and LokPilotBasic decoders.
- Mark Schutzer, who helped debug some significant NCE improvements and contributed the Lenz Gold decoder definition
- Thurgau Schweiz, who provided some Umelec decoder definitions.
- Knut Schwichtenberg, who contributed the FREDI definition files
- Jim Scorse, who gave generously of his time to answer questions about NCE details and provided debug hardware
- Brett Scott contributed the scripts for programming DCC Specialties products
- John Sebastian provided a decoder definition for the MRC Sound Brilliance 1957.
- Josef Selinger, who updated the Czech translation
- Fred Severson, who gave permission to use QSI manuals to make decoder definitions
- Jack Shall, who cleaned up the XML files, contributed decoder definitions, added a huge number of tooltips to DecoderPro, and reorganized the SoundTraxx Tsunami decoder definitions.
- Bruce Shanks, who offered corrections for the DecoderPro manual, investigated how to display the throttle ID in the LocoNet Slot Monitor, updated the Comprehensive programmer format to improve speed, and co-wrote the 2009 DecoderPro manual.
- Alex Shepherd, who helped move development to JBuilder, and created the client/server implementation for LocoNet. He's also improved the LocoNet monitor formatting and added support for a new type of accessory decoder
- Dustin Shoup, who figured out how to preserve order in XML files
- Petr Šídlo, who provided a large update to the Czech translations of JMRI
- Pekka Siiskonen, who suggested we add error numbers to error messages to make it easier to discuss which specific error is happening
- Al Silverstein, who helped figure out the format of some LocoNet messages and provided decoder information on several models
- Ed Sisk, who loaned a DCS51 for testing
- Don Smith, who ran down some NCE decoder information
- Ted Smith, who corrected some errors in sample scripts and the basic two-searchlight definition
- John Socha-Leialoha, who improved the WiThrottle protocol documentation
- Alfredo Sola provides the Spanish translation
- The good people at SourceForge who provided the original site hosting, download servers and computing resources for JMRI development
- Ron Sommer, who provided the PanelPro icon for Windows
- Richard Stamm, who helped debug a programmer problem in JMRI 3.11.1
- Tom Starbuck, who updated and organized the model numbers in the TCS BEMF decoder definitions.
- John Stather fixed some issues with the DCC Concepts locomotive decoder definition.
- Dima Stepanchuk, who provided a fix for the Packet Analyzer
- John Stewart, who provided a decoder definition for the Lenz Plus 2010 decoder.
- Francois Taburet, who provided the French translation for DecoderPro
- The good people at Tagadab.com who provided site hosting, and continuous integration resources for JMRI development for several years.
- Suzie Tall, who provided several North American and international signal definitions, including definitions for UP, Amtrak, and Great Western railroad, along with sets for the BeNeLux countries.
- Clint Taylor added code to allow function buttons to work within the LocoNet slot manager.
- Giorgio Terdina, who provided the code for the Roco multiMaus and for JMRI to connect to his XnTcp adapter, wrote the XTrkCadReader tool, and provided screen icons for German signals.
- Jim Thompson provided a sample script for handling messages from PM42 power controllers
- Benny Tjäder, who provided the MQTT Last Will support and a Swedish signal system.
- Kenneth Tjøstheim, who provided the Norway-2001 signal system
- Walter Thompson, who provided the ID information for the Lionel Challenger decoder and DS54 accessory decoder, updated lots of decoder definitions, improved many help pages, and is an active jmriusers moderator.
- Steve Todd, primary author of EngineDriver throttle for Android, adds scripts, helps with web server, particularly client-side panels and updates Dispatcher
- Travis-CI.org, who provide a large part of our Continuous Integration infrastructure.
- Dale Tripp, who co-wrote the 2009 version of the DecoderPro manual and provided the decoder definition for the Kato FL12
- Peter Ulvestad, who created some nice clinic presentations, created the page on XML editors, has done a large amount of work on decoder definitions, and helped solve a problem with the NX entry/exit implementation.
- Mark Underwood, who provided a fix for a problem with looping sounds and added support for the DCC++ hardware.
- Keith Usher, who provided a medium icon set
- Darryl Van Nort, who provided a definition for an MRC decoder
- Tjeerd Verhage, who provided the logo for our SourceForge.net page
- Bryan Vianco provided two MRC decoder definitions
- Didrik Voss, who provided the configuration information, including the default values, for the Hornby R8215 decoder
- Marshall Wales investigated how to display the throttle ID in the LocoNet Slot Monitor
- Jack Walton, who created the Lenz LE080 decoder definition
- George Warner, who changed all the TextFields to editable comboboxes (with drop-down menus); added a 2nd turnout circle for slips and added left, right & bottom options for the toolbar (and re-laid out same) in the Layout Editor. Added support for DMX512 lighting. Also wrote all the slip code for the web server.
- Mark Waters, who provided numerous Zimo decoder definitions, new Zimo MX620 definitions and install instructions for Linux Mint.
- Howard Watkins, who helped test the CBUS support and provide a sample script for Layout Editor
- Todd Wegter, who improved Bachrus speed matching.
- Jim Wells, who created our logos and the great program icons
- Donn Welton, who provided info on configuring a PowerBook for DecoderPro
- Ken Weygandt, who provided the default values for the SoundTraxx Tsunami decoder definition and 45-degree icons for panels, and helped fix a problem with over-running LocoNet command stations.
- Denny Whitaker, who wrote a great description of how to program Hare and Wabbit controllers using JMRI.
- Rich White II, who provided the images for our small Nixie tube clock
- Simon White, who added support for FindBugs and EMMA to our build tools.
- Stephen Williams, who improved the LocoNet slot monitor, made multiple small improvements to LocoNet internals, especially including the LocoNet monitor, fixed a nasty problem with looping LocoNet throttles, added a command station option to the TCP connection, and improved the LocoNet simulator file processing.
- Jos Wils updated the ESU decoder definitions, and extended the Comprehensive programmer format for really-high-functionality decoders.
- Jim Wolters, who updated the MRC Sound Brilliance 1812 decoder definition.
- Randall Wood, who updated the fast clock support, improved the XMLIO support with some fixed memory variables, migrated us to Git and GitHub, and built our continuous integration & test support.
- Mike Yawn, who provided the instructions for building under Eclipse
- Steve Young, who helped with CBUS documentation and the Groups.io migration
- Luis Zamora, who done a lot of work on the Catalan translation
- Mark Ziebell, who worked on signal systems.
- david zuhn, who provided instructions for installing the comm libraries on Linux, wrote startup scripts and configured Ant for compiling with warnings
- Christopher Zurek, who improved the LokSound V3.5 decoder definition and provided several MRC definitions.

## Visualizations of JMRI Development Activity

The JMRI CodeFlower provides a dynamic view of the structure of whole GitHub source code repository. It shows the relative size of the code in each file and the structure in which the files are stored.

You can see graphs of the JMRI developer activity on the GitHub project page for the main code repository and the website.

More detailed metrics are available on the JMRI OpenHub pages on contributors and commits.

Dennis Miller created a Code Swarm of JMRI development that represents activity from inception to January 2009. A Code Swarm is a fascinating and dynamic visual representation of change as developers come and go and make changes to the files that make up a project. More information is available on the Code Swarm page.