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
| API | Purpose | Status |
|---|---|---|
List | Search, sections, items, accessories, empty view, dropdown, pagination | Preview |
Detail | Markdown content, metadata, links, tags | Preview |
Form | Fields, dropdowns, tag picker, date picker, storeValue | Preview |
ActionPanel / Action | Actions, copy, paste, open browser, submit form, push view | Preview |
MenuBarExtra | Menu bar surfaces and status | Preview |

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
| API | Semantics | Status |
|---|---|---|
LocalStorage.getItem | Read an extension-scoped persisted value | Preview |
LocalStorage.setItem | Write an extension-scoped persisted value | Preview |
LocalStorage.removeItem | Remove an extension-scoped value | Preview |
LocalStorage.clear | Clear extension-scoped storage | Preview |
LocalStorage.allItems | Read all extension-scoped values | Preview |
Cache | Synchronous namespaced cache with subscriptions and capacity trimming | Preview |
Feedback and shell
| API | Purpose | Status |
|---|---|---|
showToast / Toast | Success, failure, loading, and action feedback | Preview |
showHUD | Short success feedback | Preview |
Clipboard / writeClipboardText | Clipboard access | Preview |
open / openExternal | Open URLs and external resources | Preview |
closeMainWindow | Hide or close the main window | Preview |
Navigation and launch
| API | Purpose | Status |
|---|---|---|
useNavigation() | push / pop / openCommand / hideLauncher | Preview |
launchCommand() | Launch another command | Preview |
LaunchProps / LaunchType | Command launch arguments and launch type | Preview |
useCommandSeedQuery() | Read the launcher seed query | Preview |
OAuth
| API | Status |
|---|---|
OAuth.PKCEClient constructor | Preview |
OAuth.RedirectMethod.Web | Preview |
authorizationRequest() | Planned |
authorize() | Planned |
setTokens() / getTokens() / removeTokens() | Planned |
Utilities
@openwork/extension-utils provides connected-account helpers for token-backed integrations:
| API | Semantics |
|---|---|
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 |