Advanced guide
Custom player database
Schema version 1 · JSON only · shorthand uploads normalize into full packs automatically.
Pack scopes
One signing or wonderkid · Optional at career start
One team's squad · Required — must match your club
Whole division · Per club in clubs[] · countryId + tier must match your division at import
Multi-league / global · Per club in clubs[] · Unlisted clubs stay fictional
Full packs need schemaVersion: 1, packId, name, builtAt, scope, and clubs[].
JSON examples
One player → bare object OR kind: "player"
One team → clubKey + players[] (club scope)
One division → league scope: countryId + tier
Many countries → world scopeBare player
{ "number": 10, "name": "Jordan Pike", "position": "ST", "age": 24, "nationality": "United States", "ovr": 81, "potential": 88}Player wrapper
{ "kind": "player", "name": "Jordan Pike import", "clubKey": "usa-t1-01", "player": { "number": 10, "name": "Jordan Pike", "position": "ST", "age": 24, "nationality": "United States", "ovr": 81 }}Club shorthand
{ "clubKey": "eng-t1-01", "externalClubName": "North London FC", "leagueId": "eng-t1", "players": [ { "number": 1, "name": "Sam North", "position": "GK", "age": 27, "nationality": "England", "ovr": 80 }, { "number": 10, "name": "Elliot Crane", "position": "AM", "age": 23, "nationality": "England", "ovr": 84 } ]}Full world pack
{ "schemaVersion": 1, "packId": "my-world-pack-2026", "name": "My custom world pack", "author": "Your name", "source": "custom", "builtAt": "2026-08-05T00:00:00.000Z", "scope": { "kind": "world" }, "clubs": [ { "clubKey": "usa-t1-01", "leagueId": "usa-t1", "chronalifeCity": "Chicago", "players": [ { "number": 1, "name": "Alex Mercer", "position": "GK", "age": 29, "nationality": "United States", "ovr": 76 }, { "number": 9, "name": "Jordan Pike", "position": "ST", "age": 24, "nationality": "United States", "ovr": 81 } ] } ]}clubKey
Pattern {countryId}-t{tier}-{slot} · league ID {countryId}-t{tier} (e.g. eng-t1-01 / eng-t1)
- countryId — ISO-style code (eng, usa, esp)
- tier — division segment (t1, t2, …)
- slot — club slot within league (01, 02, …)
- In app: onboarding club card or Settings → Import squad database
Field schema
Player rows
numberrequirednumberSquad number, 1–99
namerequiredstringDisplay name
positionrequiredstringGK, CB, LB, RB, CDM, CM, AM, LW, RW, ST
agerequirednumberInteger age
nationalityrequiredstringCountry or region label
ovrnumberOverall rating
potentialnumberDevelopment ceiling
attributesobjectKey → 0–100, merged onto generated attrs
traitsstring[]Up to 3 trait labels
wagenumberWeekly wage override
contractValuenumberTransfer value hint
contractExpiresSeasonnumberSeason index when deal expires
marketValuenumberTransfer value for wage derivation
isCaptainbooleanCaptain flag (career start)
isWonderkidbooleanWonderkid flag
notestringFree text (e.g. club on national imports)
seasonStatsobjectApps, goals, assists, minutes, cards, avg rating
careerTotalsobjectCareer apps, goals, assists, minutes
foot"left" | "right" | "both"Preferred foot
heightCmnumberHeight in cm
firstName, lastName, birthCity, birthCountry, agentstringProfile metadata
externalPlayerIdstringYour external ID
Club blocks
clubKeyrequiredstringMust match in-game club ID
playersrequiredPlayerRow[]At least one valid row
externalClubNamestringDisplay name override
stadiumName, stadiumCapacitystring | numberStadium details
leagueId, chronalifeCitystringReference labels
coachNamestringHead coach label
squadMarketValue, averageAge, foreignersCount, foreignersPctnumberSquad summary stats
recentTransfersobject[]Transfer feed metadata
Matching & import
- Each clubKey in your file maps to an in-game club with the same key.
- Each player row matches by shirt number, then name, against the generated squad.
- Matched players update per import depth; unmatched clubs are skipped.
- Single-player imports may insert when no match exists.
Name, nationality, age, squad number
+ position, OVR, potential, attributes, traits, contract hints
+ season stats, career totals
Career start = Full. Settings import lets you pick depth. National pool: one player appends (max 40), multi-player replaces pool. Call-up max 23 — use Squad → Import national pool, not Settings.
All import paths
Custom names at start
Onboarding → Custom database
World, league, or club pack
Mid-season refresh
Settings → Import squad database
Team or pack · Names / Ratings / Full
One signing
Squad → Add to squad → Import player file
Bare player or kind: player
National pool
Squad → Import national pool
Player or multi-player file
Troubleshooting
schemaVersion is not 1
Wrong clubKey or shirt numbers
League pack country/tier ≠ your division
File clubKey ≠ selected club
Multi-player file in single-player path
Missing clubKey, empty players, or invalid rows
No national job yet, or no valid rows
Legal
- Default world is fictional. Custom databases are user-provided.
- You must have the right to import any names or statistics.
- Not affiliated with real leagues or clubs unless you separately license content.
- Files are processed on your device.
CHRONAFC · Manager edition