# Lumen > Columen Labs' shared building blocks for apps, published to npm as `@columenlabs/lumen-`: a React component system for data apps (`lumen-ui`) and its view model (`lumen-ui-types`), with shared backend packages joining as they move out of the apps that run them. Every package ships at one version from one release; pin the same exact version for all of them. Lumen is MIT and names no product: an app passes its names in through `configureLumen` and its data domains through `registerDomains` (`@columenlabs/lumen-ui-types/registry`). Use Bun (`bun add`). ## Packages - [@columenlabs/lumen-ai](https://lumen.columenlabs.com/ai.md): Assistant and agent parts for apps on Cloudflare Workers. Serving an MCP server from a Worker, keeping only the read tools for a read-only caller, metering every tool call, and the server side of a chat assistant (`@columenlabs/lumen-ai/assistant`). - [@columenlabs/lumen-auth](https://lumen.columenlabs.com/auth.md): Lumen's sign-in checks for Workers behind Cloudflare Access: verify the token Access signs on every request, in the Worker, so a route stays closed even when the Access application is misconfigured or a request reached the Worker another way. No dependencies: Web Crypto and `fetch`, so it runs in a Worker, Bun or Node. - [@columenlabs/lumen-ops](https://lumen.columenlabs.com/ops.md): Lumen's ops parts for Cloudflare Workers: every request your app answers, every event and every data query becomes one Analytics Engine point, so you can find errors, mismatches and slow or heavy queries and fix them. The meter wraps your bindings once, so new code is metered without opting in. It writes only each query's shape, never a value. It also meters tool calls (`/tools`) and sends signed webhooks (`/webhooks`). - [@columenlabs/lumen-people](https://lumen.columenlabs.com/people.md): Lumen's people, access and invites, server side: who may sign in, what each person may do in each part of an app, invites with a single-use link that expires, and an audit log of every change. It pairs with the People screens in `@columenlabs/lumen-ui/people`. No dependencies beyond `@columenlabs/lumen-ui-types`: Web Crypto, `Request` and `Response`, so it runs in a Worker, a Durable Object, Bun or Node. - [@columenlabs/lumen-person](https://lumen.columenlabs.com/person.md): Lumen's one store per person: a Durable Object whose SQLite holds every app's tables for that person. Each app is a module that owns its tables (`_*`), its migrations and its wake time, so app code stays apart while one person's data joins in one SQL query, one backup and one delete. No dependencies: it runs in a Worker with `nodejs_compat` (for `AsyncLocalStorage`) and any Durable Object with SQLite storage. - [@columenlabs/lumen-ship](https://lumen.columenlabs.com/ship.md): Lumen's shipping kit: one release command that writes each release's notes with Claude, the changelog What's new reads, and the lint guards every Lumen app runs. Bash plus a small TypeScript reader, no framework. - [@columenlabs/lumen-tasks](https://lumen.columenlabs.com/tasks.md): Lumen's background jobs, server side: a ledger of the work a person started (a search, a sync, a backfill) with its state, progress and result, cooperative cancel, a reaper that fails anything stuck, and the routes the header Tasks list calls. It pairs with `TasksProvider`, `TasksButton` and `useTaskFor` in `@columenlabs/lumen-ui`, which show a ring while something runs, a dot for ended unseen tasks and a toast with Open when one ends. No dependencies beyond `@columenlabs/lumen-ui-types`: `Request`, `Response` and any SQLite, so it runs in a Worker, a Durable Object, Bun or Node. - [@columenlabs/lumen-ui](https://lumen.columenlabs.com/ui.md): Lumen's React components for data apps: the app frame, pages and views over your rows, widgets, charts, drawers and pickers, all on one theme. You give it data and a view config; it draws the screen. Built on shadcn/ui (Radix UI, Base UI, Tailwind CSS 4). Its view model is `@columenlabs/lumen-ui-types`. - [@columenlabs/lumen-ui-types](https://lumen.columenlabs.com/ui-types.md): Lumen's view model: the schemas and registries that `@columenlabs/lumen-ui` reads, and that your server can check against. No React, so it runs in a browser, a Worker or Node alike. - [@columenlabs/lumen-vault](https://lumen.columenlabs.com/vault.md): Envelope encryption for per-person data, Web Crypto only (Workers, Durable Objects, browsers, Bun). ## How to use the parts Read the page for a part before you add or change it in an app: when to use it, its anatomy, do and do not, and the lint rule that checks it. - [Lumen parts: how to use them](https://lumen.columenlabs.com/parts/README.md) - [Board: `LumenBoard`](https://lumen.columenlabs.com/parts/board.md) - [Calendar: `LumenCalendar`](https://lumen.columenlabs.com/parts/calendar.md) - [Drawer: `LumenDrawer` + `DrawerSection`](https://lumen.columenlabs.com/parts/drawer.md) - [Filter panel: `LumenFilterPanel`](https://lumen.columenlabs.com/parts/filter-panel.md) - [Form: `LumenForm`, `SaveButton`, `FormIssue`](https://lumen.columenlabs.com/parts/form.md) - [Player: `LumenPlayer`](https://lumen.columenlabs.com/parts/player.md) - [Picker: `LumenSelector`](https://lumen.columenlabs.com/parts/selector.md) - [Settings: `LumenSettings`, `LumenExpandList`](https://lumen.columenlabs.com/parts/settings.md) - [Status bar: `LumenShell bar`, `useStatus`](https://lumen.columenlabs.com/parts/status-bar.md) - [Phone tab bar (`LumenShell tabs`)](https://lumen.columenlabs.com/parts/tab-bar.md) - [Table: `LumenView`, `LumenLayout`](https://lumen.columenlabs.com/parts/table.md) ## Docs - [Everything in one file](https://lumen.columenlabs.com/llms-full.txt): every README, then every component's props and an example - [Live docs](https://lumen.columenlabs.com/docs/): Storybook, every component on sample data - [Component manifest](https://lumen.columenlabs.com/docs/manifests/components.json): JSON, props and snippets - [Source](https://github.com/columenlabs/lumen): one repo, `packages/` per package - [Releases](https://github.com/columenlabs/lumen/releases): what changed in each version