Developer platform

Add OwnUX to your product without moving your business logic. A typed SDK, one manifest and clear checks.

SDK: in development · Spec: v0.1 draft · CLI: preview. Packages stay private until launch.

acme-projects / src/ownux12 TODO · 1 LATER
import { defineManifest } from "@satin/ownux/integration";
// …
export const manifest = defineManifest({
// TODO(ownux): confirm the ID (lowercase letters, digits, hyphens) and set your product's version.
app: { id: "acme-projects", version: "0.1.0" },
actions: {
"task.list_assigned": READ,
"task.search": READ,
"task.get": READ,
"task.set_due_date": { ...WRITE, input: { task_ref: "task.ref", due_date: "date" } },
// …
},
// TODO(ownux): add every other screen OwnUX must never render, such as admin or payments.
locked: ["billing", "security", "consent"],
});
$ npx ownux init src/ownux --app acme-projects
✓ Wrote 5 starter files to src/ownux: AGENTS.md, manifest.ts, integration.ts, ownux.config.ts, view.tsx
$npx ownux test --config src/ownux/ownux.config.ts

Excerpts of the real starter files. Unfinished steps are marked, and block the check.

Three ways to start. Pick by how much you control. All three read ownux-dna/1.

01

No code

When the private beta opens soon, install Satin for People, the Chrome extension, and set your OwnUX once. It will work in supported apps without their makers' help. Planned for the beta: if your product adopts the SDK, the extension will see the ownux-enabled marker and stand aside.

<meta name="ownux-enabled" content="ownux/1; sdk=0.1.0">

In development · Jira Cloud first, Linear next

Satin for People
02

A ready-made adapter

Satin builds adapters for popular work apps: declarative mappings to each app's official API, bundled in the extension and never downloaded at runtime. Each runs a health probe on start, and a signed kill switch can turn one off.

adapter → official API → verified read-back

Jira Cloud first · Linear next · Asana a possible third

Tell us which app you need
03

Build your own integration

Declare your capabilities, connect them to your API with createIntegration, render with your own components, and run ownux test until it says Publishable: yes. Your API keeps every permission check.

npx ownux init src/ownux --app <product-id>

SDK alpha · React 19

Start with the manifest

The platform at a glance. Four parts. The quickstart takes about an hour read-only, an afternoon for changes.

@satin/ownux

Alpha

Renders OwnUX surfaces with your own components, through your own API.

view.tsx
<OwnUXProvider
manifest={manifest}
binding={binding} // from createIntegration, memoized per session
components={plainRegistry} // later: your own component for each primitive
appName="Acme Projects"
user={{ id: currentUser.id }}
onNativeView={() => showProductView()}
>
<OwnUXSurface template="task_list" />
<OwnUXSettings />
</OwnUXProvider>
the first framework; a React-free entry holds the manifest and integration
React 19the first framework; a React-free entry holds the manifest and integration
gzipped without React, against a 60 KB budget
52.8 KBgzipped without React, against a 60 KB budget
primitives, each one mapped to your own component
17primitives, each one mapped to your own component
About the OwnUX SDK

For AI coding tools

Written for the assistant in your editor. Every failed check says how to fix it, so the loop converges.

AGENTS.md is complete on its own and indexed by llms.txt. Once the SDK is published, npx ownux init writes starter files with each step marked TODO(ownux). Done means npx ownux test ends with Publishable: yes.

  • Seven rules never to break. First: your API decides permissions.
  • Failed checks print Fix: and carry fix in --json.
  • Agents given only the package passed; 23 rough edges fixed.
How ownux test works
  1. Run
  2. Fix
  3. Edit
  4. Publishable
$ npx ownux test --config src/ownux/ownux.config.ts

Example session. Each failure and fix is worded exactly as ownux test prints it.

Where things stand. Satin is pre-launch. Here is what exists and what is planned.

In developmentOwnUX SDK, @satin/ownux. An alpha runs in the Reference App: verified changes, rollout with a holdout, template pinning, local metering and signed configuration. React only for now.

In developmentownux test v0. Checks L1 Declared and L2 Verified against your test environment, in plain words or JSON.

In developmentReference App. A complete task tracker on the SDK, run locally on ports 5173 and 8787.

PlannedDeveloper portal. Organisations, keys, manifests, conformance status, rollout and invoices.

PlannedL3 Adaptive conformance, DNA Share, and holdout measurement with design partners.

PlannedPublished packages. Everything is private and 0.x today; nothing is published before launch.

SDK size, gzipped, without React
52.8 KBSDK size, gzipped, without ReactBudget: 60 KB, checked on every build
canonical capabilities
6canonical capabilitiesThree reads and three changes, frozen as v1
checked by ownux test v0
L1 + L2checked by ownux test v0L3 Adaptive waits for Beta
verified change round trip
2 sverified change round tripDesign target, p75

Developer questions, answered.

No. OwnUX calls your existing API handlers through createIntegration. Your API keeps every permission check. A change counts as done only when your own get shows the new value.

Bring OwnUX to your product. Start with the free 12-week design partner programme.