1. Railroader
  2. News

Railroader News

November 2025 Development Update

[p]Hello Railroaders![/p][p][/p][p]Can you believe it’s been almost two years since Railroader was released in Early Access? Some of you have been with us since before it was called Railroader! Many of you have joined us along the way, and some of you have only just become familiar with the game. Whether you’re an old head or a greenhorn, we want to sincerely thank you for your support. We’ve been fortunate to hear from many of you over the last couple years how much Railroader has meant to you. Our small dev team feels a lot of responsibility as stewards of the game.[/p]
[p][/p]
[p]In our last development update we covered some of the features we’ve been working on to support the Maintenance of Way (MoW) update, including enhanced car loads, expanded industry at Hewitt, and the interchange at Almond.[/p]
[p][/p]
[p]What have we been up to since then, you ask? We’ve been thinking a lot about modding![/p]
[p]
[/p]
[h3]Building Toward Official Modding Support[/h3][p][/p][p]Modding has been a remarkable, unofficial part of Railroader since not long after it was released. We’ve been amazed at what modders have created, and continue to create for the game. While official modding support is on our roadmap, it’s something we have thought of as one of the last big features before Railroader leaves Early Access, simply because we don’t want to break mods, and we don’t want modding support to prevent us from making necessary changes to the base game. In working on the car loads feature, however, it became clear that to build it right we would need to build toward official modding support.[/p][p][/p][p]Before we get into details, it’s important to acknowledge that modding is very broad topic. Mods run the gamut: they change parts of cars, introduce new cars and engines, add or change track or industries, scenery, augment the UI. Some even aim to create whole new maps.[/p][p][/p][p]As much as we want to provide support and tooling for all of these facets of modding, the reality is that that’s not possible at this point with our limited resources. Map modding in particular is one that we’d love to support but due to the richness of the game and complex features like signals/CTC, map progression, etc., let alone the editing UI, it’s not practical to support map modding without some pretty significant limitations, which we don’t see as a great solution.[/p][p][/p][p]Our plan for this update in terms of modding support is that it will focus on two areas of modding, but we plan to continue to consider how we can expand our support for modding in the future.[/p]
[p][/p][p]
[/p]
[h3]1. Mod Loading and Dependency Management[/h3][p][/p][p]Railroader has unofficially supported adding new equipment to the game through asset packs since day one – it’s part of our internal development workflow – but there have been some critical aspects missing, namely dependency management and support for encoding mods in save games and handling them in multiplayer.[/p][p][/p][p]To improve this, we have been working on revamping asset packs with the following: (technical details incoming!)[/p][p][/p]
  • [p]Asset packs now have strong identifiers in the format: domain/identifier. All built-in asset packs use the domain rr.[/p]
  • [p]Asset packs now have versions.[/p]
  • [p]Asset packs can define versioned dependencies and will be loaded in dependency order.[/p]
  • [p]Definitions (equipment, scenery, etc.) in a pack must have unique identifiers within the domain. If the game defines rr/ls-280-c46 (the C-46 Consolidation), you could define your-name/ls-280-c46. This simplifies creating variants of existing equipment and helps avoid conflicts.[/p]
  • [p]Asset packs with a matching name no longer override other[/p]
  • [p]Including mod information in save games.[/p]
[p][/p][p]
[/p][h3]2. Relay[/h3][p][/p][p]This is a big one: Railroader now has its own scripting language! It’s called Relay.[/p][p][/p][p]Relay scripts can be used to:[/p]
[p][/p]
  • [p]Manipulate definition data during the loading process, similar to Factorio’s modding system. For example, a [c]Data.rl[/c] script in an asset pack can change values on any equipment in the game, add or remove components, or create whole new variants of existing equipment. All without having to duplicate the asset files.[/p]
  • [p]Add scripts to control components on equipment in response to property changes. Example: show or hide a ‘stakes’ model on a flat car based on whether it is appropriate for the car’s current load.[/p]
  • [p]Extend the UI: add controls to existing windows, create new windows, or create console slash commands. [c]Main.rl[/c] scripts are used for this.[/p]
