Skip to content

Layouts

Island Pulse renders four distinct layouts on the Lock Screen and Dynamic Island. Pick the one that matches the shape of your data. All layouts share the same branding fields (icon, accentColor) and the same status field.


Default

The all-purpose layout. Use it for any text-based status update where a single message is enough.

9:41
deploy-api
Island Pulse now
Deployed to production in 38s
deploy-api SUCCESS
Default layout, Lock Screen card

Fields

FieldRequiredNotes
messageYesMain body text. Wraps to two lines on the Lock Screen.
statusNorunning (default), success, or failed. Controls the status indicator color.
metricNoShort value (up to 6 chars, e.g. Step 2/3, 98%) shown in the Dynamic Island compact view. Without it the island shows a status marker instead.
iconNoSF Symbol name, e.g. bolt.fill, checkmark.circle.
accentColorNoHex code (#00FFDD) or CSS color name (green).
{
"job_id": "deploy-api",
"layout": "default",
"message": "Deployed to production in 38s",
"status": "success",
"icon": "checkmark.circle.fill",
"accentColor": "#00FF88"
}

Progress

Best for long-running tasks where showing progress matters, deployments, data migrations, backup jobs.

9:41
Database Migration
Island Pulse now
Database Migration Step 2/5

Migrating users table…

Progress layout, showing 40% completion

Fields

FieldMax (no scale)Max (with scale)Notes
metric10 chars15 charsShort status such as 42% or Step 2/5. Shown in the Dynamic Island (compact and expanded).
message40 chars80 charsFooter text below the progress bar.
progress--Float 0.0–1.0. Pass 0–100 and it auto-normalizes.

The card title comes from title. Keep job_id stable for routing, and use a human-readable title for display.

{
"job_id": "database-migration",
"title": "Database Migration",
"layout": "progress",
"message": "Migrating users table…",
"metric": "Step 2/5",
"progress": 0.4,
"status": "running",
"accentColor": "#00CFFF"
}

Send a final update with progress: 1.0 and status: "success" to show the bar full and the job complete:

{
"job_id": "database-migration",
"title": "Database Migration",
"layout": "progress",
"message": "Migration complete. 1.2M rows processed.",
"metric": "Done",
"progress": 1.0,
"status": "success"
}

Score

A hero-metric layout. Use it when one number is the whole story, a price, a count, a load percentage.

9:41
$48,210
Island Pulse now
+4.2%
$48,210

Monthly Recurring Revenue

Score layout, hero metric with trend badge

Fields

FieldMax (no scale)Max (with scale)Notes
metric8 chars16 charsLarge hero text. Automatically shrinks if over 12 chars.
message20 chars45 charsDescriptive label. Wraps to two lines.
secondaryMetric10 chars10 charsSmall badge in the top-right corner, e.g. +12%, ▲ 3.
{
"job_id": "mrr-live",
"title": "MRR Live",
"layout": "score",
"metric": "$48,210",
"message": "Monthly Recurring Revenue",
"secondaryMetric": "+4.2%",
"status": "running",
"accentColor": "#00FF88"
}

Another common use, server load or error rate:

{
"job_id": "p99-latency",
"title": "API Latency",
"layout": "score",
"metric": "142ms",
"message": "p99 response time",
"secondaryMetric": "HEALTHY",
"status": "running",
"icon": "server.rack"
}

Sports

A dual-metric layout for any head-to-head comparison, scores, A/B splits, team dashboards.

9:41
3 – 1
Island Pulse now
3 Home
FINAL
1 Away
Sports layout, dual score with status badge

Fields

FieldMax (no scale)Max (with scale)Notes
metricA3 chars6 charsLeft large score.
metricB3 chars6 charsRight large score.
subA6 chars10 charsLabel under metricA, e.g. team name.
subB6 chars10 charsLabel under metricB.
secondaryMetric8 chars12 charsCenter badge, e.g. FINAL, Q3, 90+4'.
{
"job_id": "game-score",
"title": "Game Score",
"layout": "sports",
"metricA": "3",
"metricB": "1",
"subA": "Home",
"subB": "Away",
"secondaryMetric": "FINAL",
"status": "success"
}

Works equally well for non-sports comparisons like A/B test results or split revenue metrics:

{
"job_id": "ab-test",
"title": "A/B Test",
"layout": "sports",
"metricA": "4.2%",
"metricB": "3.8%",
"subA": "Variant A",
"subB": "Variant B",
"secondaryMetric": "LIVE",
"status": "running",
"accentColor": "#AA88FF"
}

What shows where

Every layout renders in three places: the Lock Screen card, the Dynamic Island compact pill (what you always see), and the expanded island (long press).

LayoutLock ScreenIsland, compact (left / right)Island, expanded
DefaultIcon, title, status text, messageIcon / metric, or a status marker (● running, OK, FAIL)Icon, title, metric (or a DONE / FAILED pill once finished), message (up to 3 lines)
ProgressIcon, title, progress bar, messageProgress ring / metric (or the percent from progress)Title, metric, progress bar, message
ScoreIcon, title, secondaryMetric badge, large metric, messageIcon / metricLarge metric, title, secondaryMetric badge, message
SportsIcon, title, metricA vs metricB with subA / subB, secondaryMetric badge in the middle, messagemetricA / metricBmetricA and metricB with subA / subB, secondaryMetric badge in the middle, message
  • Island columns need app version 1.3 or later. Earlier versions show only the icon and metric in the compact island (a placeholder when there is no metric), and the expanded view shows the title, status and message. The Lock Screen cards are unchanged since 1.0.
  • The icon turns green on success and red on failed. Your accentColor applies while the job is running.
  • Compact slots fit about 4–6 characters. Longer values shrink to fit (for example 287/10).
  • status is written out on the Lock Screen only for the Default layout. Everywhere else it shows as colour and, once finished, a marker.
  • If a layout’s fields are missing (a sports update without metricA and metricB), the island falls back to the Default behaviour.
  • Every update replaces the whole state, so send layout and the score fields on every update, not only the first.

Branding fields (all layouts)

These fields work on every layout:

FieldNotes
iconAny SF Symbol name. Browse the full set in Apple’s SF Symbols app.
accentColorHex (#FF5500) or CSS color name (orange, green, red). Tints the icon and accent elements.

If you omit accentColor, the app falls back to the user’s chosen default accent in Island Pulse settings.