SuperIslandSuperIsland
Extension SDK

settings.json

Declarative settings UI schema for extensions. Generates a native SwiftUI settings panel automatically.

settings.json

If your extension has user-configurable options, add a settings.json file. SuperIsland generates a native SwiftUI settings panel from this schema — no code needed.

Schema

{
  "sections": [
    {
      "title": "Section Title",
      "fields": [
        {
          "type": "toggle",
          "key": "settingKey",
          "label": "Display Label",
          "default": true
        }
      ]
    }
  ]
}

Field types

toggle

Boolean on/off switch.

{
  "type": "toggle",
  "key": "showSeconds",
  "label": "Show seconds",
  "default": true
}

slider

Numeric value within a range.

{
  "type": "slider",
  "key": "volume",
  "label": "Alert volume",
  "default": 0.5,
  "min": 0.0,
  "max": 1.0,
  "step": 0.1
}

stepper

Integer increment/decrement.

{
  "type": "stepper",
  "key": "workMinutes",
  "label": "Work duration (min)",
  "default": 25,
  "min": 1,
  "max": 90,
  "step": 5
}

picker

Dropdown/segmented selector.

{
  "type": "picker",
  "key": "alertSound",
  "label": "Alert sound",
  "default": "bell",
  "options": [
    { "value": "bell", "label": "Bell" },
    { "value": "chime", "label": "Chime" },
    { "value": "none", "label": "None" }
  ]
}

text

Single-line text input.

{
  "type": "text",
  "key": "apiKey",
  "label": "API Key",
  "placeholder": "sk-...",
  "default": ""
}

color

Color picker.

{
  "type": "color",
  "key": "accentColor",
  "label": "Accent color",
  "default": "#a855f7"
}

Reading settings in your extension

// Read a setting value
const workMinutes = DynamicIsland.settings.get("workMinutes") ?? 25;

// Update a setting programmatically
DynamicIsland.settings.set("workMinutes", 30);

Full example — Pomodoro settings

{
  "sections": [
    {
      "title": "Timer",
      "fields": [
        {
          "type": "stepper",
          "key": "workMinutes",
          "label": "Work duration",
          "default": 25,
          "min": 1,
          "max": 60,
          "step": 5
        },
        {
          "type": "stepper",
          "key": "breakMinutes",
          "label": "Break duration",
          "default": 5,
          "min": 1,
          "max": 30,
          "step": 1
        }
      ]
    },
    {
      "title": "Alerts",
      "fields": [
        {
          "type": "toggle",
          "key": "notifyOnComplete",
          "label": "Notify when complete",
          "default": true
        },
        {
          "type": "picker",
          "key": "alertSound",
          "label": "Alert sound",
          "default": "bell",
          "options": [
            { "value": "bell", "label": "Bell" },
            { "value": "chime", "label": "Chime" },
            { "value": "none", "label": "None" }
          ]
        }
      ]
    }
  ]
}

On this page