Introduction

SignalOS Widgets is a private, pull-based component registry: instead of installing a package, you copy widget source into your app and own it from that moment on.

Why pull, not install

Every SignalOS client deployment needs its own customization - branding, extra columns, different workflows. A compiled npm package fights that: you end up wrapping components or forking the package. The pull model embraces it. You pull source, you own source. Customize freely; the registry tracks what you took and tells you when upstream moved.

the whole workflow
npx shadcn@latest add @signalos/data-table   # source lands in YOUR app
npx signalos diff                            # has upstream changed? did we?
npx signalos update data-table               # take the new version, reviewed

What's in the registry

Three tiers, each built on the one below - currently 34 components and 28 pages:

  • Foundation - the design tokens (one CSS file: OKLCH colors, light/dark themes, Tailwind mapping) and curated shadcn primitives (button, input, select, …). Pulled automatically as dependencies; you never request them directly.
  • Components - generic widgets: data tables, KPI tiles, charts, filter bars, app shell. Props in, events out; no fetching, no global state, no client names. Each owns its loading, empty, and error states.
  • Pages - full screens composed from the widgets (login variants, dashboards, connectors, settings). Pull one, mount it in a route, wire your data.

Public vs. gated

Everything you can see on this site is public: live previews, props APIs, example code, markdown docs. The component source is gated - pulling requires a GitHub token that only members of the widget-consumers team can hold. Revoking team membership kills access instantly.

Next