Volt vs React vs WordPress

The same three tasks in each — a counter, a per-user CRUD list, and login. Different tools for different jobs; this just makes the trade-off concrete.

A counter

The “hello world” of reactivity.

Voltno build
import { signal, html, mount } from "/volt.js";

const n = signal(0);
mount("#app",
  html`<button onclick=${() => n(n() + 1)}>${n}</button>`);
// no build — save and it hot-reloads
React stackneeds bundler
import { useState } from "react";

export default function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}
// + Vite/Next, npm install, a build step
WordPressplugin + DB
// no native counter — functions.php:
add_shortcode('counter', fn() =>
  '<button onclick="this.textContent=
     +this.textContent+1">0</button>');
// then type [counter] into a post

A per-user CRUD list

Create/read/delete, scoped to the logged-in user.

Voltno build
// server.js — auth add-on already on
const todos = store.collection("todos");
const guard = requireAuth(store);

app.get("/api/todos", guard, async (req, res) =>
  res.json({ todos: await todos.find({ owner: req.user.email }) }));
app.post("/api/todos", guard, async (req, res) => {
  await todos.put(id(), { owner: req.user.email, text: req.body.text });
  res.json({ ok: true });
});
// + a ~10-line Volt list. That's it.
React stackneeds bundler
function Todos() {
  const [items, set] = useState([]);
  useEffect(() => {
    fetch("/api/todos").then(r => r.json()).then(set);
  }, []);
  // ...and you still build the API,
  // the auth, and the database yourself
}
WordPressplugin + DB
// a custom post type or a CRUD plugin
register_post_type('todo', [ /* ... */ ]);
// data lives in wp_posts + wp_postmeta,
// edited through /wp-admin; per-user
// scoping needs a plugin or custom
// meta_query in PHP

Login

Authenticated sessions for real users.

Voltno build
# enable the auth add-on — no code:
npm run dev -- --edit      # tick "auth"

# magic-link login + sessions are wired.
# guard any route:
app.get("/me", requireAuth(store),
  (req, res) => res.json(req.user));
React stackneeds bundler
// choose a library, then configure it
import NextAuth from "next-auth";
export default NextAuth({
  providers: [ /* ... */ ],
  // + a session store, callbacks,
  // env secrets, route handlers
});
WordPressplugin + DB
// built-in users at /wp-admin/, or for
// front-end login install a membership
// plugin, then configure roles + pages
// in the dashboard (often a paid add-on)

Where each one wins

VoltReact stackWordPress
Build stepnonebundler / transpilenone (PHP)
Authtoggle an add-onwire a librarybuilt-in / plugin
Datastore.collection(...)your own DB layerwp_posts + plugins
Where you edityour filesyour files/wp-admin + DB
Best forsmall–medium apps, dashboardslarge apps, scale, hiringcontent, editors, plugins

This isn't “WordPress bad” — it's the best tool in the world when content and nontechnical editors are the point. The comparison is about code-owned apps, where Volt's smallness and no-build feedback loop win, versus React, where you trade setup for a vast ecosystem.

npm create volt@latest my-app