.modpack files

A MODPACK project = one .modpack file: UTF-8 JSON, indented, with a stable field order — readable by eye and diffable in Git, the draw.io spirit. It is the only source of truth.

New, Open, Save

Never a silent loss

The schema

The format is deliberately simple — here it is in full, comments included. Unknown fields are ignored; an invalid field is refused on open with a precise message, without touching the current project. Fields marked "optional" may be omitted.

{
  "version": 1,
  "name": "My project",
  "accentColor": "#3F51B5",         // optional: project accent
  "mode": "free",                   // optional: "free" | "tetris"
  "tetrisEnabled": false,           // optional: offer Tetris mode
  "defaults": {                     // optional: new-sprint defaults
    "sprintName": "Sprint",
    "sprintCapacity": 45
  },
  "unitScale": {
    "name": "T-shirt",              // scale name
    "unitLabel": "pts",             // displayed unit label
    "sizes": [                      // ordered by increasing value
      { "label": "XS", "value": 5 },
      { "label": "S",  "value": 10 },
      { "label": "M",  "value": 20 },
      { "label": "L",  "value": 40 },
      { "label": "XL", "value": 80 }
    ]
  },
  "tasks": [
    {
      "id": "t-001",
      "title": "Map component: workspace setup",
      "scope": "Mapping",       // functional scope (optional)
      "description": "Base map + business layers.", // optional
      "value": 10,                   // estimation in points = cell count
      "color": "#90CAF9",            // optional: block color
      "dependsOn": ["t-000"],        // optional: prerequisite tasks
      "position": { "x": 720, "y": 96 }, // optional: block laid on the board
      "width": 5                     // optional: chosen silhouette on the board
    }
  ],
  "sprints": [
    {
      "id": "s-001",
      "name": "Sprint 1",
      "capacity": 45,                // points = grid cells
      "position": { "x": 96, "y": 48 }, // optional: position on the board
      "dependsOn": ["s-000"],        // optional: prerequisite sprints
      "placements": [
        // anchor: anchor cell; width: width chosen when reshaping —
        // both omitted when automatic.
        { "taskId": "t-001", "anchor": 5, "width": 5 }
      ]
    }
  ]
}

The scale above is a new project's default (t-shirt, XS=5 … XL=80, 45-pt sprints).

Local-first, by design

There is no auto-save and no browser storage: the file is the only source of truth — you keep it, version it and share it however you like. Only interface preferences (theme, language) live on your machine. Nothing goes to a server — see Your data.