Jingle Developers

API reference

The SDK for building command views, reading settings, accessing connected accounts, and invoking host capabilities.

Jingle Extension API gives commands UI components, host capabilities, and runtime utilities. During Developer Preview, the package name is @openwork/extension-api; public release naming will be unified with the platform release cadence.

UI components

APIPurposeStatus
ListSearch, sections, items, accessories, empty view, dropdown, paginationPreview
DetailMarkdown content, metadata, links, tagsPreview
FormFields, dropdowns, tag picker, date picker, storeValuePreview
ActionPanel / ActionActions, copy, paste, open browser, submit form, push viewPreview
MenuBarExtraMenu bar surfaces and statusPreview
Reference visual for a command detail view
The UI SDK lets extension authors describe information architecture and actions instead of rebuilding windows, list selection, and keyboard behavior.

Preferences

getPreferenceValues()

Reads extension-level and command-level settings resolved for the current launch context.

const preferences = getPreferenceValues<{
  apiBaseUrl: string
  open_in: { name?: string; bundleId?: string; path?: string }
}>()

getConnectionSecret(name)

Reads a host-managed connection secret. Extensions request the secret names they need; the platform owns where credentials are stored.

const token = getConnectionSecret("accessToken")

openExtensionPreferences() / openCommandPreferences()

Opens the extension or command settings screen. When a command needs configuration or a connected account, it can hand off to platform settings instead of implementing its own setup UI.

import { Action, ActionPanel, Detail, openExtensionPreferences } from "@openwork/extension-api"

export default function Command() {
  return (
    <Detail
      markdown="Connect this extension before running the command."
      actions={
        <ActionPanel>
          <Action title="Open Extension Settings" onAction={openExtensionPreferences} />
        </ActionPanel>
      }
    />
  )
}

Storage

APISemanticsStatus
LocalStorage.getItemRead an extension-scoped persisted valuePreview
LocalStorage.setItemWrite an extension-scoped persisted valuePreview
LocalStorage.removeItemRemove an extension-scoped valuePreview
LocalStorage.clearClear extension-scoped storagePreview
LocalStorage.allItemsRead all extension-scoped valuesPreview
CacheSynchronous namespaced cache with subscriptions and capacity trimmingPreview

Feedback and shell

APIPurposeStatus
showToast / ToastSuccess, failure, loading, and action feedbackPreview
showHUDShort success feedbackPreview
Clipboard / writeClipboardTextClipboard accessPreview
open / openExternalOpen URLs and external resourcesPreview
closeMainWindowHide or close the main windowPreview
APIPurposeStatus
useNavigation()push / pop / openCommand / hideLauncherPreview
launchCommand()Launch another commandPreview
LaunchProps / LaunchTypeCommand launch arguments and launch typePreview
useCommandSeedQuery()Read the launcher seed queryPreview

OAuth

APIStatus
OAuth.PKCEClient constructorPreview
OAuth.RedirectMethod.WebPreview
authorizationRequest()Planned
authorize()Planned
setTokens() / getTokens() / removeTokens()Planned

Utilities

@openwork/extension-utils provides connected-account helpers for token-backed integrations:

APISemantics
OAuthService.getAccessToken()Reads accessToken from a host-managed connection secret
OAuthService.authorize()Reads the current connection token; see OAuth for browser authorization
withAccessToken(service)Shows a connection empty view for React commands; throws for non-UI functions
getAccessToken(service)Reads the current connection secret or service token