The manifest
manifest.json sits at the root of your built package. In the starter it
lives in public/, so Vite copies it into dist/.
{
"id": "com.example.weather", // reverse-DNS, unique, never changes
"name": "Weather", // 1–40 characters
"version": "1.0.0", // MAJOR.MINOR.PATCH (optionally -pre)
"apiVersion": 1, // SDK API version: 1
"minAppVersion": "0.1.0", // optional
"publisher": "Example Inc.", // optional
"description": "Current conditions.",
"icon": "icon.svg", // optional: .svg, .png or .webp in the package
"widget": {
"entry": "index.html", // default index.html
"minSize": { "w": 2, "h": 2 }, // grid cells, 2×2 up to 12×6
"defaultSize": { "w": 4, "h": 2 },
"expanded": true, // has a full-panel view
"pill": true // may set pill claims
},
"permissions": ["network"],
"network": { "domains": ["api.open-meteo.com"] },
"justifications": { "location": "Weather where you are." },
"uses": {}, // services you call: see services.md
"provides": {}, // services you offer: see services.md
"stats": [ // metrics for the Stats view: see sdk.md#stats
{ "id": "pages_read", "label": "Pages read", "unit": "count" }
]
}
Rules
| Field | Rule |
|---|---|
id |
Lowercase reverse-DNS: at least 2 labels of a-z 0-9 -, each ≤ 40 chars, ≤ 100 total. It belongs to you after your first submission. |
version |
Each published version must be newer than the last. |
apiVersion |
1. |
widget.entry |
A relative path to an .html file. Loaded with ?view=tile, ?view=expanded or ?view=service. |
| sizes | Whole cells, from 2×2 up to the 12×6 board. defaultSize ≥ minSize. |
permissions |
Names from Permissions. |
network.domains |
Required with network. Public hostnames such as api.example.com or *.example.com. No IPs, localhost or .local. |
background.budget |
Required with background: "low", "medium" or "high" (see Permissions). |
stats |
Up to 8 metrics. id: 1–32 of a-z 0-9 _, unique. label: 1–40 characters. unit: "count", "minutes" or "seconds". agg (how a day’s values combine): "sum" (default) or "max". retention: days of raw values to keep before they roll up into daily totals, 1–3650 or "forever" (default 30). |
justifications |
Required for every sensitive permission and for background, keyed by permission. Shown to the user when you first ask (for background, on the install sheet). |
Package limits
- At most 5 MB packed, 500 files, 20 MB unpacked.
- Only these file types are served:
html js mjs css json wasm png svg webp woff2 txt md map. - Paths use forward slashes, with no
...
npx @notch-monster/plugin-cli pack dist runs the same checks as the marketplace,
so run it before you submit.