Skip to content

Widgets · ALPHA

Custom widgets

Put the values you care about in your Dock. Connect JSON data, choose what to show, and build a popout for the details.

ALPHA: requires Dockset 0.2.7 or later. Features and templates may change.

On this page

Create your widget

Open Add Widget → Create Widget in the Dock manager.

  1. Data: choose a starter from Use Template. Connect an API or JSON file, or paste sample JSON to try a design.
  2. Design: choose the Dock’s main value and add supporting blocks to the Popout. Select a block to edit its fields, label, icon, and format.
  3. Review: check both previews, then Save. Use Save Draft to connect a source later.

Sample JSON previews as you type. It stays static until you connect a changing source.

Example templates

  1. Download a template and choose ••• → Import Template….
  2. In Data, paste its URL, set authentication to None, and choose the refresh interval below.
  3. Click Connect and Preview. For templates with a transform, review the code and choose Enable and Preview.
  4. Check the design and save.

These examples require no API keys. Public rate limits apply.

GitHub status

A live status with a green check, orange warning, or red X. The popout lists services and active incidents.

Download template

https://www.githubstatus.com/api/v2/summary.json

Refresh: every 5 minutes · Transform: included

GitHub repository stars

Stars in the Dock; forks and open issues + PRs in the popout.

Download template

https://api.github.com/repos/swiftlang/swift

Refresh: every 15 minutes · Transform: none

  • Replace swiftlang/swift to follow another repository; update its label in Design.
Electricity prices

Oslo’s current spot price in kr, with today’s prices in a chart.

Download template

https://www.hvakosterstrommen.no/api/v1/prices/{date:yyyy}/{date:MM}-{date:dd}_NO1.json

Refresh: every hour · Transform: included

  • Date placeholders use your Mac’s time zone; this feed needs the Oslo date.
  • Prices exclude VAT, grid fees and supplier markups, before electricity support. Keep the provider attribution.
Bitcoin price movement

A BTC sparkline with the dollar change; closing price and percentage change in the popout.

Download template

https://api.exchange.coinbase.com/products/BTC-USD/candles?granularity=3600

Refresh: every hour · Transform: included

  • Shows up to seven days of hourly candles. The Dock value is the change from the first close, not the current price. The latest candle may still be forming.
ISS altitude

The space station’s altitude in the Dock; speed and coordinates in the popout.

Download template

https://api.wheretheiss.at/v1/satellites/25544

Refresh: every minute · Transform: included

YouTube subscribers

Your public subscriber count with a red play icon.

Download template

SocialCounts is an unofficial third-party API, used here as an example and not endorsed by Dockset. Its accuracy and availability are not guaranteed.

https://api.socialcounts.org/youtube-live-subscriber-count/YOUR_CHANNEL_ID

Refresh: every hour · Transform: none

  • Replace YOUR_CHANNEL_ID before connecting. Update @yourhandle in Design → Popout.
  • Uses the API’s public count, which may be rounded, rather than the provider’s separate estimate.
X followers

A public follower count, with account and provider details in the popout.

Download template

FxTwitter is an unofficial third-party API, used here as an example and not endorsed by Dockset. Its accuracy and availability are not guaranteed.

https://api.fxtwitter.com/2/profile/YOUR_HANDLE

Refresh: every hour · Transform: none

  • Replace YOUR_HANDLE with a public handle without the @. Update @yourhandle in Design → Popout.

Format numbers and text

Select a component and open Value formatting. Each block has its own format: use a compact count in the Dock and a full number in the popout.

Examples of value formatting
FormatInputResult
Compact number · 0 decimals16,00716K
Compact number · 1 decimal70,48570.5K
Compact number · 1 decimal1,200,0001.2M
Number · 0 decimals · unit $−3,316−$3,316
Percent · 1 decimal0.12512.5%
  • Compact number: K, M, B, T; one decimal by default, with trailing zeros hidden.
  • Numbers: choose 0–6 decimals and a unit. Currency symbols appear after the minus sign. Separators follow your Mac’s locale; the table uses English.
  • Percent: expects a fraction, so 0.75 becomes 75%.
  • Date / Time: accepts ISO 8601 or Unix seconds and uses your Mac’s time zone.
  • Automatic: keeps plain text. In lists, formatting applies to subtitles.

Icons and colors

In Design → Icon, enable Show icon and pick a symbol or enter an SF Symbol name, such as star. Image URLs and arbitrary brand names are not supported.

  • Filled: uses a filled variant when available.
  • Icon color: choose from Dockset’s shared palette. Graphs and progress bars have independent colors from the same palette.
  • From data: bind the symbol and color to fields in your response. Color values use palette names such as green, orange, and red.

List bindings resolve within each row. Missing colors fall back to the fixed color, then Automatic. Size and spacing controls are under Advanced.

Vertical Docks

Side Docks stack the icon above the value and label. Keep labels short, use compact numbers, and enable wrapping for status text. Put supporting details in the popout.

Text and field bindings

A Metric can show text as well as numbers. Choose Metric and paste this deployment response into sample data:

