SuperIslandSuperIsland
Extension SDK

Extension SDK

Build custom island modules in JavaScript. No Xcode, no compilation — just a manifest and a JS file.

Extension SDK

SuperIsland has a full JavaScript-based extension API (DPI: Dynamic Island Plugin Interface) that lets anyone build custom modules.

Extensions are plain directories dropped into:

~/Library/Application Support/DynamicIsland/Extensions/

Extension structure

my-extension/
├── manifest.json        # Required — metadata, permissions, capabilities
├── index.js            # Required — extension logic
├── settings.json        # Optional — native settings UI schema
└── assets/             # Optional — SVG icons, images

Quick start

1. Create the directory

mkdir -p ~/Library/Application\ Support/DynamicIsland/Extensions/my-hello
cd ~/Library/Application\ Support/DynamicIsland/Extensions/my-hello

2. Write manifest.json

{
  "id": "com.yourname.hello",
  "name": "Hello World",
  "version": "1.0.0",
  "main": "index.js",
  "permissions": [],
  "capabilities": ["compact", "expanded"],
  "refreshInterval": 5.0
}

3. Write index.js

DynamicIsland.registerModule({
  compact() {
    return View.hstack([
      View.icon("hand.wave.fill", { color: "#a855f7" }),
      View.text("Hello!", { style: "caption" }),
    ]);
  },

  expanded() {
    return View.vstack([
      View.text("Hello, World!", { style: "headline" }),
      View.text("My first SuperIsland extension", { color: "#888" }),
    ], { spacing: 4 });
  },
});

4. Enable it

Open Settings → Extensions, find your extension, and toggle it on.

What can extensions do?

  • Render custom views in all three island states
  • Fetch data from the network (with network permission)
  • Store persistent data per-extension
  • Send notifications to the island feed
  • Control island activation/dismissal
  • Read system data (AI usage, latest notifications)
  • Interact with the mascot companion
  • Play haptic/audio feedback

Next: Manifest ReferenceLifecycleView DSLExamples

On this page