Side by side

Vel vs React

The exact same searchable user list. One compiles to a native binary; the other ships a runtime to the browser.

Vel ≈ 78 tokens
users.vel vel
 #UserList
  @users: std::vector<User> = await fetchUsers()
  @filter = ""

  V g=md p=lg
    In placeholder="Search…" value=$filter
    List of=$users as=u
      Card -> click => open(u.id)
        H g=sm
          Avatar src=$u.avatar
          V
            T $u.name font=bold
            T $u.email fg=fgMuted 
React + Tailwind ≈ 182 tokens
UserList.tsx tsx
 import { useState, useEffect } from "react";

export function UserList() {
  const [users, setUsers] = useState([]);
  const [filter, setFilter] = useState("");
  useEffect(() => { fetchUsers().then(setUsers); }, []);
  return (
    <div className="flex flex-col gap-4 p-6">
      <input
        className="rounded-md border px-3 py-2"
        placeholder="Search…"
        value={filter}
        onChange={(e) => setFilter(e.target.value)}
      />
      {users.map((u) => (
        <div
          key={u.id}
          onClick={() => open(u.id)}
          className="flex items-center gap-2 rounded-lg
                     border p-4 hover:bg-gray-50 cursor-pointer"
        >
          <img className="h-9 w-9 rounded-full" src={u.avatar} />
          <div className="flex flex-col">
            <span className="font-bold">{u.name}</span>
            <span className="text-gray-500">{u.email}</span>
          </div>
        </div>
      ))}
    </div>
  );
} 

How they compare

Vel React + Tailwind
Source tokens (this component) ≈ 78 ≈ 182
Token efficiency 2.33× fewer baseline
Runtime Native binary Browser / Electron
Warm relayout · 10k rows ~93× faster virtualization needed
Idle CPU ~0 (damage-tracked) reconciler + GC
Styling Theme tokens Utility classes
State Signals (fine-grained) Hooks + re-render

Token counts measured with vel bench token. React snippet is the idiomatic equivalent; YMMV with abstraction. Methodology in benchmarks/.