Astro Sienna is a minimal, writing-focused blog template built on Astro that generates a static site with serif typography, dark mode, RSS, and per-post OG images generated at build time.
What is Astro Sienna?
Astro Sienna is an open-source blog template built on Astro 7. It takes Markdown and MDX posts from src/content/post/, a typed site configuration in src/site.config.ts, and content schemas from src/content.config.ts, and outputs a fully static dist/ directory ready to deploy anywhere. The template was created by Anjay Goel as a fork of astro-theme-cactus and later heavily revamped; it is released under the MIT license.
Key Features
- Astro 7 content collections — Posts (
.mdor.mdx) and the About page are validated with Zod schemas defined insrc/content.config.ts. - MDX support — Embed Astro/JSX components, imports, and JavaScript expressions directly in
.mdxposts. - Light and dark mode with a CSS-only toggle — Theme variants are driven by
data-theme="light"anddata-theme="dark"attributes on the<html>element, with design tokens set as CSS variables insrc/styles/global.css. - Self-hosted fonts — The body uses the Newsreader serif font and code uses JetBrains Mono, both loaded locally from
public/. - Expressive code blocks — astro-expressive-code provides themes, a copy button, terminal frames, and line highlighting.
- KaTeX math rendering — Inline
$...$and display$$...$$math render with KaTeX. - Automatic per-post OG images — Satori and resvg generate a 1200×630 image for each post at build time; markup lives in
src/pages/og-image/[...slug].png.tsand can be overridden per post via theogImagefrontmatter field. - Optional integrations — Giscus comments, GA4/Goatcounter analytics loaded on a worker thread via Partytown, and webmentions fetched at build and cached locally.
- Built-in SEO and feeds — RSS feed, sitemap, robots.txt, and a web manifest are included by default.
Who is it for?
- Personal bloggers who want a clean, fast, text-first site with no JavaScript runtime overhead.
- Technical writers and developers who want to author in Markdown/MDX and customize a TypeScript codebase with Astro content collections.
- Developers deploying to static hosts who want analytics, comments, and social cards handled at build time rather than through third-party runtime widgets.
What can you do with Astro Sienna?
- Publish a blog with tags: Add a post to
src/content/post/and it automatically appears with tag pages, a/tags/index, and RSS updates. - Generate social cards without a designer: Every post gets a 1200×630 OG image at build time, and you can override it with a custom image via frontmatter.
- Add comments and analytics selectively: Set Giscus, GA4, or Goatcounter options in
src/site.config.ts; leave them undefined and the scripts never load. - Deploy to any static host: Output is a static
dist/directory; the bundled GitHub Actions workflow auto-detects a GitHub Pages project subpath, and other hosts can useBASE_PATH=/sub pnpm build.
How does Astro Sienna work?
Start by clicking "Use this template" on GitHub or cloning the repository, then run pnpm install and pnpm dev for local development. Posts are written as .md or .mdx files with YAML frontmatter (title, publishDate, description, tags, and optional updatedDate, draft, coverImage, or ogImage). Running pnpm build type-checks the project, builds it, and runs Pagefind indexing for search.
Pros and cons
- Pros: Achieves perfect Lighthouse scores across Performance, Accessibility, Best Practices, and SEO; the static output runs without a server; all optional integrations are tree-shaken when not configured.
- Cons: Keeping the theme updated after forking requires managing a second Git remote and using
.gitattributesmerge=ours drivers on personal content paths; configuration is code-based, not UI-based.
Pricing
Astro Sienna is open source under the MIT license, so it is free to use, modify, and deploy without a license fee.
Alternatives
- astro-theme-cactus — the original project that Astro Sienna was forked from; it has a lighter set of features and a different default design.
FAQ
Is Astro Sienna free?
Yes. Astro Sienna is released under the MIT license, so you can use, modify, and redistribute it freely.
How do I write a new post?
Add a .md or .mdx file to src/content/post/. The filename becomes the slug. Frontmatter requires title, publishDate, description, and tags; optional fields include updatedDate, draft, coverImage, and ogImage.
How do I generate social share images?
By default, Satori generates a 1200×630 OG image for every post at build time. To use your own image, set ogImage: "/path/to/image.png" in the post's frontmatter.
Can I deploy Astro Sienna to GitHub Pages?
Yes. Use the bundled .github/workflows/deploy.yml and set Settings → Pages → Source to GitHub Actions. The workflow auto-detects the repository subpath for project sites; user sites work with the default root.
How do I enable comments and analytics?
Edit src/site.config.ts. For Giscus comments, provide a comments configuration. For analytics, provide an analytics object with a GA4 key or Goatcounter key. If either section is undefined, the corresponding scripts are never loaded.








