Identifiers
Railroader uses domain/name identifiers throughout the modding system to uniquely name packs, definitions, and assets.
Domain
Section titled “Domain”The first part of every identifier is the domain, which identifies the author. Your domain should be unique to you — we recommend using your username or reverse DNS domain (e.g., myhandle, com.example).
Format: lowercase a-z, digits 0-9, hyphens -, periods .
Reserved domains, don’t use these: rr, steam-*, core, builtin. These belong to the base game and its infrastructure. Pick a domain that’s unique to you.
Pack Identifiers
Section titled “Pack Identifiers”Every asset pack has a unique identifier in domain/pack-name format, declared in the pack’s Info.json.
{ "identifier": "myhandle/antarctic-freight"}Definition Identifiers
Section titled “Definition Identifiers”Each definition (car, locomotive, prop, load, etc.) declared in Definitions.json has its own identifier in the same domain/name format:
{ "identifier": "myhandle/my-boxcar", "definition": { "kind": "Car", ... }}A definition’s domain is typically the same as its pack’s domain, but this is not required.
Asset Identifiers
Section titled “Asset Identifiers”Individual assets within a pack (models, textures, materials, audio) are referenced by combining the pack’s domain with the asset’s base filename:
domain/asset-nameFor example, if you have my-engine.prefab in your somebody/my-engine-pack asset pack, the asset identifier is somebody/my-engine.
Only assets at the root of the pack source directory get an identifier this way. See Binary Assets for more.
To reference an asset within the same pack, use . as the domain:
"modelIdentifier": "./my-boxcar-model"To reference an asset from another pack, use that pack’s domain:
"truckIdentifier": "rr/truck.buckeye.edt"Names Within a Definition
Section titled “Names Within a Definition”Not every name is a domain/name identifier. A definition also names things inside itself — a
component id and a
style class — and both can only include the same
characters, because both have to be sayable in a style selector:
Format: ASCII letters A-Z/a-z, digits 0-9, hyphens -, underscores _
Nothing else. Spaces separate one class from the next rather than belonging to either, and dots and
# are the selector syntax’s own punctuation, so "Number Board Decal" is three classes and not one
name. Unlike a domain, case is free — selectors match case-insensitively, so numberBoard and
.NUMBERBOARD name the same class.
A component may carry more than one style class, separated by spaces, and each entry between them
has to be a name: "lettering shopDate" is two classes, while "lettering," has a stray comma
naming nothing.
Load Locations
Section titled “Load Locations”Railroader loads asset packs from multiple locations. Pack identifiers must be unique across locations — only ModDev packs can override an existing pack identifier. See Installing Mods for how players install and manage mods, or Asset Packs for the ModDev override behavior used during pack development.
© 2026 Giraffe Lab LLC. All rights reserved.