English · 中文
We love writing and sharing, and we appreciate well-crafted products. That’s why we created this minimalist theme, focusing on content itself, providing a smooth and pure writing and reading experience. Built on the latest framework, it’s faster, lighter, and more efficient.
It also works seamlessly with Obsidian, helping you turn your notes into published posts effortlessly.
- Minimalist style theme, adaptable to multiple platforms
- Support
light
anddark
mode. - Zero-based quick start, foolproof configuration, easy deployment
- Support for article drafts, local preview, and automatic draft filtering in production builds
- Default RSS generation with Follow subscription authentication
- Integrated Algolia search
- Complete SEO optimization to improve search engine rankings
- Astro + React + Typescript
- Tailwindcss + @radix-ui/colors
- Updated to Tailwind CSS v4.0 (Jan 10, 2025)
- Docsearch
# Start local server
npm run dev
# or
yarn dev
# or
pnpm dev
# Build
npm run build
# or
yarn build
# or
pnpm build
If you fork the repository and set it to private, you will lose the association with the upstream repository by default. You can sync the latest version of Slate Blog by running
pnpm sync-latest
.
- plugins/ # Custom plugins
- src/
├── assets/ # Asset files
├── components/ # Components
├── content/ # Content collections
├── helpers/ # Business logic
├── pages/ # Pages
└── typings/ # Common types
Articles are stored in the
src/content/post
directory, supporting markdown and mdx formats. The filename is the path name. For example,src/content/post/my-first-post.md
=>https://your-blog.com/blog/my-first-post
.
Theme configuration is done through slate.config.ts
in the root directory.
Option | Description | Type | Default |
---|---|---|---|
site | Final deployment link | string |
- |
title | Website title | string |
- |
description | Website description | string |
- |
lang | Language | string |
zh-CN |
theme | Theme | { mode: 'auto' | 'light' | 'dark', enableUserChange: boolean } |
{ mode: 'auto', enableUserChange: true } |
avatar | Avatar | string |
- |
sitemap | Website sitemap configuration | SitemapOptions | - |
readTime | Show reading time | boolean |
false |
lastModified | Show last modified time | boolean |
false |
algolia | Docsearch configuration | { appId: string, apiKey: string, indexName: string } |
- |
follow | Follow subscription authentication configuration | { feedId: string, userId: string } |
- |
footer | Website footer configuration | { copyright: string } |
- |
socialLinks | Social Links Configuration | { icon: [SocialLinkIcon](#SocialLinkIcon), link: string, ariaLabel?: string } |
- |
type SocialLinkIcon =
| 'dribbble'
| 'facebook'
| 'figma'
| 'github'
| 'instagram'
| 'jike'
| 'link'
| 'notion'
| 'npm'
| 'rednote'
| 'rss'
| 'threads'
| 'stackoverflow'
| 'weibo'
| 'x'
| 'youtube'
| { svg: string }
- Deploy your site first
- Apply for an
apiKey
at algolia - After successful application, configure
algolia
inslate.config.ts
- Redeploy
- Register a follow account
- Deploy your site
- Click the
+
button onfollow
, selectRSS
subscription, and enter therss
link (usually[site]/rss.xml
, wheresite
is the valu 9330 e ofsite
inslate.config.ts
) - Redeploy
Option | Description | Type | Required |
---|---|---|---|
title | Article title | string |
Yes |
description | Article description | string |
No |
tags | Article tags | string[] |
No |
draft | Whether it's a draft. When not provided or false , pubDate must be provided; drafts are only visible in local preview |
boolean |
No |
pubDate | Article publication date | date |
No, required when draft is false |
For more details, check the src/content/config.ts
file
---
title: 40 questions
description: This repo maintains revisons and translations to the list of 40 questions I ask myself each year and each decade.
tags:
- Life
- Thinking
- Writing
pubDate: 2025-01-06
---
In addition to standard Markdown syntax, the following extended syntax is supported:
- Headers, lists, blockquotes, code blocks and other basic syntax
- Tables
- Links and images
- Bold, italic, and
strikethroughtext
Using :::
markers
:::info
This is an information prompt
:::
- Inline formula:
$E = mc^2$ - Block formula: $$ E = mc^2 $$

- Fixed known issues
- Upgraded to support Tailwind CSS v4.0
- Added dark mode support
- Fixed known issues