Button, Form, or Table looks like before it tries to render one. You never have to hardcode what a component accepts; you read it directly from the registry.
The schema-first advantage
Every component you define withdefineComponent carries its full prop schema as component._schema. Solar’s registry aggregates these into a single queryable catalog.
Call registry.manifest() at any point and you get a complete JSON description of every registered component — prop names, types, required flags, enums, and defaults. Your platform can use this to render a form-based configurator dynamically, without hardcoding a single prop name. When you add a new component to your library, the configurator picks it up automatically on the next manifest() call.
Key features for builders
Machine-Readable Schema
registry.manifest() returns the full prop schema for every registered component as structured JSON. Your platform reads the schema at runtime — no manual sync between component code and your configuration UI.Typed Slot Composition
The slot system lets your platform compose components predictably. A parent declares which component type can fill a slot — passing anything else throws a
ContractError before it reaches the DOM.Runtime Validation
ContractError fires at the component boundary the moment a prop contract is violated. Your platform catches the error before a misconfigured component ever renders, and surfaces the fix message directly to the user.No Compiler
Solar is runtime-based. Generated components run immediately in the browser without a build step. Your platform can go from user configuration to live preview in a single frame.
Building a config-driven UI
When a user fills out a configuration form in your platform, you get back a plain JSON object describing which component to render and what props to pass. Useregistry.get() to resolve the component by name, then mount it with mountComponent().
config.component and remounting.
Introspecting component schemas
Useregistry.list() to build a dynamic component picker. The method returns an array of objects — each with a name and a props map — that your platform can use to render both a picker UI and a per-prop editor without any hardcoded component knowledge.
registry.list() reflects the change automatically — no configuration files to update.