Sample JSON
{
  "release": "v2.4.0",
  "status": "Operational",
  "summary": "The latest release is live in production.",
  "checks": {
    "passed": 18,
    "total": 20
  },
  "changes": [
    {
      "title": "Faster search",
      "detail": "Results load as you type."
    },
    {
      "title": "New exports",
      "detail": "Download reports as CSV."
    }
  ]
}

Download the deployment sample JSON.

Dock mapping for the deployment example
ComponentSettingField or value
Dock · MetricLabelRelease
Dock · MetricValue → From datarelease
Dock · MetricValue formatAutomatic

The Dock shows v2.4.0 above Release. Keep text on Automatic; use a Text block for longer sentences.

Build a popout

In Design → Popout, add these blocks using the same deployment response:

Popout mapping for the deployment example
ComponentSettingField or value
StatusLabel / Value → From dataService / status
TextLabel / Value → From dataLatest release / summary
ProgressLabel / Value / MaximumChecks / checks.passed / checks.total
ListLabel / Items → From dataWhat changed / changes
ListEach item → Title / Subtitletitle / detail

Use From data for these mappings. List paths are relative to each item: use title, not changes[0].title.

  • Fixed value: text or numbers that never change.
  • From Configure: a user-editable value. Add text, number, or toggle inputs in Design → Configure first.
  • Advanced: text size, wrapping, layout, and spacing.

Time-series graphs

Choose the Graph template to show a visitor trend as a Dock sparkline and a larger chart in the popout. Paste this response to preview it:

Sample JSON
{
  "history": [
    { "date": "2026-10-01", "value": 42 },
    { "date": "2026-10-02", "value": 58 },
    { "date": "2026-10-03", "value": 51 },
    { "date": "2026-10-04", "value": 73 }
  ]
}

Download the visitor-history sample JSON.

Use these mappings for both the Dock and popout Graph components
ComponentSettingField or value
GraphPoints → From datahistory
GraphDatedate
GraphValuevalue
GraphLabel / Value formatVisitors / Number
A compact visitor sparkline and a larger popout chart showing four daily readings from 42 to 73.
Native rendering of the sample data: a Dock sparkline above the popout chart.
  • Dates: ISO 8601, date-only strings, or Unix seconds/milliseconds. Values must be numeric.
  • Points: sorted by date; duplicate dates keep the last value. Empty arrays show an empty state; invalid points show an error.
  • History: up to 512 points. Your source must supply them; Dockset does not accumulate readings. Use a transform to aggregate longer histories.

Hover over a chart to inspect a date and value.

Connect an API or file

Choose Source → API endpoint, paste the URL, and click Connect and Preview.

Authentication
OptionWhat to enter
NoneFor public feeds.
Bearer tokenThe token only. Dockset adds Bearer.
API keyThe key and header name required by your API, such as X-API-Key.

Credentials stay in your Mac’s Keychain. OAuth sign-in and automatic token renewal are not supported.

  • Refresh: manual, or every 1, 5, 15, or 60 minutes while the widget’s Dock or editor is active.
  • Local scripts: choose a JSON file that your script updates.
  • Requests: GET only, over HTTPS or HTTP on localhost. No redirects, request bodies, or write actions. Responses are limited to 1 MB.
  • Errors: the last successful data remains visible. Check the URL, authentication, and rate limit, then use Retry.

Dynamic URL values

Use Insert variable beside the endpoint to add the current date or a Configure field. For example:

https://example.com/metrics/{date:yyyy-MM-dd}?project={input:Project}

Replace the example URL with your endpoint. Add Project in Design → Configure. Dates use your Mac’s time zone; input values are URL-encoded. Variables resolve on each request, with the host fixed. Check the result in Request URL.

Reshape a response

Map nested fields directly, such as data.release, or use Data → Transform to simplify a response:

function transform(response) {
  return {
    release: response.version,
    status: response.healthy ? "Operational" : "Needs attention"
  };
}

Click Enable and Preview, then bind fields from the returned JSON.

  • Context: transform(response, { now, timeZone, inputs }) provides the current time, Mac time zone, and Configure values.
  • Updates: reruns on new data and each minute while active, using cached data without another request. It does not collect history.
  • Access: runs locally in a sandbox without network, file, or credential access. Edited or imported code must be enabled again.

Share and troubleshoot

Use ••• → Copy Template or Export Template…. Import with Import Template… or Paste Template.

  • Shared: layout text, bindings, Configure field definitions, and transform code.
  • Stays local: API URLs, authentication, credentials, response data, and Configure values.

Check layout text and code for private information before sharing.

Troubleshooting

  • No value at this path: load a fresh preview and check the field picker. Nested paths use checks.passed; array items use items[0].name.
  • List or graph is empty: bind Items or Points to an array, then map fields relative to one item.
  • Graph dates or values are invalid: check the Date and Value fields. Convert custom dates or aggregate large arrays with a transform.
  • Connection failed: check the URL, authentication, and rate limit before retrying.