Everything you need to use the app and to import / export your data. The app runs entirely on your device β there is no account and nothing is uploaded unless you use Cloud Sync.
| Tab | What it does |
|---|---|
| π¦ My Games | Import / add games, edit box dimensions, mark expansions, backup & cloud sync. |
| ποΈ Shelves | Define shelf / storage dimensions. Presets for IKEA Kallax, Billy, Detolf. |
| π Packing Results | 3D bin-packs your collection across all shelves; shows an engineering 3-view and a visual map. |
| π Moving House | Packs the whole collection into cardboard moving boxes; estimates how many boxes you need. |
| βοΈ Layout Editor | Pin specific games to a shelf and auto-fill the rest. |
| π My Layout | Save any packing result as a named layout; move games between containers. |
BGG now requires you to be logged in to use its API. So:
Use the "Add game" form to type a name and dimensions directly.
Packing needs each game's box size (width Γ depth Γ height, stored in mm). Ways to get them:
bgg.xml export that has <width>/<depth>/<height> on each game) β import via the XML tab; sizes come in with the names.One JSON file holds everything β games, dimensions, shelves and saved layouts.
shelf-calculator-backup.json.Move your data between your PC and phone without files. In My Games β β Cloud sync:
What πΎ Backup writes and π Restore reads:
{
"v": 2,
"games": [
{ "id": 1, "bggId": "13", "name": "Catan",
"w": 295, "d": 295, "h": 75, "qty": 1,
"isExpansion": false, "inBaseBox": false }
],
"shelves": [ { "id": 1, "name": "Kallax", "w": 330, "d": 380, "h": 330 } ],
"nextId": 2,
"layouts": [ /* saved layouts */ ]
}
Dimensions w/d/h are in millimetres. bggId is used to match games on a "Dimensions only" import.
The importer is flexible: it auto-detects the delimiter (, ; or tab), the unit (inches / cm / mm), and these column names:
| Meaning | Accepted column headers |
|---|---|
| BGG id | bggid, objectid, id |
| Name | name, objectname, title |
| Width | w, w_mm, width |
| Depth | d, depth, thickness |
| Height | h, height, length |
| Optional | qty, isExpansion, inBaseBox |
Example:
bggId,name,w_mm,d_mm,h_mm 13,Catan,295,295,75 9209,Ticket to Ride,295,295,70
Both BGG shapes are accepted on the XML tab:
<item objectid="β¦"><name>Catan</name>β¦</item>. Dimensions only if the export includes <width>/<depth>/<height> (in inches).<item id="β¦"><name type="primary" value="Catan"/>β¦<versions>β¦<width value="β¦"/>β¦</versions></item>.The data is split across two endpoints (replace YOU with your username; the app fills these in for you in the XML tab and β Settings):
https://boardgamegeek.com/xmlapi2/collection?username=YOU&own=1https://boardgamegeek.com/xmlapi2/collection?username=YOU&own=1&subtype=boardgameexpansion&stats=1 to a collection URL β adds <averageweight>, player counts, rating. (Note: BGG "weight" = rules complexity 1β5, not physical mass.)https://boardgamegeek.com/xmlapi2/thing?id=13,926,β¦&versions=1 β <width>/<length>/<depth> in inches. The app fetches these automatically after an import (π Fetch from BGG / auto), mapping widthβW, depthβD, lengthβH, preferring your owned edition.localStorage for this site. It's per-device and per-browser β Chrome and Firefox don't share, and phone and PC don't share, unless you use Backup files or Cloud sync.%APPDATA%\shelf-calculator\.Since late 2025 BGG locked its XML API behind authentication (the "XML API registration" change):
In a desktop browser logged in to boardgamegeek.com: press F12 β Application β Cookies β https://boardgamegeek.com. Copy the values of bggusername, bggpassword and SessionID and paste them into the app as:
bggusername=YOU; bggpassword=...; SessionID=...
Board Game Shelf Calculator β local-first, no account required.