SuperIslandSuperIsland
Extension SDK

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.

PermissionWhat it unlocks
networkDynamicIsland.http.fetch()
notificationsDynamicIsland.notifications.send()
storageDynamicIsland.store.get/set() (always available, permission is advisory)
usageDynamicIsland.system.getAIUsage()

capabilities

Array of island features the extension uses.

CapabilityDescription
compactExtension renders in compact state
expandedExtension renders in expanded state
fullExpandedExtension renders in full expanded state
minimalCompactExtension renders in leading/trailing indicators
backgroundRefreshExtension logic runs on a timer even when not visible
settingsExtension has a settings.json config UI
notificationFeedExtension 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.0

Use 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.

TriggerDescription
manualUser activates via Settings or click
timerAuto-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"]
}

On this page