v0.20.1 · now on JSR

The flat-file CMS
for Deno and Fresh

Grows from Markdown content to full-stack web apps with Preact themes and Fresh islands.
Start without a database. Ship as a single Deno module — no build pipeline required.

$deno install -A -n dune jsr:@dune/core/cli
$dune new my-site
$dune serve --root my-site

Markdown served the Fresh way

📄

Markdown content

Write pages in Markdown or MDX — embedding Fresh islands directly in your content for interactive components right in the prose.

TSX themes + Preact islands

Themes are Preact components. Drop a .tsx file into themes/{name}/islands/ and Fresh bundles and hydrates it automatically — no bundler config, no registration.

🔌

Plugin system

Extend Dune with hooks for rendering, routing, and content — and ship interactive UI as islands that hydrate where you need them.

🗂️

Multisite

Serve multiple sites from a single process with shared themes. Ideal for hosting families of sites.

🌐

i18n built-in

Multi-language routing, locale files, and language switcher — all wired up automatically.

🌱

Grows with you

Start with Markdown files. Add public user auth, a database schema, background jobs, or payments when your project needs them. Same framework, no migration.

Up and running in minutes

No config files, no installers, no local databases. Dune is a Deno module you import and serve.

01

Create a site

Run the CLI to scaffold a new site with a starter theme, sample content, and a ready-to-run deno.json.

02

Write your content

Drop markdown files into content/. Directories become sections. Frontmatter controls templates, titles, and metadata.

03

Ship it

Run dune serve. Point a domain at it. Done. No database, no build pipeline, no CMS vendor lock-in.

Minimal boilerplate

Two files to a working site: a deno.json and a site config.

# Install the CLI
deno install -A -n dune jsr:@dune/core/cli

# Create a new site
dune new my-site
cd my-site

# Start the dev server
dune dev

# Build for production
dune serve
{
  "imports": {
    "preact": "npm:preact@^10",
    "preact/jsx-runtime": "npm:preact@^10/jsx-runtime",
    "@dune/core": "jsr:@dune/core@^0.19"
  },
  "tasks": {
    "dev": "dune dev",
    "serve": "dune serve"
  },
  "compilerOptions": {
    "jsx": "react-jsx",
    "jsxImportSource": "preact"
  }
}
title: My Site
description: Built with Dune
url: https://mysite.com
theme:
  name: starter

Ready to build?

Read the docs, scaffold your first site, and see how far a flat-file stack gets you.