The example repository
Download example-repository.zip
It's the Pond League: the Pinecrest Porcupines against the Saltmarsh Sturgeon. Each team has a logo, four forward lines, three pairs and two goalies, with every rating filled in. There are two updates, and between them the teams make a trade. Import the zip as it is to see it in the game, or copy it and make it your own.
| File | What it shows |
|---|---|
roster-repository.json |
The front page, with one set. |
pond/roster-set.json |
Two updates, newest first, with their checksums. |
pond/2026-10-01/roster-pack.json |
The opening rosters: two teams and 40 players. |
pond/2026-10-05/roster-pack.json |
After a trade, with new lines and a rating change. |
pond/2026-10-05/changes.md |
What changed, in words. |
pond/2026-10-05/art/PIN.png, SAL.png |
The teams' logos, listed in the pack's files. Each update has its own copy. |
The smallest pack
Every field the game can do without is left out: no ratings, so everyone's average, and no lines, so the game dresses each team in the order its players are listed. It still plays a full game. Here it is trimmed (the download has all 32 players):
{
"format": "bladeybiscuit.rosters",
"formatVersion": 1,
"league": "MINI",
"teams": [
{ "id": "RED", "name": "Red Team", "colors": { "primary": "#B22222", "secondary": "#FFFFFF" } },
{ "id": "BLU", "name": "Blue Team", "colors": { "primary": "#1C3F94", "secondary": "#FFFFFF" } }
],
"players": [
{ "id": 1, "firstName": "Ada", "lastName": "Redson", "team": "RED", "number": 1, "position": "C" },
{ "id": 2, "firstName": "Bo", "lastName": "Redson", "team": "RED", "number": 2, "position": "LW" },
{ "id": 3, "firstName": "Cy", "lastName": "Redson", "team": "RED", "number": 3, "position": "RW" },
…
{ "id": 16, "firstName": "Pip", "lastName": "Redson", "team": "RED", "number": 30, "position": "G" },
{ "id": 17, "firstName": "Ada", "lastName": "Blueberg", "team": "BLU", "number": 1, "position": "C" },
…
]
}
A team needs 15 skaters and a goalie to dress without call-ups: nine forwards, six defencemen and a goalie.
The smallest repository
To import a pack, wrap it in the two index files. These are as short as they can be:
mini/
roster-repository.json
mini/
roster-set.json
2026-10-05/
roster-pack.json
roster-repository.json:
{
"format": "bladeybiscuit.roster-repository",
"name": "Mini",
"sets": [{ "id": "mini", "index": "mini/roster-set.json" }]
}
mini/roster-set.json:
{
"format": "bladeybiscuit.roster-set",
"id": "mini",
"name": "Mini League",
"updates": [{ "date": "2026-10-05", "file": "2026-10-05/roster-pack.json" }]
}
Without a sha256 the game skips the checksum, which is handy while you're building it. Add one,
with size, teams and players, before you share. The checker writes the
whole update for you.
Recipes
Add a team
- Add the team to
teams, with a newid. - Add its players to
players, each with"team"set to thatid. Give each one anidno other player in the pack has. - Give the team
lines, or leave them out and let the game dress it.
Make a trade
In the example's October 5 update, Pinecrest trade Pascal Mossgrove (id 109) to Saltmarsh for
Ike Dunmore (id 208). Two things change for each player:
- Their
team: Mossgrove's becomes"SAL"and Dunmore's"PIN". - The lines: each id moves into a spot on the new team, and out of the old one.
Their ids don't change: an id is the player's for good, in every update
(why).
Pinecrest's forwards before: [[102, 101, 103], [105, 104, 106], [108, 107, 109], [111, 110, 112]]
and after: [[102, 101, 103], [105, 104, 106], [208, 107, 108], [111, 110, 112]]
Forget the lines and nothing breaks: the game fills the hole a traded player leaves, and dresses a new arrival only if there's a hole for them. The checker shows you each lineup as the game will dress it.
Post a new date
- Copy the newest dated folder and rename it to today, like
2026-10-12. - Make your changes to the pack in it, and write a
changes.mdif you like. Keep every player'sidas it was, and give anyone new anidnobody's had. - Add an update for it to
roster-set.json(the checker writes it for you). - Set
latestinroster-repository.jsonto the new date.
Keep the old folders and their updates. People can go back to them.
Two leagues in one repository
Give each its own folder and set, and list both in roster-repository.json:
"sets": [
{ "id": "pond", "name": "The Pond League", "index": "pond/roster-set.json", "latest": "2026-10-05" },
{ "id": "beer-league", "name": "Tuesday Beer League", "index": "beer-league/roster-set.json", "latest": "2026-09-30" }
]
Each set installs on its own, and each is a league in team select.