01 · Workflow
Start with the right universe.
Pick Classic, Expanded, or Full before uploading. The file's
presetId chooses the fixed competition levels. Team
and conference IDs are yours to define inside those levels.
Competition levels stay fixed. You may add,
remove, or rename team and conference IDs as long as every ID is
unique and every team points to a conference in the same level.
The allowed competitionId values come from the
selected preset and cannot be added or removed.
Older files are accepted. Choose the universe size first, then upload a customization exported before schema version 1. A complete older Classic file replaces Division 1. Expanded and Full keep their other levels.
02 · JSON rules
JSON is strict, but predictable.
"school": "North State"
"name": "Bears",
"prestige": 72
"_comment": "Your note"
"stadiumCapacity": 4200
"isPowerConference": false
Save the file as UTF-8 with a .json extension. Empty
override lists are valid, but the root teams,
conferences, and competitions arrays
must exist.
Choose how the arrays behave. With
"replaceStructure": true, the team and conference
arrays are the complete universe. Leaving an entry out deletes
it. Without that setting, entries are added or updated and
omitted defaults remain. Full editor exports use replacement
mode automatically.
03 · Example
A complete, valid shape.
This partial Classic pack overrides one program, one conference, one division, and the national tournament names.
{
"schemaVersion": 1,
"presetId": "classic",
"name": "My Classic Universe",
"replaceStructure": false,
"teams": [
{
"id": "team_001",
"competitionId": "four-year-1",
"conferenceId": "conf_01",
"school": "Ridgemont University",
"name": "Monarchs",
"abbreviation": "RDG",
"primaryColor": "#003DA5",
"secondaryColor": "#FFFFFF",
"logoUrl": "https://example.com/rdg.png",
"stadiumName": "Crown Diamond",
"stadiumCapacity": 5000,
"stadiumAge": 18,
"state": "NC",
"region": "southeast",
"city": "Ridgemont",
"prestige": 72,
"rivals": ["team_002", "team_004"],
"facilities": {
"stadium": 7,
"trainingCenter": 6,
"weightRoom": 6,
"analyticsLab": 5
},
"rosterRulesId": "four-year-full"
}
],
"conferences": [
{
"id": "conf_01",
"competitionId": "four-year-1",
"name": "Atlantic Athletic Conference",
"abbreviation": "AAC",
"logoUrl": "",
"tier": "power",
"region": "southeast",
"isPowerConference": true,
"tournamentFormat": "double-elimination",
"tournamentTeamCount": 12,
"tournamentSiteType": "neutral",
"tournamentVenueName": "Harbor Park",
"tournamentVenueCapacity": 8500,
"teamIds": ["team_001"]
}
],
"competitions": [
{
"id": "four-year-1",
"displayName": "Division 1",
"scheduleTemplateId": "crown-56",
"postseasonTemplateId": "crown-championship",
"competitionStrength": 1,
"staffTarget": 6,
"postseasonTeamCount": 64,
"pollNames": {
"poll_prestige": "Coaches Poll",
"poll_talent": "Scouts Poll",
"poll_results": "Computer Ranking",
"poll_balanced": "National Top 25"
}
}
],
"postseason": {
"tournamentName": "National Tournament",
"regionalName": "Regionals",
"superRegionalName": "Super Regionals",
"cwsName": "College Championship Series",
"cwsLocation": "Omaha, NE",
"cwsBallparkName": "Omaha Championship Park",
"cwsBallparkCapacity": 24000
}
}
04 · Root fields
The file header and sections.
| Field | Required | Value |
|---|---|---|
schemaVersion |
Yes | 1 |
presetId |
Yes |
classic, expanded, or
full
|
name |
No | A useful name for the pack |
replaceStructure |
No |
true makes the team and conference arrays
authoritative, allowing deletions. Defaults to patch mode.
|
replaceCompetitionIds |
No | Replaces only the listed fixed levels while keeping the others. Older files use this automatically when imported into Expanded or Full. |
teams |
Yes | Team entries. May be empty only when replacement mode is off. |
conferences |
Yes | Conference entries. May be empty only when replacement mode is off. |
competitions |
Yes | Array of division overrides; may be empty |
postseason |
No | Shared tournament and venue names |
05 · Teams
Program identity and resources.
| Field | Type / range | Notes |
|---|---|---|
id |
Unique stable ID |
Required. Existing or custom text such as
ridge-state.
|
competitionId |
Stable division ID | Required. Must be one of the fixed levels enabled by the selected preset. |
conferenceId |
Stable conference ID | Required. Must belong to the same division. |
school |
Text | Full institution name. |
name |
Text | Nickname or mascot. |
abbreviation |
2–5 characters recommended | Used in scoreboards and compact tables. |
primaryColor, secondaryColor
|
#RRGGBB |
Six-digit hex colors, including the leading #. |
logoUrl |
HTTP(S) or local library reference |
Use an image you control or have permission to use. The
in-game Import Logos action creates
local-logo:// references automatically. Empty
text removes it.
|
stadiumName |
Text | Public ballpark name. |
stadiumCapacity |
100–30,000 recommended | Custom capacity is respected independently of facility level. |
stadiumAge |
0–120 | Older parks have lower condition ceilings and higher upkeep. |
state |
Two-letter US code | Drives recruiting geography and regional weather. |
region |
Named region |
southeast, northeast,
midwest, southwest,
west, or plains.
|
city |
Text | Displayed location. |
prestige |
0–100 | Division-relative public rating. See the scale table below. |
rivals |
Array of stable team IDs | No duplicates and never the team's own ID. |
facilities |
Four integers, each 0–10 |
stadium, trainingCenter,
weightRoom, and analyticsLab.
|
rosterRulesId |
Known rules profile | Advanced. Use the in-game editor dropdown so school length and eligibility remain coherent. |
Retired fields: shortName and
nilRanking are no longer used. Remove them from new
files. Team abbreviations handle compact names, while NIL access
is derived from division, program finances, and the live
economy.
06 · Local logos
Keep image files on your own device.
Open the Universe Editor and choose Import Logos.
Select one folder containing PNG, JPEG, WebP, GIF, or SVG files.
Road to Omaha copies matched images into its device-local library,
so absolute paths such as C:\Logos or
/Users/name/Logos are never required.
Recommended filenames: use the team's stable ID
or abbreviation, such as team_001.png or
UCLA.webp. Unique school names also work. Put
conference marks in a conferences subfolder and
name them with the conference ID or abbreviation.
Road to Omaha Logos/
├── teams/
│ ├── team_001.png
│ ├── UCLA.webp
│ └── custom-gulf-coast.svg
└── conferences/
├── conf_01.png
└── SEC.svg
The library is supported by the web, Steam, and Mac builds and
remains available between sessions on that device. Exported
universe JSON keeps the small local-logo://
assignments but does not embed the image files. After moving a
pack or save to another device, import the same folder once to
reconnect every matching logo.
07 · Scales
Local ratings, overlapping national quality.
Prestige is shown as 0–100 within a division. Facilities are shown as 0–10 within a division. Under the hood, both map to overlapping 0–1000 bands, so an elite lower-division program can be better than a struggling program one level above it.
| Division ID | Public name | Global band | Default strength | Typical stadium level |
|---|---|---|---|---|
four-year-1 |
Division 1 | 650–1000 | 1.00 | 5–10 |
four-year-2 |
Division 2 | 450–750 | 0.74 | 4–8 |
four-year-3 |
Division 3 | 250–550 | 0.55 | 3–6 |
four-year-independent |
NIAA | 300–600 | 0.65 | 3–7 |
two-year-1 |
JUCO Division 1 | 250–575 | 0.62 | 3–7 |
two-year-2 |
JUCO Division 2 | 100–425 | 0.50 | 3–7 |
two-year-3 |
JUCO Division 3 | 0–275 | 0.42 | 3–6 |
08 · Conferences
Names, membership, and tournament setup.
| Field | Allowed value | Notes |
|---|---|---|
id |
Unique stable ID |
Required. You may define a new ID such as
great-plains.
|
competitionId |
Stable division ID | Required. Must be one of the fixed levels enabled by the selected preset. |
name, abbreviation,
logoUrl
|
Text / URL | Public conference identity. |
tier |
power, mid-major,
low-major, small
|
Sets the conference's starting reputation profile. |
region |
One of the six region IDs | Used for geography and scheduling. |
isPowerConference |
true or false |
Explicit power-conference flag. |
tournamentFormat |
double-elimination or
single-elimination
|
Conference postseason format. |
tournamentTeamCount |
2 through conference size | Leave out to include all members. |
tournamentSiteType |
neutral or
regular-season-champion
|
Controls tournament hosting. |
tournamentVenueName,
tournamentVenueCapacity
|
Text / non-negative number | Used for neutral-site events. |
teamIds |
Array of stable team IDs | Every listed team must be from the same division and cannot appear in two conference arrays. |
09 · Divisions
Competition-wide rules.
These settings affect an entire division. The in-game editor's Divisions tab is the safest place to change them.
| Field | Type / range | Notes |
|---|---|---|
id |
Known division ID | Required and fixed. |
displayName |
Non-empty text | Player-facing division name. |
postseasonTeamCount |
2 through division size | Editable field size. Bracket geometry adapts automatically. |
competitionStrength |
Greater than 0, up to 1 | Cross-division strength multiplier. Defaults are in the table above. |
staffTarget |
Positive integer | Coach-pool depth target per program; defaults range from 2 to 6. |
scheduleTemplateId |
Known template ID | Controls target games, season length, series length, and travel behavior. |
postseasonTemplateId |
Known template ID | Controls base bracket style. Field size can still be overridden separately. |
pollNames |
Object of four poll IDs |
Uses poll_prestige, poll_talent,
poll_results, and poll_balanced.
|
Schedule template IDs
crown-56national-50regional-40independent-50two-year-premier-50two-year-national-44two-year-open-38
These are internal stable IDs; they are not displayed as division names in the game.
Postseason template IDs
crown-championshipnational-championshipregional-championshipindependent-championshiptwo-year-premier-championshiptwo-year-national-championshiptwo-year-open-championship
Use the template already exported for a division unless you deliberately want to change its tournament structure.
10 · Postseason names
Shared tournament labels and final-site details.
The optional postseason object accepts
tournamentName, regionalName,
superRegionalName, cwsName,
cwsLocation, cwsBallparkName, and
cwsBallparkCapacity. These are public labels and
venue details; division field sizes belong in
competitions.
11 · Troubleshooting
Common errors and what they mean.
Look just before that location for a missing comma, extra comma, unclosed quote, or mismatched bracket.
Current builds convert recognized older customization files automatically. If this still appears, update the game and make sure the file contains a teams, conferences, competitions, postseason, or polls section.
A team or conference uses a competitionId that
the chosen Classic, Expanded, or Full universe does not
include. Team and conference IDs are not restricted.
A team points to a conference from a different competition, or
a fixed competitionId was changed.
Use exactly six hexadecimal digits, such as
#0A3D91.
Use one of the exact schedule or postseason template IDs listed above.
Facilities are division-relative integers. Do not put the hidden 0–1000 value in the JSON file.
Lower postseasonTeamCount to the number of
programs in that division or less.
Bring the exact error and the file.
The Discord community can usually identify a JSON mistake quickly when the full validator message is included.