Introduction
Learn how Jingle Developers works across extension packages, runtime APIs, connected accounts, and agent tools.
Jingle Developers helps you build extensions for desktop workflows. Extensions can provide command views, connected accounts, menu bar surfaces, and agent-callable tools while Jingle owns runtime boundaries, user settings, and credential safety.


Core concepts
| Concept | Role | Status |
|---|---|---|
| Extension package | Distribution unit for manifest, runtime, main service, assets, and tool definitions | Preview |
| Runtime SDK | React components for lists, details, forms, action panels, menu bar surfaces, and feedback | Preview |
| Connected accounts | Host-managed account connections, credential resolution, connection status, and settings handoff | Preview |
| OAuth / PKCE | Platform-owned authorization, callback, token exchange, refresh, and revoke | Planned |
| Agent tools | Extension capabilities agents can call within user-visible approval boundaries | Preview |
Platform scope
Jingle Developers focuses on the surfaces extension authors need: extension packages, runtime APIs, connected accounts, OAuth, agent tools, and distribution. Launcher, file search, snippets, clipboard history, window management, team sync, and security governance belong to the product platform roadmap, with developer-facing boundaries documented as they become available.
See the platform roadmap for phased availability across each capability area.
Recommended path
- Start with Extension model to understand packages, manifests, runtime code, and main services.
- Read API reference for the runtime SDK components and host capabilities.
- Read Platform roadmap for phased availability across platform capabilities.
- Use Connections when your extension needs GitHub, Notion, or another provider.
- Use OAuth when designing public authorization flows with PKCE and callback URLs.
- Use Agent tools when agents should call extension capabilities.
A minimal command
Extension commands use React to describe desktop UI and rely on the Jingle host for actions:
import { Action, ActionPanel, List, showToast } from "@openwork/extension-api"
export default function Command() {
return (
<List>
<List.Item
title="Run workflow"
actions={
<ActionPanel>
<Action title="Confirm" onAction={() => showToast({ title: "Done" })} />
</ActionPanel>
}
/>
</List>
)
}Command code does not need to manage windows, settings screens, or credential storage. The extension declares what it needs, and Jingle connects runtime UI, account state, and user actions.