What's New

The major capabilities Vel has gained: Windows + WebGPU everywhere, a real in-browser playground, accessibility, big layout-perf wins, sharper text, and a richer component set.

This release is a big one. Vel went from a macOS-only prototype to a cross-platform, web-deployable UI language with measured performance, real accessibility, and a production-feel playground.

Runs everywhere

One WebGPU engine → macOS (Metal), Windows (D3D12), and the browser (WebAssembly) from a single codebase.

~65–93× faster layout

Text-measure caching turned 20 ms relayouts into sub-millisecond ones.

Real in-browser playground

Edit .vel, see it run in a real isolated app iframe, share a hosted URL.

Accessible on the web

A live DOM mirror gives screen readers, keyboard, and IME a real a11y tree over the GPU canvas.

Platforms: WebGPU everywhere

Vel’s engine (Lume) now targets Dawn/WebGPU as its single GPU abstraction, with native surfaces per platform:

PlatformBackendSurface
macOSMetalCAMetalLayer
WindowsD3D12HWND (DXC runtime auto-deployed)
WebWebGPUHTML <canvas> via emdawnwebgpu (WASM)

The same .vel source and the same engine/framework/registry render identically across all three — no per-platform UI code.

The web: a real, shareable playground

Live, isolated preview

The playground preview is a real <iframe> running the app in its own browser context (its own WebGPU device) — not a canvas emulation. Edits stream in over postMessage; no reloads, no flashing.

Hosted-app URLs

Share / Open ↗ produce an app.html#src=… link — that URL is the running app, openable and shareable standalone.

Devtools-style console

A Console tab streams live engine logs; a Problems tab shows compiler/interpreter errors with file:line:col and severity.

Editor that feels right

Resizable split, syntax highlighting, a live status pill (Editing… → Live → Error), and Cmd/Ctrl+R re-runs the preview without reloading the page.

Accessibility on a GPU canvas

A canvas has no accessibility tree — so Vel projects one. Each frame, the widget tree is reconciled into a hidden DOM mirror that carries ARIA roles, labels, and state, giving the web build:

  • Screen-reader support (the mirror is what NVDA/VoiceOver read)
  • Keyboard navigation + Tab focus order
  • IME / mobile-keyboard / autofill via a real overlay <input> for text fields
  • Focus rings (WCAG 2.4.7) drawn by the engine for every focusable widget
  • prefers-reduced-motion honored (WCAG 2.3.3) — animations snap to target

This is a substantial, WCAG-oriented accessibility layer — not a certified compliance claim. Real screen-reader sign-off (NVDA/VoiceOver) is an ongoing verification step.

Sharper, more substantial UI

  • Crisp HiDPI text — glyph origins now snap to the physical-pixel grid, so the atlas glyph samples 1:1 instead of getting bilinear-blurred. This is the fix for “text doesn’t feel HD.”
  • Real font weights — the bundled fonts are now genuine Inter Regular + SemiBold + JetBrains Mono cuts (they were previously identical copies, so weights didn’t render). Bonus: smaller WASM bundle.
  • A more generous default scale — the type ramp and control sizes were bumped a step so default UIs read substantial, not cramped.
  • Tactile interaction feedback — every button now has a smooth hover lift and a press scale-down, so clicks feel physical. Universal across Btn / IconBtn / Toggle.

New components

Chart

A line / bar / area chart over a numeric series — beautiful with zero data (renders a demo wave), real data fed via the C++ API. Works in both compiled apps and the live playground.

Chart                      // line, demo data
Chart variant="bar"        // bar
Chart variant="area" height=200

Splitter, upgraded

The resizable Splitter now shows a resize cursor and forwards theme changes to its panes — powering the playground’s editor/preview split.

Developer experience

vel new <app>

Scaffolds a working project — app.vel + main.cpp + CMakeLists.txt — ready to build.

vel dev

Compile app.vel, build, and launch the current project in one command.

vel bench

Run the token + layout benchmarks (see Performance).

vel serve

Serve the web build over HTTP (pure C++, correct application/wasm MIME).

Plus a cross-platform CLI fix: a .gitattributes now pins eol=lf, so the vel launcher no longer breaks on Windows/autocrlf checkouts.

Performance, in one place

Every claim above is backed by a runnable benchmark. See the full methodology, tables, and reproduction commands on the Performance & Benchmarks page.

Try it now

Install Vel and spin up your first app — or open the playground and start typing.