Custom rosters

Make your own rosters

Your own league, your own teams, your own players. All it takes is a text editor, and friends can install it from the menu.

Blades & Biscuits comes with the BBHL, but it'll play any league you give it. A custom roster set is a few plain text files: your teams, their colours, and players with names, numbers, sizes and ratings. Friends install it from Settings ▸ Rosters. Then it shows up in team select beside the BBHL, and LT / RT switches between leagues.

This guide covers everything the game reads, with a complete example to start from.

What you'll make

Custom rosters are JSON files, a common format for text that programs read. There are three kinds:

File What it holds
roster-pack.json One league at one moment: its teams, their lines and their players. You'll spend most of your time in this one.
roster-set.json A league's packs, one per date. People install the newest, or go back to an older one.
roster-repository.json The front page: who made it, and the leagues (sets) in it.

Together they make a roster repository: a folder you can zip up and send, or put on the web.

my-rosters/
  roster-repository.json        the front page
  pond/                         a folder for each set
    roster-set.json             its updates, by date
    2026-10-05/
      roster-pack.json          the teams and players as of that day
      changes.md                (optional) what changed since the last one

Quick start

The fastest way in is to change the example and import it.

  1. Download the example repository and unzip it. It's the Pond League: the Pinecrest Porcupines and the Saltmarsh Sturgeon, 20 players each.
  2. Open pond/2026-10-05/roster-pack.json in a text editor (TextEdit, Notepad and VS Code all work). Rename a team, change its colors, or give a player a new name and number.
  3. Update its checksum. The game checks every pack against the sha256 in roster-set.json, and your edit just changed it. Drop the pack onto the checker and copy the new sha256 and size into that update in pond/roster-set.json. Or delete the sha256 line while you experiment, and the game skips the check.
  4. Zip the folder again (on a Mac: right-click ▸ Compress; on Windows: right-click ▸ Send to ▸ Compressed folder).
  5. Import it: in the game, open Settings ▸ Rosters ▸ Import a zip. Pick Open the inbox folder and put the zip there, then back out and open Import a zip again: it's in the list. You can also type the zip's path, or an https:// address where it's online (the easy way on a phone, a tablet or an Apple TV).
  6. Play it: in team select, press LT or RT until you reach POND.

When that works, start your own: copy the example, rename the pond folder and its id, and fill in your league. The roster pack and ratings pages say what every field does.

Sharing it

There are two ways to get a roster set to other people:

  • Send the zip. They use Import a zip, just like you did. When you update it, you send a new zip.
  • Put it on the web (GitHub, GitHub Pages or any web server) and give them the address. They use Add a repository once, and Check for updates shows them each new update you post.

Publishing walks through both.

What a roster set can change

You choose The game takes care of
Each team's name, short name (the scoreboard's letters) and colours The home and away jerseys, made from the colours
Each team's logo Showing it in team select, on the scoreboard and on the jersey
Three forward lines, three defence pairs and a starting goalie Line changes, power plays and penalty kills
Each player's name, number, position and shooting hand The jersey's name and number
Each player's height and weight How big they look, how hard they hit, how much net a goalie covers
22 ratings for skaters and 7 for goalies How each player skates, shoots, passes, hits and saves

The game picks a jersey design for each team from its name. Textures for uniforms, helmets, masks, sticks and faces are coming with the new player models.

Whose rosters?

The game doesn't host roster repositories, check them or vouch for them. It only reads the address you give it. Before anyone's first import, it shows a notice saying so. If you share a roster set, make sure it's yours to share.

In this guide

  • The roster pack: teams, colours, lines and players.
  • Ratings: every rating, and what it does on the ice.
  • Logos and art: each team's logo, and the textures that are coming.
  • Repositories: the two index files, dates and history, and zips.
  • Publishing: sharing a zip, GitHub, GitHub Pages, your own server, and private servers.
  • Examples: files to download and copy from.
  • Checker: checks your files the way the game does, and works out checksums.
  • Troubleshooting: what the game's messages mean.