Skip to content

The manifest

Everything Blipbar needs to know about your extension lives under the blipbar key of its package.json. There’s no separate manifest file.

{
"name": "blipbar-stripe",
"version": "1.0.0",
"main": "dist/index.js",
"blipbar": {
"id": "dev.yourname.stripe",
"title": "Stripe",
"description": "Today's revenue, live.",
"icon": "creditcard.fill",
"author": "Your Name",
"categories": ["Finance"],
"interval": "30s",
"triggers": { "webhook": false, "watch": [] },
"preferences": [],
"permissions": { "network": ["api.stripe.com"], "files": [], "exec": [] }
}
}
Field Required Notes
id yes Reverse-DNS (^[a-z0-9-]+(\.[a-z0-9-]+)+$, case-insensitive: dev.yourname.stripe). Stable forever: it’s half of every blip’s id (<extensionId>/<key>) and the folder name under Extensions/. Changing it once people have installed your extension orphans their blips, settings and saved keys.
title yes Shown in Settings, in Edit Layout’s list and on the install sheet.
description no One or two sentences, shown in Settings, in Edit Layout’s list and on the install sheet.
icon no An SF Symbol name (creditcard.fill). Falls back to a default if omitted. Check the name exists in the SF Symbols app: an unrecognized name renders nothing.
author no Shown in Settings and on the install sheet.
categories no An array of strings. The first one groups your extension in Edit Layout’s list (under “Extensions” when there’s none). Match an existing category where one fits: Blipbar’s own extensions use Developer Tools, Finance, Sports, Productivity.
interval no How often the host runs update() on a timer: "30s", "5m", "1h", "1d". Minimum 10s: the host rejects anything faster at load. Omit it if you’re driven entirely by triggers.webhook/triggers.watch instead.
triggers.webhook no true if this extension should receive POST /v1/hooks/<id> bodies as onEvent calls (Webhooks and held responses).
triggers.watch no Paths whose changes deliver an onEvent {type: "file"} call. Every path here must also appear in permissions.files.
preferences no See Preferences.
permissions no See Permissions. Omitted arrays default to empty: no network through fetch, no files, no ctx.exec.
oauth no Services the app signs in to for you, so there’s no key to paste and no sign-in code to write: see Sign-in, run by the app.

The host watches your extension’s whole folder (bundled or in ~/Library/Application Support/Blipbar/Extensions/<id>, which can be a real folder or, as blipkit dev sets up, a symlink to your working copy) and reloads it on any change. That’s the entire hot-reload mechanism, with no separate watch config.