Quickstart
What a Vel app looks like — your first .vel file, end to end.
This is a syntax-first tour of a Vel app: the .vel source, the thin C++ entry
point, and the reactive loop that ties them together. You can run all of this
live in the playground — no setup required.
Vel is a proprietary engine. There is no public download or source build — see Access to request access for your team.
Hello, Vel
A component lives in a .vel file. Short widget names, theme tokens, and
reactive state:
#Hello
@name = "world"
V p=lg g=md
T "Hello, {$name}" font=bold/title
In placeholder="Name" value=$name
#Hellodeclares a component.@name = "world"is a reactive signal.Vis a vertical stack with padding (p=lg) and gap (g=md).Tis text;{$name}interpolates the signal.Inis a text input bound to$name.
The entry point
A thin main.cpp boots the app and mounts the component:
#include "vel/App.h"
#include "hello.vel.h"
int main() {
vel::App app(480, 240, "Hello");
app.setRoot(std::make_unique<Hello>());
return app.run();
}
The reactive loop
Type in the field. The signal updates. The label re-renders — and nothing else does. When nothing changes, Vel uses ~0 CPU thanks to damage tracking.
State, scroll position, focus and drag all survive a hot reload, so iterating on
a .vel file is sub-second. See Recipes › Hot reload.