The registry
Vel UI — 43 opinionated components built on the framework.
registry/ ships Vel UI, an opinionated component set used by .vel source. It is not part of the framework — third-party registries can ship their own as bare .vel files via git, vendoring, or eventually a package manifest. The language treats every .vel file as a registry artifact.
What’s included
- Buttons —
Btn,IconBtn,Toggle - Containers —
Card,OverlayHost,Sheet,Dialog - Indicators —
Badge,Alert,Progress,Spinner,Skel - Forms —
Switch,Check,Radio,Slider,Textarea,Field,In(input) - Data —
Table(virtualized, sortable, multi-select),TreeView,Stepper,Tabs,Accordion - Overlays —
Tooltip,Popover,Menu,Toaster - Navigation —
Nav,Breadcrumb,Pagination - Visual primitives —
Avatar,Icon,Image
Full inventory: docs/widgets.md (auto-generated on every velc build).
Agent-readable inventory: docs/widgets.json — same content, JSON-shaped, designed for LLM consumption.
Writing your own registry widget
Any .vel file is a registry artifact:
// widgets/stat.vel
#Stat label:str value:str hint:str=""
Card elev=1
V g=xs
T $label fg=fgMuted font=uiSm
T $value font=bold/display
if $hint != ""
T $hint fg=fgFaint font=uiSm
Consume it with use:
// showcase.vel
use "widgets/stat.vel"
#Showcase
H g=md
Stat label="MAU" value="42,103" hint="last 30 days"
Stat label="Latency" value="84ms" hint="p99"
Stat label="Errors" value="0.02%" hint="↓ 18%"
velc resolves the import, parses the imported file to extract the component’s param signature, and at the call site emits std::make_unique<vel::gen::Stat>("MAU", "42,103", "last 30 days") — positional constructor args, type-checked statically by the C++ compiler downstream.
Coming soon
- Per-widget API reference with live examples
- A
vel.jsonpackage manifest for sharing registries - VS Code completion driven by
widgets.json