An open, portable extension standard for creative apps. Write an extension once — a brush, a filter, a tool — and it runs in any app that adopts azphalt. Plus a consignment marketplace built on top of it. VSCode's extension marketplace shows us the way.
The pitch in one line: the paint/photo world's extensions are trapped — a Photoshop plugin runs only in Photoshop, a Procreate brush is useless off an iPad, every store is a walled silo. azphalt is the portable format nobody built, and the registry that lets it travel.
- The standard (this repo, MIT) — the
.azppackage format, the SDK, the asset importers, a reference runtime, and the registry. Vendor-neutral by construction. This is the part other apps adopt. - The marketplace (a business, on top) — a hosted consignment storefront on the open standard, the way a store sits on Open VSX. Never a precondition for adopting the standard. It can carry its own name.
Anyone can implement azphalt and run their own store. Ours is just the flagship.
.azp— the package: assets and/or code, a manifest, signing. Importers normalize.abr/.brushset/.kpp/.gbr/.cubeinto.azp, so the catalog seeds itself as people bring brushes they already own.- TypeScript end to end — the language every plugin ecosystem already writes in.
- WASM execution substrate — extensions run on-device inside a native host (QuickJS-in-WASM for JS; raw WASM for hot filters). Deterministic behavior across every host, for free.
- Declarative UI schema, host-rendered — a plugin describes controls; a Kotlin host draws them in Compose, a SwiftUI host draws them natively. No webview tax. This is what keeps it genuinely cross-app.
- The boundary — the SDK exposes only editor extension points: layers, bitmaps, canvas. It never surfaces a host's proprietary engine. That's why it can be open, and why a host keeps its own core behind it.
/spec/ normative, language-neutral (capabilities, package format, manifest, UI schema, repository API)
/packages/ the standard's libraries (see below)
/apps/ storefront-react (production static marketplace UI) · storefront-worker (Cloudflare purchase/repository API) ·
storefront (legacy Next.js reference implementation) · storefront-cmp (native/Compose client) ·
repository-server (reference backend) · marketplace + mock-backend (demo client + template server)
/examples/ sample extensions
/docs/ the docs site + design/adoption guides (ARCHITECTURE · RATIONALE · ADOPTION · GOVERNANCE)
LICENSE MIT
| Package | What it is |
|---|---|
@azphalt/azdk |
The typed surface an extension is written against. |
@azphalt/sdk |
A thin compatibility alias that re-exports @azphalt/azdk (published; note the naming inversion — packages/sdk ships as @azphalt/azdk). |
@azphalt/submit-check |
Internal validator (CI + local) for submissions/ PRs; not published. |
@azphalt/azp |
Read / write / verify / sign .azp containers (Ed25519 + trust store). |
@azphalt/importer-* |
18 format importers that normalize source assets into .azp. Assets: abr (Photoshop brushes) · cube (.cube LUTs) · isf (ISF shaders) · transition (gl-transitions) · gltf (meshes) · hdri · material · motion · image · vector · video · audio · font · palette (.ase / JSON). Models: onnx · tflite · litert · sherpa. |
@azphalt/runtime-reference |
In-process host that proves the capability contract. |
@azphalt/runtime-wasm |
The real sandbox — QuickJS-in-WASM (js) and raw WebAssembly (wasm). |
@azphalt/conformance |
Executable pass/fail battery for code hosts and asset hosts. |
@azphalt/registry |
Verify · index · version · serve · search, the consignment marketplace overlay, and the Stripe Connect charge + onboarding surfaces. |
@azphalt/registry-store-vercel |
Legacy/alternate Neon + Vercel Blob RegistryStore implementation. It remains reusable, but the flagship storefront no longer depends on Vercel. |
@azphalt/repository-client |
Client SDK for the Repository API. |
@azphalt/mcp |
An MCP server exposing .azp verify/inspect/extract to any MCP host. |
create-azphalt |
Scaffolder for a new extension package. |
- Design & reasoning:
docs/ARCHITECTURE.md·docs/RATIONALE.md·docs/GOVERNANCE.md - Adopting azphalt in your app:
docs/ADOPTION.md(runs code) ·docs/ADOPTION_ASSET_HOST.md(assets only) - Normative specs:
spec/— capability model, package format, manifest, UI schema, repository API - Publishing a package:
submissions/README.md— submit a plugin, extension, or asset by pull request - Releasing:
RELEASING.md - Production storefront operations:
docs/OPERATIONS.md
The docs/ tree also builds as a VitePress site (pnpm --filter docs build).
Spec-first, and now substantially built: the SDK, the .azp container with signing and a trust model, a wide importer family, both runtimes (the reference contract and the QuickJS-in-WASM / raw-WASM sandbox), a conformance suite, and the registry with its consignment marketplace and a reference repository backend. The marketplace's paid lane runs end to end — real Stripe Connect split-payout checkout with self-service seller onboarding, signed buy-once entitlements that gate downloads and are recoverable by the buyer, and a zero-fixed-cost production backend on Cloudflare Workers + SQLite Durable Objects. The storefront's signing/session keys self-provision into the Durable Object; Stripe credentials remain Cloudflare secrets.
The store's catalog is git, not a database: apps/storefront/registry/sources.json pins every extension to one commit, the built .azp bytes are committed alongside it, and every production deployment exports that registry into the static catalog served by the Cloudflare storefront worker. Changing what the store serves therefore takes a merged PR — there is no runtime write path. The deployment is not considered healthy until the centralized workflow verifies both the generated catalog and the live /packages endpoint, including known app-scoped Aive workflow/role packages. It currently carries 120 packages — 109 extensions plus nine app packs and two header packages.
The first conforming native hosts are Graffux (paint / AR) and Guillotine (video / audio, temporal), which adopt azphalt across their own engine boundaries. See docs/ARCHITECTURE.md for the design and its reasoning.
Azphalt's portable extension architecture is designed to power the next generation of creative tools. Among the future projects planned to adopt the standard is a viable alternative to Figma—a fully-featured design tool that uses azphalt natively for its plugin and extension ecosystem.
MIT. See LICENSE.