使用 Astro Content Collections 管理 Markdown 与 MDX 文章和笔记,frontmatter 由 schema 校验
astro-citrus — Astro 博客模板
作者 ArtemKutsan
Astro Citrus 是一个基于 Astro 的极简博客模板,使用 Content Collections 管理 Markdown/MDX 文章与笔记,内置暗色模式、Pagefind 静态搜索、RSS、站点地图和 OG 图片生成。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
内置明暗主题,通过 TailwindCSS 与 CSS 变量控制样式
集成 Pagefind 静态搜索,构建后生成索引,支持按标签过滤
自动生成 RSS、sitemap、robots.txt 和 web app manifest
使用 Satori 为文章自动生成 Open Graph PNG 图片,也可在 frontmatter 中指定自定义图片
代码块由 Rehype Pretty Code 渲染,附带 rose-pine 明暗主题
模板详细介绍
Astro Citrus 是 ArtemKutsan 维护的 Astro 博客模板,面向个人博客或内容站点。它使用 Astro 的 Content Collections 组织 src/content/post 与 src/content/note 下的 Markdown/MDX 文件,并在 src/content/config.ts 中用 schema 校验 frontmatter;文章支持标题、描述、发布日期、更新日期、系列、标签、封面图、自定义 OG 图片和草稿状态等字段。站点元数据集中在 src/site.config.ts,样式通过 TailwindCSS 工具类与 src/styles/global.css 中的 CSS 变量控制,提供明暗两套主题。模板集成 Pagefind 作为静态搜索,搜索范围默认只覆盖文章与笔记,且需在构建后运行 postbuild 脚本生成索引。
内容之外,模板还包含自动生成的 RSS 订阅、sitemap、robots.txt 和 web app manifest,使用 Satori 为未提供 ogImage 的文章生成 Open Graph 图片,并支持 Webmention。代码块由 Rehype Pretty Code 渲染,内置 rose-pine 与 rose-pine-dawn 两套明暗主题。图标使用 Astro Icon 组件,社交链接在 src/components/SocialList.astro 中维护。
使用限制方面,Pagefind 搜索仅在站点构建后可用,本地预览需先执行 build 再执行 postbuild;搜索默认不包含文章与笔记之外的页面,如需扩展需调整 data-pagefind-body 属性。模板采用 MIT 许可,免费范围限于该版本代码,演示图片、字体、图标等第三方素材需单独核对许可,域名、托管等外部服务可能产生费用。
适合你的项目吗?
适用场景
- 搭建以 Markdown/MDX 写作的个人博客或技术笔记站点
- 需要一个包含暗色模式、RSS 与静态搜索的轻量内容站点
- 希望用 Astro 的 Content Collections 对文章 frontmatter 做类型校验
- 需要为文章自动生成 Open Graph 图片并输出站点地图与 robots.txt
适合人群
- 熟悉 Astro 与 Markdown/MDX 写作流程的个人开发者
- 偏好静态生成、通过 Git 管理内容的博客作者
- 需要可自定义主题样式与社交链接的站点搭建者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
可通过 npm create astro@latest -- --template artemkutsan/astro-citrus 或 pnpm dlx create-astro --template artemkutsan/astro-citrus 创建项目
- 2
在 src/site.config.ts 中修改站点元数据,在 astro.config.ts 中设置自己的域名
- 3
替换 public 目录下的 icon.svg 与 social-card.png,并按需调整 src/styles/global.css 中的明暗样式
- 4
Pagefind 搜索需在构建后运行 postbuild 脚本生成索引,本地预览需先 build 再 postbuild
- 5
文章与笔记分别放在 src/content/post 和 src/content/note,frontmatter 字段参考 README 中的说明
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- Pagefind 静态搜索仅在站点构建完成后才可用,开发服务器中无法直接使用搜索功能。
- 本地预览搜索功能需先执行 build 再执行 postbuild 脚本,单独运行 dev 无法获得搜索索引。
- 搜索范围默认仅覆盖文章与笔记页面,其他页面不会被索引,需手动调整 data-pagefind-body 属性才能扩展。
- 模板不内置任何分析统计方案,如需访问统计须自行接入第三方服务,可能涉及外部账号与费用。
- 接入分析服务时通常需要在 HEAD 标签中手动插入第三方提供的代码片段。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
In its current form, pagefind only works once the site has been built.
README 原文
This theme adds a postbuild script that should be run after Astro has built the site. You can preview locally by running both build && postbuild.
README 原文
Search results only includes pages from posts and notes.
README 原文
This theme/template doesn't include a specific solution due to there being a number of use cases and/or options which some people may or may not use.
README 原文
https://github.com/ArtemKutsan/astro-citrus/blob/main/LICENSEhttps://github.com/ArtemKutsan/astro-citrus/blob/main/README.mdYou may be asked to included a snippet inside the **HEAD** tag of your website when setting it up
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-04。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- Astro Themes
- 资料与维护参考分
- 资料较完整 · 82 / 100
- 技术栈
- Astro · HTML
- 网站类型
- 博客
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2025-03-10
- 截图检查日期
- 2026-10-04
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-04
查看当时使用的来源资料
SHA-256: 3f3b3a35cd03b37d146b54bffc83e6d3a5c98f08c36e07d1f7e23c646868cbd7
2026-10-04T09:40:26.825Z
来源文件 / 仓库<div align="center"> <img alt="Astro Citrus logo" src="https://github.com/ArtemKutsan/astro-citrus/blob/main/src/assets/images/logo.svg" width="70" /> </div> <h1 align="center"> Astro Citrus </h1> Astro Citrus is a simple opinionated starter built with the Astro framework. Use it to create an easy-to-use blog or website. ## Table Of Contents 1. [Key Features](#key-features) 2. [Demo](#demo) 3. [Quick start](#quick-start) 4. [Preview](#preview) 5. [Commands](#commands) 6. [Configure](#configure) 7. [Updating](#updating) 8. [Adding posts and notes](#adding-posts-and-notes) - [Post Frontmatter](#post-frontmatter) - [Note Frontmatter](#note-frontmatter) - [Frontmatter Snippet](#frontmatter-snippet) 9. [Pagefind search](#pagefind-search) 10. [Analytics](#analytics) 11. [Deploy](#deploy) 12. [Acknowledgment](#acknowledgment) ## Key Features - Astro v5 Fast 🚀 - TailwindCSS Utility classes - Accessible, semantic HTML markup - Responsive & SEO-friendly - Dark / Light mode, using Tailwind and CSS variables - MD & [MDX](https://docs.astro.build/en/guides/markdown-content/#mdx-only-features) posts & notes - Includes [Admonitions](http://astrocitrus.artemkutsan.pp.ua/posts/markdown-elements/admonistions/) - [Satori](https://github.com/vercel/satori) for creating open graph png images - [Automatic RSS feed](https://docs.astro.build/en/guides/rss) - [Webmentions](https://webmention.io/) - Auto-generated: - [sitemap](https://docs.astro.build/en/guides/integrations-guide/sitemap/) - [robots.txt](https://github.com/alextim/astro-lib/blob/main/packages/astro-robots-txt/README.md) - [web app manifest](https://github.com/alextim/astro-lib/blob/main/packages/astro-webmanifest/README.md) - [Pagefind](https://pagefind.app/) static search library integration - [Astro Icon](https://github.com/natemoo-re/astro-icon) svg icon component - [Rehype Pretty Code](https://rehype-pretty.pages.dev/) code blocks and syntax highlighter ## Demo Check out the [Demo](https://astrocitrus.netlify.app/) ## Quick start [Create a new repo](https://github.com/artemkutsan/astro-citrus/generate) from this template. ```bash # npm 7+ npm create astro@latest -- --template artemkutsan/astro-citrus # pnpm pnpm dlx create-astro --template artemkutsan/astro-citrus ``` [](https://app.netlify.com/start/deploy?repository=https://github.com/artemkutsan/astro-citrus) [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fartemkutsan%2Fastro-citrus&project-name=astro-citrus) ## Preview |  |  | |-------------|-------------| |  |  | |  |  | |  |  | ## Commands Replace pnpm with your choice of npm / yarn | Command | Action | | :--------------- | :------------------------------------------------------------- | | `pnpm install` | Installs dependencies | | `pnpm dev` | Starts local dev server at `localhost:3000` | | `pnpm build` | Build your production site to `./dist/` | | `pnpm postbuild` | Pagefind script to build the static search of your blog posts | | `pnpm preview` | Preview your build locally, before deploying | | `pnpm sync` | Generate types based on your config in `src/content/config.ts` | ## Configure - Edit the config file `src/site.config.ts` for basic site meta data - Update file `astro.config.ts` - **Important**: the site property with your own domain. - [astro-webmanifest options](https://github.com/alextim/astro-lib/blob/main/packages/astro-webmanifest/README.md) - Replace & update files within the `/public` folder: - icon.svg - used as the source to create favicons & manifest icons - social-card.png - used as the default og:image - Modify file `src/styles/global.css` with your own light and dark styles. - You can also modify the theme(s) for markdown code blocks generated by [Rehype Pretty Code](https://rehype-pretty.pages.dev/). Astro Citrus has both a dark (rose-pine) and light (rose-pine-dawn) theme, which can be found in `src/site.config.ts`. You can find more theme(s) and options [here](https://shiki.matsu.io/). - Edit social links in `src/components/SocialList.astro` to add/replace your media profile. Icons can be found @ [icones.js.org](https://icones.js.org/), per [Astro Icon's instructions](https://www.astroicon.dev/guides/customization/#find-an-icon-set). - Create/edit posts & notes for your blog within `src/content/post/` & `src/content/note/` with .md/mdx file(s). See [below](#adding-posts-and-notes) for more details. - Read [this post](http://astrocitrus.artemkutsan.pp.ua/posts/webmentions/) for adding webmentions to your site. - OG Image: - If you would like to change the style of the generated image the Satori library creates, open up `src/pages/og-image/[slug].png.ts` to the markup function where you can edit the html/tailwind-classes as necessary. You can use this [playground](https://og-playground.vercel.app/) to aid your design. - You can also create your own og images and skip satori generating it for you by adding an ogImage property in the frontmatter with a link to the asset, an example can be found in `src/content/post/social-image.md`. More info on frontmatter can be found [here](#frontmatter) - Optional: - Fonts: This theme sets the body element to the font family `font-mono`, located in the global css file `src/styles/global.css`. You can change fonts by removing the variant `font-mono`, after which TailwindCSS will default to the `font-sans` [font family stack](https://tailwindcss.com/docs/font-family). ## Updating If you've forked the template, you can [sync the fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) with your own project, remembering to **not** click Discard Changes as you will lose your own. If you have a template repository, you can add this template as a remote, as discussed [here](https://stackoverflow.com/questions/56577184/github-pull-changes-from-a-template-repository). ## Adding posts and notes This theme utilises [Content Collections](https://docs.astro.build/en/guides/content-collections/) to organise local Markdown and MDX files, as well as type-checking frontmatter with a schema -> `src/content/config.ts`. Adding a post/note is as simple as adding your .md(x) files to the `src/content/post` and/or `src/content/note` folder, the filename of which will be used as the slug/url. The posts included with this template are there as an example of how to structure your frontmatter. Additionally, the [Astro docs](https://docs.astro.build/en/guides/markdown-content/) has a detailed section on markdown pages. ### Post Frontmatter | Property (\* required) | Description | |------------------------|-------------| | **title \*** | Self-explanatory. Used as the text link to the post, the h1 on the post's page, and the page's title property. Has a max length of 60 chars, set in `src/content/config.ts`. | | **description \*** | Similar to above, used as the SEO description property. Has a min length of 50 and a max length of 160 chars, set in the post schema. | | **publishDate \*** | Again, pretty simple. To change the date format/locale, currently **en-GB**, update the date option in `src/site.config.ts`. Note you can also pass additional options to the `<FormattedDate>` component if required. | | **updatedDate** | This is an optional date representing when a post has been updated, in the same format as the `publishDate`. | | **seriesId** | An optional property that groups posts into a series. Posts with the same `seriesId` are considered part of the same series and can be displayed together in order. This allows for better organization of related content. | | **orderInSeries** | A numeric value defining the position of a post within a series. Lower values indicate earlier posts in the series, while higher values appear later. Used for sorting and navigation between posts within the same series. | | **tags** | Tags are optional with any created post. Any new tag(s) will be shown in `yourdomain.com/posts` & `yourdomain.com/tags`, and generate the page(s) `yourdomain.com/tags/[yourTag]`. | | **coverImage** | This is an optional object that will add a cover image to the top of a post. Include both `src`: "_path-to-image_" and `alt`: "_image alt_". You can view an example in `src/content/post/cover-image.md`. | | **ogImage** | This is an optional property. An OG Image will be generated automatically for every post where this property **isn't** provided. If you would like to create your own for a specific post, include this property and a link to your image, the theme will then skip automatically generating one. | | **draft** | This is an optional property as it is set to `false` by default in the schema. By setting it to `true`, the post will be filtered out of the production build in a number of places, including `getAllPosts()` calls, OG images, RSS feeds, and generated page[s]. You can view an example in `src/content/post/draft-post.md`. | ### Note Frontmatter | Property (\* required) | Description | | ---------------------- | -------------------------------------------------- | | title \* | string, max length 60 chars. | | description | to be used for the head meta description property. | | publishDate \* | ISO 8601 format with offsets allowed. | ### Frontmatter snippet Astro Citrus includes a helpful VSCode snippet which creates a frontmatter 'stub' for posts and note's, found here -> `.vscode/post.code-snippets`. Start typing the word `frontmatter` on your newly created .md(x) file to trigger it. Visual Studio Code snippets appear in IntelliSense via (⌃Space) on mac, (Ctrl+Space) on windows. ## Pagefind search This integration brings a static search feature for searching blog posts and notes. In its current form, pagefind only works once the site has been built. This theme adds a postbuild script that should be run after Astro has built the site. You can preview locally by running both build && postbuild. Search results only includes pages from posts and notes. If you would like to include other/all your pages, remove/re-locate the attribute `data-pagefind-body` to the article tag found in `src/layouts/BlogPost.astro` and `src/components/note/Note.astro`. It also allows you to filter posts by tags added in the frontmatter of blog posts. If you would rather remove this, remove the data attribute `data-pagefind-filter="tag"` from the link in `src/components/blog/Masthead.astro`. If you would rather not include this integration, simply remove the component `src/components/Search.astro`, and uninstall both `@pagefind/default-ui` & `pagefind` from package.json. You will also need to remove the postbuild script from here as well. You can reduce the initial css payload of your css, as demonstrated [here](https://github.com/artemkutsan/astro-citrus/pull/145#issue-1943779868), by lazy loading the web components styles. ## Analytics You may want to track the number of visitors you receive to your blog/website in order to understand trends and popular posts/pages you've created. There are a number of providers out there one could use, including web hosts such as [vercel](https://vercel.com/analytics), [netlify](https://www.netlify.com/products/analytics/), and [cloudflare](https://www.cloudflare.com/web-analytics/). This theme/template doesn't include a specific solution due to there being a number of use cases and/or options which some people may or may not use. You may be asked to included a snippet inside the **HEAD** tag of your website when setting it up, which can be found in `src/layouts/Base.astro`. Alternatively, you can add the snippet in `src/components/BaseHead.astro`. ## Deploy [Astro docs](https://docs.astro.build/en/guides/deploy/) has a great section and breakdown of how to deploy your own Astro site on various platforms and their idiosyncrasies. By default the site will be built (see [Commands](#commands) section above) to a `/dist` directory. ## Acknowledgment **This theme was inspired by [Astro Theme Cactus](https://github.com/chrismwilliams/astro-theme-cactus) by [Chriss Williams](https://github.com/chrismwilliams). Huge thanks to Chriss for his amazing work and inspiration!** 🚀👏 ## License MIT
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

astrowind
⭕️ AstroWind: A free template using Astro v7 and Tailwind CSS v4. Astro starter theme.
Astro · 博客

astro-paper
A minimal, accessible and SEO-friendly Astro blog theme.
Astro · 博客

fuwari
✨A static blog template built with Astro.
Astro · 博客

Firefly
Firefly 是一款基于 Astro 的静态博客主题,由 CuteLeaf 在 saicaca 的 Fuwari 模板基础上二次开发,主打清新美观的视觉风格。
Astro · 博客

astro-theme-cactus
A simple Astro theme. Use it to create your blog or website.
Astro · 作品集

astrofy
Astrofy is a free and open-source template for your Personal Portfolio Website built with Astro and TailwindCS…
Astro · 作品集
