manifest.json
Complete reference for the extension manifest file.
manifest.json
Every extension must have a manifest.json at its root. This file declares the extension's identity, required permissions, and capabilities.
Full schema
{
"id": "com.yourname.extension-name",
"name": "Display Name",
"version": "1.0.0",
"main": "index.js",
"description": "A short description shown in Settings",
"author": "Your Name",
"permissions": ["network", "notifications", "storage", "usage"],
"capabilities": [
"compact",
"expanded",
"fullExpanded",
"minimalCompact",
"backgroundRefresh",
"settings",
"notificationFeed"
],
"refreshInterval": 1.0,
"activationTriggers": ["manual", "timer"]
}Fields
id (required)
A globally unique reverse-domain identifier. Must be lowercase, dots only as separators.
"id": "com.acme.my-extension"name (required)
The display name shown in Settings.
version (required)
Semantic version string.
"version": "1.2.0"main (required)
Entry point filename. Defaults to "index.js".
permissions
Array of runtime capabilities the extension needs. Each permission is enforced at call-time.
| Permission | What it unlocks |
|---|---|
network | DynamicIsland.http.fetch() |
notifications | DynamicIsland.notifications.send() |
storage | DynamicIsland.store.get/set() (always available, permission is advisory) |
usage | DynamicIsland.system.getAIUsage() |
capabilities
Array of island features the extension uses.
| Capability | Description |
|---|---|
compact | Extension renders in compact state |
expanded | Extension renders in expanded state |
fullExpanded | Extension renders in full expanded state |
minimalCompact | Extension renders in leading/trailing indicators |
backgroundRefresh | Extension logic runs on a timer even when not visible |
settings | Extension has a settings.json config UI |
notificationFeed | Extension can post to the notification feed |
refreshInterval
How often (in seconds) the extension's compact() / expanded() renders are called. Minimum: 0.1. Default: 1.0.
"refreshInterval": 15.0Use a long interval (30–60s) for data that doesn't change often. Use 1.0 for real-time displays like timers.
activationTriggers
When the island activates for this extension.
| Trigger | Description |
|---|---|
manual | User activates via Settings or click |
timer | Auto-activates on a schedule |
Minimal example
{
"id": "com.yourname.pomodoro",
"name": "Pomodoro Timer",
"version": "1.0.0",
"main": "index.js",
"permissions": ["notifications", "storage"],
"capabilities": ["compact", "expanded", "backgroundRefresh", "settings"],
"refreshInterval": 1.0,
"activationTriggers": ["manual"]
}