ReeWeb · MIT licensed · Beta

Static sites with zero ceremony

ReeWeb is an open-source static-site generator for Bun with .ree templates, Markdown, localization, image processing, RSS, sitemaps, and zero runtime dependencies.

ReeWeb is in beta and already powers this website. Create a project with bun create reepolee/reeweb to begin. APIs, templates, and project structure may still change before 1.0, so use Reesync to review updates before adopting them.

Everything a content site needs, nothing it doesn't

Open source and complete

ReeWeb is MIT licensed and useful on its own. Clone it, adapt the source, and deploy the generated HTML wherever static files can be served.

Bun-powered

bun dev for live development and bun ssg for static generation into ./dist. No webpack or Vite - just Bun.

Localization through JSON

Per-language JSON translation files, localized routing, hreflang, and fallback chains are part of the project.

Zero runtime dependencies

Templates, Markdown, RSS feeds, and sitemaps are built into static output with no production node_modules to install or audit.

Create, initialize, and run

Name your project folder once and every command updates. bun create fetches the starter and initializes your project - the install runs automatically - then start developing:

bun create reepolee/reeweb __PROJECT_DIR__
cd __PROJECT_DIR__
# live development with reload
bun dev

The install task runs automatically as part of bun create, initializing the starter for your project. bun dev gives you live development; bun ssg writes the finished static site to ./dist.

Proof by use: this website is generated with ReeWeb.

Templates you can read

.ree templates are HTML with a handful of tags for escaped output, translations, loops, layouts, and components. Markdown lives alongside them.

{#layout("layout")}
<main>
	<h1>{_ home.title }</h1>
	{#each props.posts as post}
		<article-card title="{= post.title }">{@ md_content }</article-card>
	{/each}
</main>

Add an application when the site needs one

ReeWeb does not require Reepolee. When a site later needs managed content, users, or workflows, Reepolee can run alongside it as the database and application layer. ReeWeb pulls content during development and static generation:

// src/public/blog/index.ts - runs during dev and static generation
import { fetch_collection } from "../lib/reepolee_api";

export async function load_template_data({ locale }: { locale: string }) {
	const result = await fetch_collection("/admin/articles", locale);
	return { posts: result.data };
}

The projects share template conventions, but each remains useful alone. Add the application layer only when the site earns it.

Why it is built this way

ReeWeb is a small tool with opinions behind it. The founders' letter explains the reasoning: why a static site generator ships with zero runtime dependencies, why multi-language belongs in the pipeline rather than in a plugin, and why the templates stay something you can read.

Beta. Built for what comes next.

Create a project with bun create reepolee/reeweb - the install runs automatically - and start with bun dev. Use Reesync to review and selectively adopt later starter updates.