[p][/p][p]Some of you are probably wondering: why create our own language? In short, creating our own language enables us to better control the performance impact of the in-game scripting system, offer a modern syntax, and maintain a safe, sandboxed scripting environment.[/p][p][/p][p]We think these two areas of modding support offer some pretty exciting possibilities.[/p][p][/p][p]
[/p]
[h3]Relay Modding Examples[/h3]
[p][/p]
[p]Here are a few examples of Relay in action. Remember that this is still in development – we welcome your feedback![/p][p][/p]
[p]You could create a mod to change the prices of cars, or adjust their capacity using a [c]Data.rl[/c] file:[/p]
[p][/p]
[p]
[/p]
[p][c]func onDefine(data) {[/c][/p][p][c]    // Change the price on the lightweight steel passenger car:[/c][/p][p][c]    data.modify("rr/pb-osgbrad-lightweight-steel-1915", (obj) => {[/c][/p][p][c] obj\["definition"]\["basePrice"] = 900[/c][/p][p][c]    })[/c][/p][p][/p][p][c] // Create a "high capacity" variant:[/c][/p][p][c]    data.modifyAs("rr/pb-osgbrad-lightweight-steel-1915",[/c][/p][p][c] "imtzo/pb-osgbrad-lightweight-steel-1915-highcap",[/c][/p][p][c] (obj) => {[/c][/p][p][c] var metadata = obj\["metadata"][/c][/p][p][c] var definition = obj\["definition"][/c][/p][p][c] metadata\["description"] = "High Capacity Steel Coach"[/c][/p][p][c] var slot0 = definition\["loadSlots"]\[0][/c][/p][p][c] slot0\["maximumCapacity"] += 20[/c][/p][p][c] definition\["basePrice"] += 2000[/c][/p][p][c] })[/c][/p][p][c]}[/c][/p][p][/p][p]
[/p][p]You could create a model with customizable parts. Suppose I had created a new engine with a toggle-able superheater detail model.[/p][p][/p][p]In a script component on the engine:[/p][p][/p][p]
[/p][p][c]var observer = null[/c][/p][p][/p][p][c]func onModelLoad(car) {[/c][/p][p][c]    var superheater = car.components\["Superheater Detail Model"][/c][/p][p][c]    [/c][/p][p][c]    // Observe the property and update component enabled states:[/c][/p][p][c]    observer = car.properties.observe("showSuperheater", true, (value) => {[/c][/p][p][c] superheater.enabled = value[/c][/p][p][c]    })[/c][/p][p][c]}[/c][/p][p][/p][p][c]func onModelUnload(car) {[/c][/p][p][c]    observer?.dispose()[/c][/p][p][c]    observer = null[/c][/p][p][c]}[/c][/p][p][/p]
[p]
[/p][p]And in [c]Main.rl[/c] in the asset pack:[/p][p]
[/p][p][/p]
[p][c]from railroader import ui[/c][/p][p][/p][p][c]func onModLoad(ctx) {[/c][/p][p][c] // Add a toggle to the customize UI:[/c][/p][p][c]    ui.extend("carInspector.equipment.customize")[/c][/p][p][c] .matching({"identifier": "imtzo/my-engine"})[/c][/p][p][c] .with((builder) => {[/c][/p][p][c] builder.fieldToggle("Superheater",[/c][/p][p][c] () => { return car.properties\["showSuperheater"] },[/c][/p][p][c] (value) => { car.properties\["showSuperheater"] = value }[/c][/p][p][c] })[/c][/p][p][c]}[/c][/p][p]
[/p][p]These are only a couple examples. Relay can also be used to create windows and add slash-commands to the console. A calculator summoned with [c]/calc[/c]?[/p][p][/p][p][/p][p][/p][p]Perhaps you can see why this has taken some time to build. We’re very excited to see what you build with it, and see it as being useful not only for modders, but also some of the more advanced railroads – you know who you are – who can use some basic scripting to help automate parts of your railroad![/p][p][/p][p]We’re still hard at work on this, although we hope to get to a point where we can release an experimental branch soon. While this experimental might be a little rough around the edges, we think it is important to get this work out there and get feedback to shape it before it is released on the main branch.[/p][p][/p][p]Of course this release has a load of other enhancements, but those will need to wait for another post. Until then, thank you as always for your patience and support![/p][p][/p][p]
[/p][p]Previous update posts for this update cycle:[/p][p][dynamiclink][/dynamiclink][/p][p][dynamiclink][/dynamiclink][/p]

New Bundle: Running the Railroad - Railroader & Rail Route

[p]Railroader has coupled up to Rail Route, the railroad design and dispatching strategy game, for a railroading bundle![/p]
[p]Take command behind the signal board in Rail Route, where you’ll design, expand, and automate your own rail network - then jump into the cab in Railroader to haul freight, run passenger services, and feel the power of classic American locomotives in the golden age of rail.[/p]

https://store.steampowered.com/bundle/60052/Running_the_Railroad/

[p]Move trains across the grade with this incredible double-header today![/p]

Railroader 2025.1.0b Hotfix

This release contains no game changes from 2025.1.0a, but we have updated to Unity 2022.3.62f2 in response to a Unity security vulnerability. According to Unity there is no evidence of any exploitation of the vulnerability nor has there been any impact on users or customers.

Meanwhile, work continues on the MoW update!

August 2025 Development Update

[p]Hello Railroaders![/p][p]Progress continues on our Maintenance of Way (MoW) update! In our last update we shared a number of items, including that we are reworking track construction milestones to work with the MoW system: MoW trains will build the track and need to be supplied with ties, track, and ballast. Lots and lots of ballast.[/p][p]Today we'll look at what we've been up to as we continue to work toward releasing MoW on an experimental branch![/p][p][/p][h2]Dynamic Load Models[/h2][p]Load models are an area that we've been needing to improve upon, and MoW has helped bring that to the forefront during our testing. One of the challenges with load models has been that our system required each car to be configured for each type of load model, which meant that if we were to add tie models to our gondolas, we'd need to do that for each gondola. New track load model? Update the gondolas. Adding a ties load model? Update the gondolas. This quickly becomes rather tedious, particularly if we need to make changes later, and it's also not modding-friendly in that it requires modifying the cars to add new load models, creating conflicts. We needed a better system.[/p][p]The solution we've built enables us to define a "load volume" within rolling stock. The load volume describes the available space for the load within that car. Railroader can then find an appropriate load model at runtime and put it in place. This makes it possible to provide varying models for the same loads, without needing to configure each car for each possible load model.[/p][p]Here are some of the MoW load models:[/p][p][/p][p]Not all loads can simply sit in a gondola though. Break bulk loads like dimensional lumber are often sent by flat car, with stakes securing the load. If the load isn't specific to the car, how can we include stakes? After all, the stakes are specific to the car, placed in the pockets along the side.[/p][p]To address this we've created a way to toggle detail models on cars depending on certain properties of the car, including whether the load model calls for stakes.[/p][p] [/p][p][/p][p]There are certainly much simpler ways to build these things that would have been faster to build, but we think they're worth the investment now to make Railroader more flexible in the future. [/p][p]On the topic of loads – now that we have better volume information, Railroader now takes density into consideration when determining how many pounds of a load are in a car. No more 50T boxcars of dimensional lumber – it isn't desert ironwood![/p][p][/p][h2]More MoW Equipment[/h2][p]We've created a new MoW car for your forthcoming maintenance needs. Like all good MoW equipment it's repurposed – this one from a box car. We really like how it turned out.[/p][p][/p][p][/p][p][/p][p]Gondolas are now purchasable, and a very basic MoW train is part of new Company mode games.[/p][p][/p][p]Speaking of new equipment, we're adding an ore car for the Alarka Copper Co. mines![/p][p][/p][p][/p][p][/p][h2]More Data[/h2][p]Perhaps you've noticed above: we've revamped our rolling stock to include more prototypical car data, as well as the reporting mark and number![/p][p][/p][p][/p][p][/p][h2]More Ballast[/h2][p]In our last post we mentioned what a ridiculous number of cars of ballast it would take to build 13 miles of railroad (1,429, in real life). We heard from a number of you who were very much up for the challenge, so we've added in a setting for construction realism. We're also including a lower realism setting.[/p][p][/p][p]We're aiming to find a good location for an on-line ballast producer, or perhaps other MoW loads. This would make for a fun alternative to running all of those cars through the interchange.

[/p][p][/p][p]On a related note, we've made a key enhancement to how construction works. Previously, the MoW "crew" would use the cars as storage, working from it as they go. Now, they gradually unload the car while construction continues. This frees up your cars more quickly to get them filled back up again.[/p][p][/p][h2]Toward Experimental[/h2][p]This has been a challenging update cycle – a lot is changing, and we are still working on significant adjustments. Nevertheless, we are confident that these changes are necessary and important for the future of Railroader.[/p][p]Thank you for reading! We know that many of you are eager to take the new MoW features for a spin. We're working hard on it and plan to put it up on an experimental branch as soon as it's ready! [/p][p]
[/p]

June 2025 Development Update

[p]Hello Railroaders![/p][p]Today we are happy to share our progress on the Maintenance of Way (MoW) update we've been hard at work on. We knew this was going to be a big update, and as we have playtested and iterated on MoW that has certainly proven true. It's also driven us to revisit some aspects of Railroader's milestone progression and the map itself.[/p][p]We think it's important to note that none of this has happened in a vacuum, so to speak. Since we announced that we were working on MoW we've received tons of great ideas and feedback. Thank you! This is one of those features that makes it challenging to balance wide open vision with what we can make real, and will mesh with the rest of the game.[/p][p]In our last update on MoW we shared that you'll use ballast, ties, and rail to maintain your tracks. One thing we didn't share at that time was our thinking on how the core MoW mechanic of the work train would be a very cool way to do construction milestones. Instead of spotting a few batches of cars next to the missing track, what if you had to purchase and supply loads to the work train as it made its way down the line? This is the direction we're taking for the MoW update, and we're very excited about the richness and challenge it adds to Railroader.[/p][p]
[/p][p][/p][h3]The Price of Ballast: A Historical Reference Point[/h3][p]What loads are needed to rebuild the Ela bridge? Or build from Bryson Bridge to Alarka Junction? We dug into our sources, textbooks and historical records including the Tennessee Valley Authority and Southern Railway's own historical numbers for rebuilding the line to come up with the "at the time" resources. Based on those numbers we estimated the loads to build the 13 miles of railroad between Bryson and Fontana Lake and came up with:[/p]
  • [p]22 cars of rails[/p]
  • [p]139 cars of ties[/p]
  • [p]1,429 cars of ballast[/p]
  • [p]Total load cost: $335,039[/p]
[p]Well. As exciting as it was to imagine moving 1,590 cars to and from the interchange, we decided that for the vast majority of players this was not anywhere in the realm of realistic or practical. By scaling those numbers we've arrived at car counts and costs that are both practical and substantial:[/p]
  • [p]10 cars of rails[/p]
  • [p]20 cars of ties[/p]
  • [p]200 cars of ballast[/p]
  • [p]Total load cost: $15,080[/p]
[p](Note that for simplicity I've omitted costs and loads to construct the bridges in these example milestones.)[/p][p]Keep in mind that we are still very much in the development/playtesting phase and these numbers are almost guaranteed to change before we release the MoW update, but we wanted to give you an idea of what we're thinking about. What do you think? Let us know in the comments.[/p][p][/p][h3]Rethinking Milestones and The Map[/h3][p]Rethinking the milestones in terms of construction materials has also caused us to rethink the boundaries of those milestones, and even the reward for accomplishing a milestone, which is generally satisfaction of reaching a goal and access to more customers. We understand that for many players the western end of the map, with its lower customer density and heavy grades, may be too much to tackle. To address this we are making the following adjustments:[/p]
  • [p]Changing the Bryson Bridge to Fontana milestone to run only as far as Alarka Junction, and adding a second milestone from Alarka Junction (past the spur to Robinson Gap) to Almond. The Nantahala milestone will begin after Almond.[/p]
  • [p]Dramatically reworking Nantahala Talc & Limestone at Hewitt to provide more traffic.[/p]
  • [p]Adding an interchange and small freight house at Almond. (This is a big one. We have wanted to do something like this for a long time now.)[/p]
  • [p]Others?[/p]
[p]Our goal in making these changes is to provide more options for your railroad, as well as to make expansion more rewarding.[/p][p][/p][p]Below: expanded Nantahala Talc & Limestone with placeholder scenery buildings.
[/p][p][/p][p][/p][h3]Speed Restriction Signage and Other Challenges[/h3][p]We've also been busy with some of the more challenging details of MoW. For example, dynamically displaying signs to reflect speed restrictions due to poor track conditions.[/p][p][/p][p]
[/p][p]In some circumstances displaying signs that make sense and don't overwhelm the player poses a real challenge![/p][p][/p][p][/p][p]In addition we are planning on looking at supporting MoW load storage, reevaluating starting equipment, and so forth. Like we said: it's a big feature, but we think the wait will be worth it![/p][p][/p][h3]Scenery and Equipment Models... and the Turntable[/h3][p]As with previous updates we've been continuing to work on equipment model updates, as well as new scenery structures, including a revamped turntable bridge.[/p][p]Speaking of the turntable: we have added a control window to allow "remote control", as well as a new overlay interface which allows you to drag the bridge to the desired position, which it will automatically turn to. Hat tip to the Century of Steam team for inspiring us to improve the turntable interaction![/p][p][/p][p]Drag and drop turntable rotation:[/p][p][/p][p][/p][p]Using the window to manually control the turntable, shown at 3X speed:[/p][p][/p][p][/p][h3]New Map Terrain Data Format[/h3][p]Although we don't officially support modding, we wanted to provide a heads-up that this update will change the map terrain data format to one that uses the RIFF format and improves terrain data load times. We expect this to simplify creating/manipulating the terrain data in mods, as we know some of you are keen to do. We'll share more details about the format once this update is available on an experimental branch.[/p][p][/p][h3]Wrap-Up[/h3][p]That's all we have to share for now. Naturally we've got a number of smaller enhancements and bug fixes queued up, and perhaps a surprise or two. We don't yet know when this update will be available on an experimental branch, but rest assured that we want you to have it as soon as possible.[/p][p]Thank you for reading and for supporting Railroader!
[/p]