Content Model
In Dune, content is files. There is no database. Every page is a folder containing a content file and its associated media.
content/
├── 01.home/
│ └── default.md ← a page
├── 02.blog/
│ ├── blog.md ← a listing page
│ └── 01.hello-world/
│ ├── post.md ← a child page
│ └── cover.jpg ← co-located media
└── 03.landing/
└── page.tsx ← a TSX content page
Core ideas
Folder = page. A folder in content/ represents a page. The content file inside determines what it shows and how it renders.
Filename = template. post.md renders with the post.tsx theme template. default.md uses default.tsx. This is convention over configuration.
Frontmatter = metadata. The YAML block at the top of each file controls title, date, taxonomies, collections, visibility, caching, and more.
Formats are interchangeable. Markdown for prose. TSX for interactive pages. They share the same folder conventions, frontmatter fields, collection system, and taxonomy system.
Content formats at a glance
| Format | Frontmatter | Body | Rendering | Best for |
|---|---|---|---|---|
.md |
YAML between --- |
Markdown → HTML | Injected into theme template | Blog posts, docs, articles |
.tsx |
export const frontmatter = {} or sidecar YAML |
JSX component | Self-rendering, optional layout | Landing pages, interactive content |
.mdx |
YAML between --- |
Markdown + JSX | Compiled, injected into template | Tutorials with live examples (v0.2) |
Read on for details on each format, frontmatter fields, media handling, collections, and taxonomies.