A Rust-powered web framework
Full-stack web apps in plain HTML — the simple alternative to React & Next.js.
No JavaScript. No backend code. Deploy in one command.
File-based routing · Template variables · Components · SQLite + D1 · JWT auth · Forms · Uploads · Email · Deploy
Pre-1.0 and evolving in the open — feedback welcome.
A counter that persists server-side. Compare the approaches.
Traditional Stack
// api/counter.ts
import { db } from '../lib/db'
export async function POST(req) {
const session = await getSession(req)
await db.counter.increment(session.id)
const count = await db.counter.get(session.id)
return Response.json({ count })
}
// components/Counter.tsx
'use client'
import { useState } from 'react'
export function Counter() {
const [count, setCount] = useState(0)
const increment = async () => {
const res = await fetch('/api/counter',
{ method: 'POST' })
const { count } = await res.json()
setCount(count)
}
return <button onClick={increment}>
+1 ({count})
</button>
}
What
<!-- site/counter.html -->
<p>Count: #session.counter|default:"0"#</p>
<button w-set="session.counter += 1">
+1
</button>
That's the whole file.
No API. No state library.
No build step.
Fetches a dog photo, increments your session counter, and updates a wired counter that pushes to every connected browser.
Open in another browser -- your count resets, the wired count stays in sync.
What you'd normally install, configure, and debug separately -- all built in.
site/post/[id].html becomes /post/123
#variable# syntax for data binding, filters, and defaults
Login, logout, role-based access from templates
Auto-migration, CRUD, queries -- local SQLite or Cloudflare D1
HTML files become custom elements with props and slots
Declarative rules, client + server enforcement
Local storage or Cloudflare R2 with collection-based routing
SMTP + Resend API with HTML templates
Cloudflare Turnstile integration for forms and actions
Utility-first styles included, dark mode, zero config
w-get, w-post, w-set -- interactivity without writing JavaScript
Pre-render to static HTML, deploy via Docker, SSH, or CDN
Every feature is interactive. Click through to see it work.
Built for humans and AI agents
No build step, no bundler, no client framework — just HTML files and one command to deploy. Point your agent at the machine-readable reference and let it build.