Authority: observed code paths and tests. Where a card face, a prototype document and executable behaviour differ, this document reports executable behaviour and marks unimplemented material. Per-card numbers are not repeated here — the Home deck and Mainline deck references carry tables generated from src/engine/content.ts and is the table of record.
New to the game? Start with the Quickstart.
Station Master is a railroad-operations game set in the timetable-and-train-order era. Each player operates an Office Area on a shared east–west Division. The local work is building rail, switching cars, moving passengers and freight through facilities, and keeping the Office clear. The shared work is dispatching scheduled trains across the Division. The player holding the Superintendent’s Fedora decides whether to clear a following train into an occupied Subdivision; an unsafe decision can cause a collision.
Revenue is the score. Passenger boarding and detraining, freight loading and unloading, completed runs, collisions, and victory conditions are all resolved by the rules configured when the game is dealt.
This book is divided as follows:
The companion references are the Quickstart for a new player, Mainline deck, Home deck, components, and the generated per-card table Home deck and Mainline deck.
| Term | Meaning | ||
|---|---|---|---|
| A/D track | An Office arrival/departure capacity. A Whistle Post has 1; Depot, Station, and Terminal have 2, 3, and 4. | ||
| Card location | A square in an Office Area grid. A train may end a switching Move only on Operational Rail. | ||
| Classification Yard | The holding yard for used rolling stock. It refills the Division Yard only when that yard is completely empty. | ||
| Control Point | A Depot, Station, or Terminal. It breaks the shared Mainline into Subdivisions. A Whistle Post is not one. | ||
| Crew Tray | An engine plus up to four coupled rolling-stock cars. The engine itself does not count as a car. | ||
| Department pile | One of three shared face-up card stacks. Draw and discard affect only the top card. | ||
| Division Point | The western or eastern end of the shared Division, where trains enter and leave it. | ||
| Division Yard | The active source of rolling stock. | ||
| Expedited train | A train with the expedite rule. It performs Load/Unload at an Office after arriving, then attempts to depart at the end of that same Stage. | ||
| Facility | A Passenger Facility at an upgraded Office or a Freight Facility at an industry. | ||
| Freight Agent | The Local Operations option that stocks one outbound box, clears one inbound box, unjams one load, or ends without acting. | ||
| Limits | The two signs defining an Office Area’s Running Track. They move outward when that track is extended. | ||
| Local Operations | The first player-driven phase of a Stage. A player chooses one: switch, draw, or Freight Agent. | ||
| Mainline | The shared cards between Offices and Division Points. | ||
| MEN \ | AT \ | WORK | A three-box freight pipeline. Any load on it locks its industry track. |
| Operational Rail | A card on which a train may finish a Move. Turnouts are pass-through only; a locked industry is not usable at all. | ||
| Running Track | The east–west track between an Office Area’s Limits, including its Office. | ||
| Secondary Track | All local rail inside the Limits that is not Running Track. | ||
| Stage | One of twelve turns in a Day. Its phases are Local Operations, New Train, Mainline, Load/Unload and Shift Change. On screen the last two are labelled "Cargo" and "Supervisor Shift" — same phases, the names the interface uses. | ||
| Subdivision | Mainline between Division Points or Control Points. Clearance checks look through the whole next Subdivision. | ||
| Superintendent | The player with the Fedora. The role decides same-direction clearances and rotates every three Stages. | ||
| Timetabled train | A numbered train card scheduled to one of the 12 Stage slots, then due at that slot each Day. Odd numbers go west; even numbers go east. |
The front page has three doors: Play multiplayer, Play solitaire, and Browse replays.
Solitaire runs entirely in your own browser and needs nothing from the server. Select New game, then choose:
Multiplayer goes to the lobby — see §3.5. It needs the server, because the game is authoritative there rather than in any one browser.
The browser writes those choices into the URL. A particular game is defined by the seed plus these house rules, not the seed alone.
The three starting-hand choices are:
| Choice | Setup result |
|---|---|
| Three random cards | Default. Deal three cards from one shuffled deck. |
| Six random cards | Deal six cards from one shuffled deck. The player begins over the normal hand limit and must play/discard down before ending the first Draw turn. |
| Three random track and three random non-track cards | Shuffle track and non-track piles separately for the opening deal; then recombine and shuffle their remainders for all later draws. |
The three Revenue values are independently rounded and clamped to 0–5:
Defaults are 1 / 1 / 0. Zero turns that revenue source off; it does not prevent the underlying operation.
The engine uses one seeded random stream for shuffles, Mainline selection, opening D12 rolls, timetable rolls, and automatic Heavy Grade orientation. Given the same seed, configuration, player names/order, and accepted action history, it reconstructs the same state.
At setup it creates each Office Area as Limit — Whistle Post — Limit, makes the Division Yard, creates players + 3 Crew Trays, turns up three Department cards, and constructs the shared Division.
In a multi-player engine game, every player receives two seeded D12 rolls:
The opening deal starts at the Superintendent’s seat and proceeds eastward — increasing seat index, which is how the Division map draws the table.
The local save format is JSON containing the seed, the accepted intent history, and the house rules. It does not serialize mutable game state. Loading recreates the game from the seed and replays every action through the rules engine. If an old history reaches an action that is no longer legal, replay stops there instead of forcing an invalid state.
The browser also stores the current local game and resumes it automatically when the page opens without an explicit seed in the URL. A downloaded save is named station-master-seed<seed>-day<day>.json.
Undo is solitaire-only. It removes the final accepted intent and rebuilds the game from the earlier history. Random outcomes are not rerolled: replaying the same action consumes the same seeded result. Undo can therefore change the player’s decision after seeing an outcome, but cannot fish for a different timetable die roll.
Three modes: Solitaire, Competitive and Co-op. All three are playable.
Length is a free days count, not a preset — any number of Days may be set. The default is 5.
How a game ends and who wins:
3 × players × days. Fall short and everybody loses, whatever anyone individually scored.Extended play (Gitea#11). Both days-based endings — running out of timetable, and closing short of the Revenue floor — offer another Day, because they are the same event seen twice: the last Day ended, and this is what the books say. A collision ending is not extendable, and neither is a collision breach during an extended Day. The official result is frozen when the timetable first ran out, so a railroad declared unsafe on Day 9 does not retract who won on Day 5.
Three optional rules, all implemented:
| Rule | Effect |
|---|---|
| Reduced Visibility | Five switching Moves instead of six, in Stages 1, 2, 3, 11 and 12 — the night Stages. |
| Employee Rotation | Every player moves one chair at the end of each Day. Revenue and the Fedora travel with the player; the Office Areas stay with the seats. |
| Emergency Toolbox | Starts every player holding the Red Flags status, so the hand limit opens at four. |
(There is no "Sister Trains" flag. It appeared in an earlier draft of this document and never in the configuration.)
Multiplayer is delivered and is what this package is for. The flow:
[N behind] counter, Pause and Skip.Solitaire needs none of this and runs with the page alone.
Each of 12 Stages follows this sequence:
1. Local Operations — each player, starting with the Superintendent and proceeding eastward
2. New Train — make up due timetabled trains, then queued second sections and Extras
3. Mainline — automatic train movement in numeric order
4. Load/Unload — each player, same order. On screen: "Cargo"
5. Shift Change — expedited departures, workers. On screen: "Supervisor Shift"
"Proceeding left" is seat order, west to east, which is how the Division map draws it — the screen says "eastward" for that reason, because a table has no shared left.
At a Shift Change, Laborers and Porters reset. The Fedora moves after Stages 3, 6, 9, and 12. The collision limits are judged on the Stage just played, before anything else. At Day end, dispatch-device use resets, collision count resets, the Day and Stage roll over, and victory is checked.
On a player’s Local Operations turn, choose exactly one available option.
Switch. Select any Crew Tray currently in that player’s Office Area. It gets six Moves, or five under Reduced Visibility on the listed night Stages. A Move travels any connected distance in one direction and must end on Operational Rail. Reversing is a separate Move. A train may pass through a turnout but cannot stop on it. It may not share or pass through another train except through an Office with a free A/D track.
Standing cars couple automatically when the train reaches them; it may not pass them, and the resulting consist may not exceed four cars. Coupling forward places cars ahead of the engine; coupling while backing places them behind it. Setting out cars does not spend a Move, but the cut must come from an outer end of the consist and may not be left on the Office. A Small Yard re-orders a consist for one Move, and may also place cars ahead of the engine — which is how a cut is set up to be shoved into a facing industry. Each option on the menu shows the train it would build, laid out west to east as the board draws it, and says whether the result may leave the Office or would be held there. Flying Switch spends one Move to roll a tail cut into a connected Freight Facility.
Draw. Take one card from the face-down Home Office or the exposed top of one Department pile. During this option, play eligible cards and/or discard cards to Department piles, then finish at the hand limit. Track, facilities, offices, modifiers, enhancements, and train cards have the placement or scheduling rules in the deck references. Mainline modifiers are played from this option as well.
A Department that is emptied is refilled at once. §6.2: "If any of the Department decks is empty, draw a Home Office card and place it in the empty spot." So taking the last card off a pile does not leave a gap — a fresh card is turned face up from the Home Office deck to replace it, and there are always three Departments to draw from. The refill happens only when the draw actually empties the pile; a pile with cards buried under the one taken is not refilled, or the Departments would grow without limit and drain the deck into themselves.
Freight Agent. Make one of these operations, then the turn ends: stock one green outbound box from a matching loaded Division Yard car; clear one red inbound box to the Classification Yard; unjam one outbound, inbound, or MEN | AT | WORK load — the one you name, when a box holds more than one — to the Classification Yard; or explicitly end without acting. Freight can be stocked only when an unclaimed empty matching car is already spotted at that industry. Passengers may wait in a green Office box without a train present.
A car cleared from a red Inbound box comes back empty. Whatever was in it has arrived — the passengers are out of the station, or the load is in the industry — and the Revenue for it was paid on arrival, not on clearing. What returns to the Classification Yard is the car, in the common supply and carrying nothing.
Implementation note: card.discard is accepted during Local Operations without checking that the Draw option was chosen — unlike card.play, which does check. This is an implementation quirk rather than a fourth published turn option.
The Running Track cannot be broken by a curve or other card lacking its east–west through route. Local branches use turnouts and 45° curves. Cards that touch vertically connect only if their 45° legs share the correct diagonal; mere adjacency is not rail connection.
An industry’s track is locked while any load is on its MEN | AT | WORK pipeline. Trains cannot enter, cross, pick up from, or set cars out there. When it is unlocked, an industry track is ordinary Operating Rail and holds up to four cars, the same as any other non-turnout, non-Limits card: a crew may set out one, two, three or four cars there, whatever it is carrying. An industry’s green and red boxes are how much work it can hold, not how much rail it has, and a Modifier beside it adds a box without adding room for a car.
Train-card restrictions also apply while switching. No-switching trains cannot move, set out, or sort locally. Trains 3/4 share a one-freight-car budget for pickup or setout at each grid location. Trains 7/8 cannot set out their coach. X13 cannot pick up, and X22 may pick up empty cars only.
At the Stage shown on the timetable, the engine makes up the matching timetabled train if a Crew Tray is free. It starts at the Division Point appropriate to its direction. A train may receive matching loaded or empty cars from the Division Yard until its listed maximum consist is reached or no suitable car remains. It is permitted to leave under-strength.
A Second Section order on the due train creates another identical timetabled train behind it when a free tray is available. A played Extra is made up after timetabled trains and Second Sections when a tray is free, and the player who played the card chooses where it starts — either Division Point, the Interchange, or an Office, according to the extraStart house rule — and loads it as they choose rather than going round the table.
A timetabled train's consist is built by the table: starting with the Superintendent and working eastward, each player adds ONE car, going round again until the train is full or the Division Yard holds nothing it can take.
When the yard can supply nothing, the game says so. The round is skipped — there is no point asking for a car that cannot be given — and the train is reported as made up short, naming what its card wanted, how many such cars are waiting in the Classification Yard, and how far the Division Yard is from bare. See §4.6 for why that happens to coaches in particular.
Mainline movement is automatic and processes lower train numbers first; a timetabled train outranks an Extra with the same number. A train at a Division Point, at an Office A/D track, or already crossing a Mainline card attempts its applicable movement.
Crossing time is the card's REGIONS, one per Stage — not its printed mph, which is scenery, and not the train's Fast/Slow rating, which only Hilly reads. See the Mainline deck reference for what moves a train's entry point. On a normal card, a train must check the entire next Subdivision before entering it:
An Office arrival normally takes a free A/D track. If the Office is full, the inbound train collides and the local Office player loses 5 Revenue; Interlocking instead holds it at the Limits. A held train takes the first A/D track that frees — whether another train's arrival or a departure freed it — ahead of anything arriving after it, and no later than the end of the Mainline phase in which the track became free. A coachless inbound train may divert to a Yard Office. Cars fouling the Running Track at the Office also cause a collision.
An expedited train is released by the ordinary rules like any other; what Expedite restricts is where it may be left. If it is standing anywhere in the district but the Office when a Mainline phase begins, its owner is fined once for that phase. An arrival waits until a later Mainline phase. A train departing an Office must be correctly made up: engine at one end, caboose at the far end if present.
When a train leaves the far Division Point, its cars are returned to yards, its Crew Tray becomes free, and each player receives the configured train-transit Revenue (zero by default).
Passenger work occurs during Load/Unload, at a Depot, Station, or Terminal. Each Porter may take one action per Stage.
Crack Limited trains permit passenger work at Terminals only. Military Train and Director's Private Car permit no passenger work. A Whistle Post has no Porters.
Coaches travel one way, and it is worth knowing before you plan around passengers. Boarding sends the emptied coach to the Classification Yard; detraining draws a fresh empty out of the Division Yard; and §2.2 returns the Classification Yard only when the Division Yard runs completely bare. Measured over one three-Day game: sixteen coaches in the Division Yard at setup, none from Day 2 Stage 8 onward, fifteen piled in Classification while the Division Yard held steady at 46–47 freight cars and stopped draining — so the refill never fired and no passenger could board or detrain anywhere for the rest of the game, while trains whose cards call for coaches were made up empty.
This is the rules working as printed: running out of cars is part of the game. The yard panel warns while the shortage lasts, and a train made up short reports what it wanted and why none is coming.
Freight work also occurs during Load/Unload. Each Laborer can take one action per Stage. Every freight facility has MEN, AT, and WORK boxes.
For an outbound load, first use the Freight Agent to put a matching loaded car into the green box, with an unclaimed empty matching car spotted on the industry track. A Laborer starts the load on MEN, then advances it to AT, then WORK, then onto the empty car. Completing the last step changes that car to loaded, sends the replaced empty car to the Classification Yard, and earns configured freight Revenue.
For an inbound unload, a matching loaded car must be spotted at an inbound-capable industry and the Division Yard must contain a matching empty car. A Laborer replaces the spotted loaded car with that empty car and starts the load on WORK. Laborers move it backward through AT and MEN into a free red inbound box. That final placement earns configured freight Revenue. Clearing the red box later with the Freight Agent pays no additional Revenue.
Solitaire is one named player and one Office Area, running entirely in the browser with no server. It is not the only implemented game any more — see §6 — but it is the one that needs nothing but the page.
Solitaire-specific features are:
Automatic phases get a visible beat in solitaire too, so the board plays its own moves out rather than jumping.
The active deck removes all 22 opponent-directed cards. Therefore, the defensive cards whose only purpose is to answer them (Facing Point Locks and Water Column) can be placed but have no opportunity to fire; Overpass has no effect at all. The game still includes shared-rail mechanics such as Mainline clearance, but with one player no other player can occupy the Division.
To win the default one-player game, finish Day 5 having met the combined Revenue floor — 3 × players × days, which at one player over five Days is 15. Below it is a loss, and the game offers you another Day rather than simply ending. Train-transit Revenue defaults to zero, so the score has to come principally from passenger and freight work.
The rules engine supports multiple named players; the lobby, server and client around it are delivered too, so this section now describes a game people actually play. The engine has player, seat, score, Office Area, Division, phase-order, co-op and competitive-mode data for multiple named players. It deals each player a hand, creates one Office Area per seat, starts acting order at the Superintendent and proceeds eastward, and models the following multiplayer-specific outcomes:
3 × players × days; andThe engine’s setup checks only that there is at least one player and that Solitaire has exactly one player. It does not enforce a maximum player count, although the test and design material exercise two through four players.
Everything in §3.5: a lobby with game codes, seating, bots filling empty chairs, an authoritative server that survives restarts and updates by replaying its intent history, per-seat reconnection, an administrator's single-use seat-recovery link, and an ordered replay of other players' turns on each player's own screen.
The package also exposes administrative actions on StartOS — list games in progress, get the join secret, manage a game, restore a seat — documented in the wrapper repository rather than here.
No card may be played at another player. The 12 space-use and 10 action cards are excluded from every dealt deck in every mode, and check rejects playing one. That includes Derail, Broken Coupler, Railroad Crossing, the score-penalty cards, Vandalism, Hotbox, Outlawed and all table-space cards. Facing Point Locks and Water Column exist only as dormant defences against effects nothing can currently cause, and Overpass has no effect at all.
No multiplayer Undo. A shared game cannot be rewound under the other players.
Players have separate districts, hands and scores, and share the Home Office deck, the Department piles, the yards, the timetable, the Mainline and every traffic consequence. One player acts at a time.
A seat is not a player, and the distinction is load-bearing. Offices belong to seats; Revenue, hands, the Fedora and identity belong to players. With Employee Rotation on, players move one chair at the end of each Day and take their Revenue and the Fedora with them, while the districts stay where they are.
So multiplayer changes shared traffic, scores, turn order and how the game is won or lost — not card attacks, which do not exist in any mode.
Saving a multiplayer game. The server holds the save; Save replay downloads your copy. A save carries the seed, and the seed is the whole deal — every hand and the order of the deck — so in a Competitive game the download is available once the game is over. In Co-op it is available at any time.
Only with the same house rules, player configuration/order, and action history. The seed drives all engine randomness, but the starting hand and Revenue settings also change the game.
Your hand exceeds three cards, or four when the Red Flags hand-limit status is active. Play or discard down to the limit.
It may move through a turnout but cannot end a Move there because turnouts are not Operational Rail.
Its MEN | AT | WORK pipeline contains a load, which locks the track; the rail geometry does not connect; another train occupies it; mandatory coupling would exceed four cars; or four cars are already standing there, which is as many as any card holds.
The green box may be full, the Division Yard may lack a matching loaded car, or there is no unclaimed empty matching car already spotted on that industry’s track.
The engine immediately replaces the spotted loaded car with a matching empty car. It will not create a new car from nothing.
The Office had no free A/D track and no Interlocking. A full Office is an automatic local collision. An Interlocking holds the arrival at the Limits.
It may be on Secondary Track rather than the Office, or be badly made up: its engine is between cars or its caboose is not at the far end.
Expedite does not change when a train leaves — it leaves when the Mainline rules release it, like any other. It changes where the train may be left: if a Mainline phase begins with it standing on any track in the district but the Office, the owner is fined. The fine is charged once per Mainline phase, however many clearance questions that phase asks.
An Extra, yes — the player who played the card chooses where it starts and which way it runs, and loads it as they choose. A Heavy Grade, no: orientation is rolled from the seed. That is a decision rather than a gap — the card sits between two districts and belongs to neither, so handing the choice to one neighbour would advantage them permanently. See the Mainline deck reference.
No. Its printed car-sorting is not implemented. What the Interchange offers is the one Mainline card with a yard, so an Extra may be made up and started there. Re-ordering a consist is done at a Small Yard in a district.
No. All action and space-use cards are excluded from every dealt deck in every mode, and playing one is rejected.
Yes. Lobby, game codes, seating, bots, an authoritative server that survives restarts, per-seat reconnection and a replayed view of everyone else's turns — see §3.5 and §6. The opponent-directed cards are unimplemented in every mode, so there are no card attacks.
Almost certainly the coach ratchet in §4.6: every coach has ended up in the Classification Yard, which comes back only when the Division Yard runs completely bare. The yard panel warns when this has happened, and a train made up short says so in the log.
Because that train is already made up, so every re-order on offer would break it — most often by moving the caboose off the rear, which §8.2 will not let a train depart with. If the train is not currently fit to run, at least one option will be marked "MADE UP, ready to leave".
Not always. A save is a seed and the list of moves, replayed through the rules of whatever build opens it — so a change that makes a once-legal move illegal stops the replay at that move. The game names the move and leaves the file untouched; the build the game was played on will still finish it.
A train is held, released or put to the Superintendent by what is in the Subdivision ahead of it: the run of Mainline cards between two Control Points. Every Office that is not a Control Point lies inside one, so a table of Whistle Posts is a single Subdivision from end to end.
An Office never holds more trains than it has A/D tracks. A train the Interlocking is holding at the Limits takes the first track to free, ahead of anything arriving afterwards — and the train that arrives to find it taken is held at its own Limits, or collides if there is no Interlocking. A track freed by a departure counts too: the held train takes it at the end of that Mainline phase.