Everything you need, nothing you don't.
AUTO SEO
Auto SEO injection script generates sitemap.xml, robots.txt, rss.xml, meta tags, og:image, twitter:card. No config needed.
AUTO COLLECTIONS
content/services/jas.md → { { collections.services } } auto. No config, Jekyll style but faster.
JAMTSACK CONCEPT
Working with content/, templates/, public/ like Jekyll, Hugo, Eleventy. No Node, no Blazor, no hydration.
FREE NESTED FRONTMATTER
hero: list: [{name,url,meta:{deep:{level:3}}}] unlimited depth, no fixed schema.
TAGS + PAGINATION
tags: [csharp] → /tags/csharp/ auto. pagination:6 → /posts/page/2/
YAML + JSON AUTO
_data/*.yaml, *.json → { { config.list }}, { { metadata.title }} directly in templates.
0KB HYDRATION
Pure HTML output. No blazor.web.js, no WASM, Lighthouse 90+, instant SEO.
CMD NATIVE
Windows CMD, Linux, macOS. No MinGW, no make. Just dotnet SDK.
.NET is heavy. DAX is not.
| DAX Pure C# | Blazor SSG | CAX (C) | |
|---|---|---|---|
| Load | 50ms | 2000ms WASM boot | 50ms |
| JS Payload | 0KB | 512KB + _framework | 0KB |
| Build Cmd | dotnet run -- build (0.12s) | dotnet publish (8s) | make + gcc (1.2s) |
| Windows CMD | Works | Heavy SDK | Need MinGW |
| Vercel Deploy | dotnet preinstalled ✓ | WASM host needed | No GCC = fail |
| Nested YAML | Unlimited depth | JSON only | Depth 2 + segfault |
Build your site in 6 steps.
CONFIGURATION
Open on _data/metadata.yaml and update site_url, title, description, author, social links and other settings.
STATIC PAGE
To create a static page, add a .md file in content/ folder. example content/about.md → /about/
COLLECTION POSTS
To create a collection item, add a .md file in the collection's folder. example content/posts/hello.md → /posts/hello-dax/
COLLECTION PAGE
To create a collection page, add a .md file in content/ folder. example content/posts.md → /posts/
PUBLIC FOLDER
To add static assets, put them in public/ folder. example public/css/style.css → /css/style.css
DEPLOY PROJECT
To deploy your project, upload the site/ folder to your hosting. example vercel.json, netlify.toml, .github/workflows/deploy.yml are ready to use.
Complete DAX docs
brew install dotnet@9 or .pkg from site
Linux: sudo apt install dotnet-sdk-9.0
Then Open terminal:
git clone https://github.com/mesinkasir.dax.git cd dax dotnet run -- build → builds to site/ dotnet run -- start → dev server http://localhost:8080/
│ Dax.csproj, Program.cs, README.md, vercel.json, netlify.toml ├───.github/workflows/deploy.yml → GitHub Pages deploy ├───_data/ → metadata.json, config.yaml, nav.json → auto DAX .NET Static Site Generator, ├───content/ → index.md → /, about.md → /about/, posts.md (collection controller) + posts/hello.md → /posts/hello-dax/ ├───templates/layouts/ → base.dax, home.dax, posts-list.dax, post.dax, tag.dax, tags-list.dax ├───templates/partials/ → header.dax, footer.dax, seo.dax ├───public/ → css/style.css, img/ → copied verbatim to site/ └───site/ → generated output (gitignored).gitignore must include: bin/, obj/, site/, *.exe, *.
---
title: Hello DAX
date: 2026-08-03
tags: [csharp, dax]
layout: minimal/post.dax
hero:
title: Welcome
list:
- name: GitHub
url: https://github.com
meta: { icon: github, deep: { level: 3 } }
image: /img/hero.jpg
---
# Markdown here → { { content }}
In template: { { hero.title }}, { % for item in hero.list %}{ { item.name }} - { { item.meta.deep.level }}{ % endfor %}
Unlimited nesting, no fixed schema like Blazor.
Includes: { % include header.dax %}
Loops:
{% for post in collections.posts limit:3 %}
{ { post.title }} - { { post.date }}
{ % endfor %}
{ % for n in config.list %}
{ { n.title }} → { { n.url }}
{ % endfor %}
Condition: { % if image %}< img src="{ { image }}" >{ % endif %}
Variables: { { title }}, { { metadata.site_url }}, { { pagination.items }}, { { all_tags }}
--- title: Blog layout: posts-list.dax collection: posts pagination: 6 ---→ Generates /posts/ + /posts/page/2/ + pagination.items, pagination.total_pages, pagination.prev_url, next_url Tags: any post with tags: [csharp] → /tags/ (all_tags) + /tags/csharp/ auto pages using tag.dax layout. SEO: sitemap.xml, robots.txt, rss.xml auto generated from collections.posts. Search watch excludes site/, bin/, obj/ to avoid infinite loop.
{
"buildCommand": "dotnet publish -c Release -o bin && ./bin/DAX build",
"outputDirectory": "site"
}
Netlify: netlify.toml
[build] command = "dotnet publish -c Release -o bin && ./bin/DAX build" publish = "site"Cloudflare Pages: same, output site/. No GCC needed unlike CAX.
Run and Try DAX SSG.
MIT open source. Pick minimal (empty) or full blog template. Both work with dotnet run -- build.
Clean Minimalis Starter
Get started in seconds. The official clean, minimal starter for DAX SSG — production-ready with _data/, content/, templates/, and public/ pre-configured. - 0KB JS. 50ms Load. Pure HTML + Axcora CSS. No bloat.
git clone https://github.com/mesinkasir/dax.git cd dax dotnet publish -c Release -o . dax build // 11 pages 127ms dax start // localhost:8080
Built for scale. Clean output, semantic HTML, and best practices baked in from day one.
Run DAX Starter Minimal →Premium DAX Architecture Service
Build your project with custom DAX architecture. From bespoke UI and advanced features to full AI and API integration — we handle it all. Our expert team is ready to turn your vision into reality. Let's solve your project challenges and build for a better future.
Consult Now → Hire Now →site/
site/
deploy.yml
unlimited bw