Markdown-native framework

Darkmown

Markdown pages that compile into fast, mostly-static websites, with tiny reactive islands only where the document asks for them.

Read the docs Try reactivity

What to try

TryOpen the docs route, a .wd page full of includes TryOpen a plain .md page and see directives stay inert TryOpen the reactive page: state, keyed loops, scoped sections TryOpen the data page: :fetch, forms into state, persistence TryOpen a hidden route and confirm it 404s

Loops that read like prose

@loop is the only loop. Point it at a JSON file, an in-scope value, or a :state list, and the body repeats once per row. Includes inside the loop inherit the loop value:

@loop /features.json into card
@include /feature-card.wd
@endloop

Folder routing without config

Pages come from site/pages, and hidden work is just dot or minus prefixed.

One loop, @loop

Loop a JSON file, an in-scope value, or a :state list — includes inside inherit the loop value.

Colocated behavior

A matching .skin or .js file beside the page is picked up automatically.

Colocated behavior

This button is powered by site/pages/index.js, discovered by matching the page basename:

Deploy in one click

This repo doubles as a template — npm run build emits a plain static dist/, so it deploys anywhere that serves files:

Deploy to Vercel Deploy to Cloudflare Star on GitHub

Sprint board

PMactive lane
Developmentactive lane
Researchactive lane
Testingactive lane
Reviewactive lane

Long-running session sprinting

Darkmown treats sprinting as a visible operating loop, not as hidden recursion inside Markdown.

The standing team size is 4 to 6. If work expands, add a design or architecture lane; if work shrinks, keep PM, development, testing, and review active.