Ship HTML,
not JavaScript.
A full-stack web framework built on Bun. Zero client JS by default, islands architecture, and built-in everything — with zero external dependencies.
Interactive Islands
This page is server-rendered HTML. Only these interactive parts ship JavaScript.
Independent StateuseIslandState
Each counter has its own state — clicking one doesn't affect the other.
Cross-Island SyncuseSharedStore
3 separate islands sharing state. Click a button — badge and list update.
Simple by Design
Pages, islands, shared state, and API routes — all in a few lines.
// src/pages/index.tsx
import { useHead } from "virexjs";
export async function loader() {
return { posts: await db.findMany() };
}
export default function Home(props) {
const head = useHead({ title: "Home" });
return (
<>
{head}
<h1>Welcome</h1>
{props.data.posts.map(p =>
<a href={`/blog/${p.slug}`}>{p.title}</a>
)}
</>
);
}Everything Built-in
No npm install for common features. Zero external dependencies.
Zero Client JS
Pages ship pure server-rendered HTML. No React runtime, no hydration overhead.
Islands Architecture
Only interactive components ship JS. Independent or shared state between islands.
Async Streaming
Suspense-like: loading shell first, data swap when ready. No client JS needed.
Built-in Auth
JWT (HS256), cookie sessions, route guards, CSRF protection. No packages.
SQLite Database
Typed CRUD with defineTable(), migrations, query builder. bun:sqlite.
Tailwind CSS
First-class integration. Auto-config, HMR hot swap, content-hashed builds.
Image Optimization
Sharp resize, WebP/AVIF conversion, blur placeholders. Native lazy loading.
File-Based Routing
[slug] params, [...rest] catch-all, nested layouts, per-route middleware.
Compression + ETag
Gzip middleware, automatic 304 Not Modified. Maximum bandwidth savings.
VirexJS vs Next.js
Different philosophy, different trade-offs.
| Feature | Next.js | VirexJS |
|---|---|---|
| Client JavaScript | ~85 KB React runtime | 0 KB by default |
| Dependencies | 400+ packages | 0 packages |
| Runtime | Node.js | Bun (3-5x faster) |
| Database | External package | Built-in SQLite ORM |
| Authentication | External package | Built-in JWT + sessions |
| Island Communication | React Context (85KB) | useSharedStore (0KB) |
| Dev Server Startup | ~2 seconds | ~27 milliseconds |
| Test Coverage | Framework-level | 1098 tests |
Ready to ship HTML?
Install VirexJS and build something fast.