Components
Components are self-contained packages that add functionality to a WarmHub repo. A component declares the shapes, subscriptions, credentials, and seed data it needs, and the CLI installs everything in a single operation.
What a component does
Section titled “What a component does”When you install a component, the CLI:
- Reads the component’s manifest (
warmhub/manifest.json) to learn what resources it needs - Creates shapes for the data types the component works with
- Sets up subscriptions that trigger actions when data changes or on a schedule
- Seeds initial data the component needs to operate
- Creates credential sets for any external API keys the component requires
All resources are tracked under a ComponentInstall record so the CLI can manage, diagnose, and tear down the component later.
Key concepts
Section titled “Key concepts”Manifest-driven: Components use a declarative JSON manifest rather than imperative scripts. The manifest describes what resources the component needs, and the CLI handles creation, reconciliation, and teardown.
Ownership: Resources created by a component are tagged with the component’s ID. This prevents accidental modification and enables clean teardown. Users can still create things under component-owned shapes — ownership protects schema, not data.
State tracking: Each installed component has a state that reflects its health:
| State | Meaning |
|---|---|
ready | All resources exist, all credentials populated |
credentials-required | Resources created, but one or more credential keys need values |
degraded | One or more declared resources are missing or inactive |
paused | All subscriptions paused (via teardown) |
installing | Install in progress |
error | Install failed |
CLI commands
Section titled “CLI commands”# Install a component from GitHubwh component install https://github.com/org/my-component --repo myorg/myrepo
# Install from a local path (for development; best for components without subscriptions)wh component install ./my-component --repo myorg/myrepo
# List installed componentswh component list --repo myorg/myrepo
# View component detailswh component view my-component --repo myorg/myrepo
# Run health checkswh component doctor my-component --repo myorg/myrepo
# Pause all component subscriptionswh component teardown my-component --repo myorg/myrepo
# Validate a component package offline (no repo needed)wh component validate ./my-componentExample
Section titled “Example”A component that watches for new Paper things and summarizes them:
my-summarizer/ warmhub/ component.json # Identity: id, name, version manifest.json # Resources: shapes, actions, subscriptions, seeds actions/ summarize/run.sh # The action scriptInstalling it:
wh component install https://github.com/myorg/my-summarizer --repo myorg/research# Installed my-summarizer v1.0.0 [credentials-required]
# Set the required API keywh credential set summarizer-creds api_key --value sk-...
# Verify healthwh component doctor my-summarizer --repo myorg/researchNext steps:
- Manifest Reference — full manifest format
- Component Lifecycle — install, update, doctor, teardown
- Authoring Components — build your own
- Sprite Patterns — runtime configuration and debugging
- Testing Components — validation workflow