twenty × oappsDesign system for Twenty CRM extensions

One look, one feel for every app you ship inside Twenty.

63 React components + 7 in-panel recipes + a bridge to twenty-sdk/ui — all paired one-to-one with Twenty's --t-*CSS variables. Drop a component into an OAPPS Twenty extension and it inherits the host theme; drop it into a standalone Next.js app and it carries Twenty's identity with it. Light and Dark, AGPL-3.0, built to be agent-friendly.

at a glance
63componentsprimitives + 7 recipes
twenty-sdk/uibridgefor front-component imports
1 000+tokensexposed as --t-* CSS vars
Light · Darkthemestoggle .light / .dark on <html>

Quick install

Full guide →

Three packages publish to GitHub Packages under the @8maverik8 scope. Once your .npmrc is configured to point at npm.pkg.github.com, install in one line:

bash
pnpm add @8maverik8/twenty-tokens \
@8maverik8/twenty-design \
@8maverik8/twenty-icons

Three recipes (the panel-content building blocks) + three Normal-DOM primitives most consumer apps reach for in the first hour.

Foundations

Every visual decision in the library resolves to a token. Pick the right token instead of inventing a hex.

Why this exists

OAPPS apps inside Twenty kept reinventing the same chrome.Buttons with mismatched heights, dropdowns with random shadows, dialogs that re-paint the modal layer. Every extension owned its own micro-design system.
One contract — Twenty's --t-* tokens — pinned by the system.Every component here paints from those tokens. The same Button rendered in a front-component Web Worker and in a standalone Next.js app reads identical, because both surfaces sit on the same theme.
AI-agent first.Each component has a structured spec — variant axes, anatomy, do / don't with rationale — that an LLM can scan in seconds. See the agent guide for the recommended way to consume this library from an assistant.