Building websites
like it's 1997.

A Bun-native web framework that trusts the platform. File-based routing, zero build steps, HTML that works, JavaScript that ships.

The web platform is enough.

Stop fighting your framework. Start shipping.

⚡

Zero Config

The file is the route. Drop about.phtml in your pages directory, get /about. No router setup, no config file, no thinking.

🌐

Web Platform First

HTML forms, HTTP verbs, browser APIs. index97 doesn't invent new abstractions — it makes the ones you already know work beautifully.

🐇

Bun Native

SQLite, password hashing, markdown rendering, file serving, WebSockets — all built in. Zero extra dependencies to manage.

🔥

Hot Reload

SSE-based HMR that re-stamps CSS without a page reload. See your changes instantly — inspired by Bret Victor's "seeing space."

📐

Layouts & Slots

Named slots with default values. Layout data providers. Per-directory layouts. Everything composes cleanly without magic.

✦

Just JavaScript

ES modules, async handlers, no transpilation step. Export a GET function, return an object, done. It's that simple.

Drop a file. Get a route.

pages/ _layout.html index.phtml about.phtml blog/ index.js index.phtml [slug].js [slug].phtml public/ style.css
// blog/[slug].js
import { getPost } from './_db.js'

export async function GET(req) {
  const post = getPost(req.params.slug)
  if (!post) return new Response('', { status: 404 })
  return { post }
}
<!-- blog/[slug].phtml -->
<h1>{{post.title}}</h1>
<p>{{post.body}}</p>
<a href="/index97/blog">← Back</a>

Start building in seconds.

No front-end application templates to clone. Just Bun and a folder.