Propel

Introduction

What Propel is and how the library is put together.

Propel is Plane’s React component library: accessible behavior from Base UI, styled with a Tailwind CSS v4 token system, published as @makeplane/propel. It is the set of primitives Plane itself is built from — this site documents each one as a live, working instance beside its exact source.

How it’s put together

Every interactive component grafts a Base UI primitive onto a styled element, so keyboard behavior, focus management, and ARIA semantics come from Base UI while the look comes from Propel’s design tokens. The tokens are OKLCH throughout, semantic first (bg-canvas, text-primary, border-subtle), and carry four themes — light, dark, light-contrast, and dark-contrast — from a single data-theme attribute.

Explicit by design

Propel defines no default variants. Every styling axis is a required prop, spelled out at the call site:

<Button sizing="hug" prominence="primary" tone="neutral" magnitude="lg" label="Save" />

The axis vocabulary is shared across the library — prominence for visual weight, tone for color intent, magnitude for size, sizing for hug-versus-fill — so knowing one component means knowing all of them. What a component renders is never implicit, and impossible combinations aren’t representable.

Subpath imports

There’s no root barrel. Each component lives at its own subpath, so a bundle only ever contains what a page actually imports:

import { Dialog, DialogContent } from "@makeplane/propel/components/dialog";
import { Tooltip } from "@makeplane/propel/components/tooltip";

Where to go next

Head to Installation to wire Propel into your app, or jump straight into the components — Button is a good first read for the axis vocabulary in practice.