# 介绍

minidocs 帮你用 Astro 搭建文档站。它不提供现成的站点和主题：内容放在 Astro 的内容集合里，页面由你自己写，minidocs 提供写这些页面要用到的数据、组件和样式。

## 和主题式框架的区别

主题式的文档框架交付一个完整的站点，你通过配置项定制它。配置项覆盖不到的需求，就要去替换主题里的组件。

在 minidocs 里，页面布局从一开始就是你的代码。侧边栏放在哪、显示什么、要不要加一个徽标，都直接写在布局文件里，不需要框架事先留好位置。

## minidocs 提供什么

- **数据**：从内容集合算出文档树、当前页面的位置、上一页和下一页
- **组件**：侧边栏、本页目录、翻页、提示框、搜索对话框这些 Astro 组件。折叠、窄屏下的抽屉、目录高亮这些交互已经包含在内
- **样式**：一套可选的默认样式，你写的样式总是优先
- **内容处理**：正文里直接链接到 `.md` 和 `.mdx` 文件，用 `:::tip` 写提示框，为每个页面生成 Markdown 版本和 llms.txt

每一部分都可以单独使用。某个组件不合适，就换成自己写的 HTML；不需要默认样式，就不引入它。

## 数据经过你的代码

组件不会自己去读取文档树。你从文档树里取出数据，再通过属性传给组件。所以 frontmatter 里的任何字段都可以直接用在侧边栏里，比如给页面加一个徽标：

```astro
<Sidebar.Link {...nav.of(node)}>
  {node.label}
  {node.page?.entry.data.badge && <span class="badge">{node.page.entry.data.badge}</span>}
</Sidebar.Link>
```

这是侧边栏里的一项：`node` 是文档树里的一个页面，`nav.of(node)` 给出它的链接和是否是当前页面。`badge` 只要在集合的 schema 里声明了，就有完整的类型。

接下来，[快速开始](/docs/getting-started.md)从零搭出一个文档站。
