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

  • ButtonsBtn, IconBtn, Toggle
  • ContainersCard, OverlayHost, Sheet, Dialog
  • IndicatorsBadge, Alert, Progress, Spinner, Skel
  • FormsSwitch, Check, Radio, Slider, Textarea, Field, In (input)
  • DataTable (virtualized, sortable, multi-select), TreeView, Stepper, Tabs, Accordion
  • OverlaysTooltip, Popover, Menu, Toaster
  • NavigationNav, Breadcrumb, Pagination
  • Visual primitivesAvatar, 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.json package manifest for sharing registries
  • VS Code completion driven by widgets.json