Loading repository data…
Loading repository data…
SlateDesign / repository
A minimal, elegant, and modern blog theme built with Astro.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
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.
# 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/postdirectory, 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'
| 'link'
| 'mail'
| 'notion'
| 'rss'
| 'threads'
| 'x'
| 'youtube'
| { svg: string }
apiKey at algoliaalgolia in slate.config.ts+ button on Follow, select RSS subscription, and enter the rss link (usually [site]/rss.xml, where site is the value of site in slate.config.ts)| 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:
Using ::: markers
:::info
This is an information prompt
:::

Here are some blogs built with this theme: