Mobility packs
A mobility pack adds a list of stretching / mobility drills to the Mobility block’s drill catalogue. Like exercise packs it’s pure JSON — no code, no sandbox — so it installs regardless of Restricted Mode.
The pack file
{
"formatVersion": 1,
"pluginId": "com.you.hip-pack",
"drills": [
{
"name": "Couch Stretch",
"area": "hip-flexors",
"defaultMetric": "hold",
"perSide": true,
"cues": ["Rear shin against the wall", "Squeeze the glute"]
},
{
"name": "Banded Hip Raise",
"area": "hip-flexors",
"defaultMetric": "reps",
"perSide": true,
"notes": "Active end-range hip flexion."
}
]
} areamust be from:neck,shoulders,t-spine,lower-back,wrists,hips,hip-flexors,glutes,hamstrings,quads,adductors,calves,ankles,full-body.defaultMetric(optional, defaulthold):holdorreps— the metric the block starts with when the user picks this drill.perSide(optional, defaultfalse): whether the drill is logged left / right separately.cues(optional): up to 6 short coaching lines.- Max 500 drills. In-pack duplicate names are dropped.
The manifest
{
"id": "com.you.hip-pack",
"family": "mobility-pack",
"name": "Hip Pack",
"description": "Hip prehab drills.",
"version": "1.0.0",
"author": "You",
"integrity": "sha256-…",
"distribution": {
"origin": "url",
"manifestUrl": "plugins/hip-pack/manifest.json",
"bundleUrl": "plugins/hip-pack/drills.json"
},
"capabilities": [
{ "family": "mobility-pack", "mobilityPackId": "com.you.hip-pack" }
]
} capabilities[0].mobilityPackId must equal the manifest id.
What happens on install
Pack drills appear in the Mobility block’s drill picker with namespaced ids
(pack:<id>:<slug>). A built-in drill with the same name wins. Disabling or
uninstalling the pack removes them cleanly. Pack contents are device-local — not
synced. Sample: static/sample-plugins/hip-rehab-pack.
Next: publishing.