Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
A minimal, neutral, and modern portfolio and blog theme for Astro 7, with a one-line accent color, dark mode, tags, RSS, and Shiki dual themes.

A dark portfolio & blog theme for Astro with a live 5,000-particle Three.js background, blog system, and glassmorphism UI.
Astro Keel is a minimal, neutral, modern portfolio and blog theme built on Astro 7, designed to produce a fully static website with a single configurable accent color, dark mode, tags, RSS, and self-hosted fonts.
Astro Keel is a free, open-source (MIT-licensed) portfolio and blog theme for Astro 7, created by developer kpab. It takes Markdown and MDX content files as input and outputs a static site with dedicated works and blog collections, per-tag archive pages, an RSS feed at /rss.xml, and a sitemap. The theme is built with TypeScript, the Content Layer API, and MDX, and requires Node.js 22 or later. It can be scaffolded with the command npm create astro@latest -- --template kpab/astro-keel or by clicking "Use this template" on GitHub.
/blog/tags/[tag] and pagination every 10 posts.src/consts.ts; the accent color is a single CSS variable (--color-accent).prefers-color-scheme and remembers manual toggles via localStorage, with no flash on load.@fontsource, with no external font CDN.src/i18n/; setting SITE.locale to a BCP 47 tag switches the chrome, date formats, <html lang>, and RSS language. English and Japanese are included./search powered by Pagefind, indexed at build time.src/consts.ts, lazy-loaded and theme-synced; disabled builds ship zero Giscus bytes.@astrojs/rss, canonical URLs, Open Graph, Twitter cards, sitemap, and JSON-LD structured data (WebSite, BlogPosting, BreadcrumbList)..md or .mdx files under src/content/; frontmatter supports hero images, tech lists, and draft status.en and ja are already included.--font-display, --font-body, --font-mono), and rely on fluid type and focus rings for accessible, responsive layouts.The theme is a GitHub template that scaffolds a new Astro project. After running npm install, developers add content as Markdown or MDX files in src/content/works/ and src/content/blog/. A config file (src/consts.ts) holds site identity, locale, nav, and footer; astro.config.mjs sets the site URL and base path. Running npm run build generates a static dist/ folder, with optional integrations like Pagefind search and satori OG images executed at build time.
Yes. The theme is released under the MIT License and free to use for personal or commercial projects. It is also listed on GitHub with a "Use this template" option.
It supports Markdown and MDX files in two content collections: works (portfolio entries) and blog (posts). Works frontmatter can include title, description, tech list, live link, repo link, thumbnail, order, and publish date. Blog frontmatter supports title, publish date, description, tags, draft status, and an optional hero image.
No. Comments use Giscus, which is backed by GitHub Discussions and is off by default. Search is powered by Pagefind, which indexes the static site at build time and runs entirely in the browser.
The theme ships with English and Japanese dictionaries. Setting SITE.locale to a BCP 47 tag switches all UI strings, date formats, html lang, og:locale, and the RSS language. Adding a new language requires copying a dictionary file and registering it in src/i18n/index.ts.
It requires Node.js 22 or higher. The build outputs a static site to ./dist, which can be deployed to any static host.
