For developers
The Design API
The theme catalog is open JSON. A theme is a set of CSS custom properties every OpenVibe site reads; Network keeps which one each person uses.
The SDK, the files and the versions
openvibe-sdk is the supported client for this platform: the server client, the browser client, their ES modules and their TypeScript declarations. It ships from the OpenVibers/OpenVibe.SDK repository by tag, so a service pins a version rather than floating on a branch.
Add the pin to package.json, then install:
{ "dependencies": {
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.161.0"
} }index.js- The server client: auth, accounts, the async PostgreSQL data layer, events, media, AI runs and tools.
browser.js- The browser client, with the same subpath modules where the browser has them.
esm/*.mjs,types/*.d.ts- The ES module entry points and the TypeScript declarations, one pair per subpath export.
openvibe-contracts- v0.419.0, pinned by this site.
openvibe-sdk- v0.161.0, pinned by this site.
openvibe-shared- v4.235.0, pinned by this site.
openvibe-publishing- v1.7.0, pinned by this site.
The deployed release and its file hashes are at /release.json; the whole HTTP API is described by /openapi.json; an AI assistant can call it through the MCP server at POST /mcp.
Endpoints
POST /api/v1/designs- Create three variants with {prompt, kind, themeId?, who?}: Claude Opus 5.5 first by default, or who: "compare" for three providers; guests receive a secret edit link.
GET /api/v1/designs/:id- Poll generation status, read each frame, the pick and the version list; guests send X-Design-Key.
POST /api/v1/designs/:id/theme- Change the token theme with {themeId}.
POST /api/v1/designs/:id/pick- Choose the working frame with {variantIndex}; the pick is recorded as one Arena vote.
POST /api/v1/designs/:id/edit- Chat edit the working frame with {instruction}; one paid AI run and a small per-design budget.
POST /api/v1/designs/:id/click- Apply {path, text?, color?, spacing?, align?} to one element; validated paths and theme tokens only.
GET /api/v1/designs/:id/versions- Every saved version with its model/provider provenance; POST /undo and /redo move the pointer.
GET /api/v1/tokens/:theme?format=- A theme as code (OpenVibe Tokens): css, tailwind, compose (Android), swiftui (iOS), flutter, figma or json (W3C DTCG). Its other half comes along unless both=0; download=1 names a file.
GET /api/v1/tokens- The export targets.
GET /fonts- Every self-hosted open font family in its own face, with its weights, licence and CSS.
GET /fonts/css2?family=Name:wght@400;700- The self-hosted fonts as @font-face CSS, the same query shape as Google's css2; a name we do not have is a CSS comment.
GET /api/v1/fonts- The self-hosted families as JSON: family, slug, weights, licence, source. The wider catalogue is /api/v1/fonts/library.
GET /api/v1/components- The components' contract: anatomy and tokens, props, states, a11y, layout, and Compose and SwiftUI reference views.
POST /api/v1/components/validate- Check a kit document ({ doc }): known components and props, typed values, children, size, links. Answers { ok, errors }.
POST /mcp- MCP for AI assistants (Streamable HTTP, protocol 2025-06-18, no auth): openvibe_design_list_themes, openvibe_design_get_theme_tokens, openvibe_design_list_components, openvibe_design_get_component and openvibe_design_validate_kit_document, all read-only.
GET /api/themes- Every public OpenVibe theme with its colours (Network's catalog).
GET /api/themes/:id- One theme.
GET /api/me/theme- Your active theme (signed in).
PUT /api/me/theme- Use a theme, with optional custom colours (signed in; from this site only).
GET /api/me/theme/history- Your earlier looks, newest first; POST /api/me/theme/history/:id/restore brings one back.
Themes also export and import as openvibe-theme@1 files through Network's theme API.