Docs

Advanced guide

Custom player database

Schema version 1 · JSON only · shorthand uploads normalize into full packs automatically.

New to custom imports? Start with the Beginner guide.

Pack scopes

player

One signing or wonderkid · Optional at career start

club

One team's squad · Required — must match your club

league

Whole division · Per club in clubs[] · countryId + tier must match your division at import

world

Multi-league / global · Per club in clubs[] · Unlisted clubs stay fictional

Full packs need schemaVersion: 1, packId, name, builtAt, scope, and clubs[].


JSON examples

textReference
One player     →  bare object  OR  kind: "player"
One team       →  clubKey + players[]  (club scope)
One division   →  league scope: countryId + tier
Many countries →  world scope

Bare player

jsonplayer.json
{  "number": 10,  "name": "Jordan Pike",  "position": "ST",  "age": 24,  "nationality": "United States",  "ovr": 81,  "potential": 88}

Player wrapper

jsonplayer-wrapper.json
{  "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

jsonclub.json
{  "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

jsonworld-pack.json
{  "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

numberrequired
number

Squad number, 1–99

namerequired
string

Display name

positionrequired
string

GK, CB, LB, RB, CDM, CM, AM, LW, RW, ST

agerequired
number

Integer age

nationalityrequired
string

Country or region label

ovr
number

Overall rating

potential
number

Development ceiling

attributes
object

Key → 0–100, merged onto generated attrs

traits
string[]

Up to 3 trait labels

wage
number

Weekly wage override

contractValue
number

Transfer value hint

contractExpiresSeason
number

Season index when deal expires

marketValue
number

Transfer value for wage derivation

isCaptain
boolean

Captain flag (career start)

isWonderkid
boolean

Wonderkid flag

note
string

Free text (e.g. club on national imports)

seasonStats
object

Apps, goals, assists, minutes, cards, avg rating

careerTotals
object

Career apps, goals, assists, minutes

foot
"left" | "right" | "both"

Preferred foot

heightCm
number

Height in cm

firstName, lastName, birthCity, birthCountry, agent
string

Profile metadata

externalPlayerId
string

Your external ID

Club blocks

clubKeyrequired
string

Must match in-game club ID

playersrequired
PlayerRow[]

At least one valid row

externalClubName
string

Display name override

stadiumName, stadiumCapacity
string | number

Stadium details

leagueId, chronalifeCity
string

Reference labels

coachName
string

Head coach label

squadMarketValue, averageAge, foreignersCount, foreignersPct
number

Squad summary stats

recentTransfers
object[]

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.
Names

Name, nationality, age, squad number

Ratings

+ position, OVR, potential, attributes, traits, contract hints

Full

+ 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

Unsupported database version

schemaVersion is not 1

Import OK, few changes

Wrong clubKey or shirt numbers

League scope does not match…

League pack country/tier ≠ your division

This team file targets …

File clubKey ≠ selected club

Player file must include exactly one…

Multi-player file in single-player path

No valid clubs found

Missing clubKey, empty players, or invalid rows

National import did nothing

No national job yet, or no valid rows


CHRONAFC · Manager edition