blume 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/bin/blume.mjs +18 -0
  2. package/dist/cli/index.js +11989 -0
  3. package/dist/cli/index.js.map +141 -0
  4. package/docs/01-quickstart.mdx +99 -0
  5. package/docs/02-deployment.mdx +129 -0
  6. package/docs/advanced/api-reference.mdx +114 -0
  7. package/docs/advanced/blog.mdx +121 -0
  8. package/docs/advanced/changelog.mdx +113 -0
  9. package/docs/advanced/custom-pages.mdx +187 -0
  10. package/docs/advanced/meta.ts +7 -0
  11. package/docs/changelog/v0-1-0.mdx +12 -0
  12. package/docs/changelog/v0-2-0.mdx +16 -0
  13. package/docs/configuration/ai.mdx +228 -0
  14. package/docs/configuration/analytics.mdx +98 -0
  15. package/docs/configuration/customization.mdx +91 -0
  16. package/docs/configuration/export.mdx +70 -0
  17. package/docs/configuration/index.mdx +271 -0
  18. package/docs/configuration/meta.ts +15 -0
  19. package/docs/configuration/search.mdx +172 -0
  20. package/docs/configuration/seo.mdx +196 -0
  21. package/docs/configuration/theming.mdx +178 -0
  22. package/docs/content/components.mdx +565 -0
  23. package/docs/content/i18n.mdx +205 -0
  24. package/docs/content/index.mdx +161 -0
  25. package/docs/content/islands.mdx +94 -0
  26. package/docs/content/meta.mdx +119 -0
  27. package/docs/content/meta.ts +15 -0
  28. package/docs/content/navigation.mdx +168 -0
  29. package/docs/content/sources.mdx +216 -0
  30. package/docs/content/syntax.mdx +445 -0
  31. package/docs/index.mdx +112 -0
  32. package/docs/reference/cli.mdx +43 -0
  33. package/docs/reference/frontmatter.mdx +74 -0
  34. package/docs/reference/meta.ts +7 -0
  35. package/package.json +140 -6
  36. package/src/ai/ask.ts +93 -0
  37. package/src/ai/llms.ts +65 -0
  38. package/src/ai/markdown.ts +31 -0
  39. package/src/ai/mcp/data.ts +74 -0
  40. package/src/ai/mcp/discovery.ts +49 -0
  41. package/src/ai/mcp/server.ts +225 -0
  42. package/src/ai/mcp/tools.ts +47 -0
  43. package/src/assets/icon.png +0 -0
  44. package/src/astro/generate.ts +878 -0
  45. package/src/astro/index.ts +4 -0
  46. package/src/astro/integration.ts +74 -0
  47. package/src/astro/islands.ts +131 -0
  48. package/src/astro/markdown-negotiation.ts +68 -0
  49. package/src/astro/pages.ts +28 -0
  50. package/src/astro/templates.ts +1199 -0
  51. package/src/cli/commands/add.ts +81 -0
  52. package/src/cli/commands/build.ts +103 -0
  53. package/src/cli/commands/dev.ts +108 -0
  54. package/src/cli/commands/doctor.ts +74 -0
  55. package/src/cli/commands/eject.ts +57 -0
  56. package/src/cli/commands/init.ts +98 -0
  57. package/src/cli/commands/migrate.ts +39 -0
  58. package/src/cli/commands/preview.ts +39 -0
  59. package/src/cli/commands/sync.ts +52 -0
  60. package/src/cli/commands/validate.ts +60 -0
  61. package/src/cli/index.ts +35 -0
  62. package/src/cli/log.ts +37 -0
  63. package/src/cli/prepare.ts +80 -0
  64. package/src/components/Icon.astro +99 -0
  65. package/src/components/content/Accordion.astro +8 -0
  66. package/src/components/content/AccordionItem.astro +121 -0
  67. package/src/components/content/AutoTypeTable.astro +51 -0
  68. package/src/components/content/Badge.astro +124 -0
  69. package/src/components/content/Callout.astro +73 -0
  70. package/src/components/content/Card.astro +104 -0
  71. package/src/components/content/CardGroup.astro +14 -0
  72. package/src/components/content/CodeGroup.astro +13 -0
  73. package/src/components/content/Color.astro +15 -0
  74. package/src/components/content/ColorItem.astro +87 -0
  75. package/src/components/content/ColorRow.astro +10 -0
  76. package/src/components/content/Column.astro +6 -0
  77. package/src/components/content/Columns.astro +9 -0
  78. package/src/components/content/Expandable.astro +11 -0
  79. package/src/components/content/FileTree.astro +8 -0
  80. package/src/components/content/Frame.astro +70 -0
  81. package/src/components/content/GithubInfo.astro +110 -0
  82. package/src/components/content/Math.astro +24 -0
  83. package/src/components/content/Panel.astro +20 -0
  84. package/src/components/content/Prompt.astro +129 -0
  85. package/src/components/content/Step.astro +34 -0
  86. package/src/components/content/Steps.astro +20 -0
  87. package/src/components/content/Tab.astro +40 -0
  88. package/src/components/content/Tabs.astro +273 -0
  89. package/src/components/content/Tile.astro +42 -0
  90. package/src/components/content/Tooltip.astro +68 -0
  91. package/src/components/content/Tree.astro +300 -0
  92. package/src/components/content/TreeFile.astro +15 -0
  93. package/src/components/content/TreeFolder.astro +62 -0
  94. package/src/components/content/TypeTable.astro +106 -0
  95. package/src/components/content/Update.astro +66 -0
  96. package/src/components/content/Visibility.astro +12 -0
  97. package/src/components/content/Warning.astro +9 -0
  98. package/src/components/content/auto-type-table.ts +141 -0
  99. package/src/components/content/github-info.ts +79 -0
  100. package/src/components/content/mermaid-element.ts +68 -0
  101. package/src/components/github-mark.ts +9 -0
  102. package/src/components/index.ts +14 -0
  103. package/src/components/islands/AskAI.astro +12 -0
  104. package/src/components/islands/ask-ai.tsx +156 -0
  105. package/src/components/layout/Analytics.astro +63 -0
  106. package/src/components/layout/Banner.astro +50 -0
  107. package/src/components/layout/Breadcrumbs.astro +31 -0
  108. package/src/components/layout/Favicon.astro +15 -0
  109. package/src/components/layout/Fonts.astro +14 -0
  110. package/src/components/layout/Header.astro +188 -0
  111. package/src/components/layout/LanguageSwitcher.astro +56 -0
  112. package/src/components/layout/NavTree.astro +462 -0
  113. package/src/components/layout/PageActions.astro +438 -0
  114. package/src/components/layout/PageFeedback.astro +58 -0
  115. package/src/components/layout/Pagination.astro +56 -0
  116. package/src/components/layout/ReferenceLayout.astro +102 -0
  117. package/src/components/layout/RootLayout.astro +533 -0
  118. package/src/components/layout/Search.astro +608 -0
  119. package/src/components/layout/TableOfContents.astro +68 -0
  120. package/src/components/layout/analytics-client.ts +38 -0
  121. package/src/components/layout/nav-utils.ts +87 -0
  122. package/src/components/layout/overrides.ts +32 -0
  123. package/src/components/layout/search/algolia.ts +43 -0
  124. package/src/components/layout/search/endpoint.ts +22 -0
  125. package/src/components/layout/search/flexsearch.ts +52 -0
  126. package/src/components/layout/search/orama-cloud.ts +41 -0
  127. package/src/components/layout/search/orama.ts +26 -0
  128. package/src/components/layout/search/pagefind.ts +43 -0
  129. package/src/components/layout/search/types.ts +163 -0
  130. package/src/components/layout/search/typesense.ts +60 -0
  131. package/src/components/layout/toc-element.ts +108 -0
  132. package/src/core/bridge.ts +92 -0
  133. package/src/core/config.ts +112 -0
  134. package/src/core/content.ts +50 -0
  135. package/src/core/define-components.ts +34 -0
  136. package/src/core/define-meta.ts +20 -0
  137. package/src/core/deployment-env.ts +73 -0
  138. package/src/core/diagnostics.ts +104 -0
  139. package/src/core/graph.ts +128 -0
  140. package/src/core/i18n-ui.ts +171 -0
  141. package/src/core/i18n.ts +169 -0
  142. package/src/core/last-modified.ts +88 -0
  143. package/src/core/links.ts +336 -0
  144. package/src/core/load-module.ts +15 -0
  145. package/src/core/manifest.ts +126 -0
  146. package/src/core/meta.ts +97 -0
  147. package/src/core/navigation.ts +392 -0
  148. package/src/core/package-root.ts +37 -0
  149. package/src/core/project-graph.ts +153 -0
  150. package/src/core/project.ts +56 -0
  151. package/src/core/schema.ts +1057 -0
  152. package/src/core/server-features.ts +23 -0
  153. package/src/core/sources/assets.ts +77 -0
  154. package/src/core/sources/cache.ts +122 -0
  155. package/src/core/sources/filesystem.ts +99 -0
  156. package/src/core/sources/mdx-remote.ts +216 -0
  157. package/src/core/sources/mintlify.ts +161 -0
  158. package/src/core/sources/normalize.ts +227 -0
  159. package/src/core/sources/notion.ts +440 -0
  160. package/src/core/sources/portable-text.ts +143 -0
  161. package/src/core/sources/read.ts +36 -0
  162. package/src/core/sources/resolve.ts +158 -0
  163. package/src/core/sources/sanity.ts +218 -0
  164. package/src/core/sources/types.ts +105 -0
  165. package/src/core/types.ts +261 -0
  166. package/src/core/ui-packs/ar.ts +47 -0
  167. package/src/core/ui-packs/bg.ts +47 -0
  168. package/src/core/ui-packs/bn.ts +47 -0
  169. package/src/core/ui-packs/ca.ts +47 -0
  170. package/src/core/ui-packs/cs.ts +47 -0
  171. package/src/core/ui-packs/da.ts +47 -0
  172. package/src/core/ui-packs/de.ts +47 -0
  173. package/src/core/ui-packs/el.ts +47 -0
  174. package/src/core/ui-packs/es.ts +47 -0
  175. package/src/core/ui-packs/fa.ts +47 -0
  176. package/src/core/ui-packs/fi.ts +47 -0
  177. package/src/core/ui-packs/fr.ts +47 -0
  178. package/src/core/ui-packs/he.ts +47 -0
  179. package/src/core/ui-packs/hi.ts +47 -0
  180. package/src/core/ui-packs/hr.ts +47 -0
  181. package/src/core/ui-packs/hu.ts +47 -0
  182. package/src/core/ui-packs/id.ts +47 -0
  183. package/src/core/ui-packs/index.ts +87 -0
  184. package/src/core/ui-packs/it.ts +47 -0
  185. package/src/core/ui-packs/ja.ts +47 -0
  186. package/src/core/ui-packs/ko.ts +47 -0
  187. package/src/core/ui-packs/nl.ts +47 -0
  188. package/src/core/ui-packs/no.ts +47 -0
  189. package/src/core/ui-packs/pl.ts +47 -0
  190. package/src/core/ui-packs/pt-br.ts +47 -0
  191. package/src/core/ui-packs/pt.ts +47 -0
  192. package/src/core/ui-packs/ro.ts +47 -0
  193. package/src/core/ui-packs/ru.ts +47 -0
  194. package/src/core/ui-packs/sk.ts +47 -0
  195. package/src/core/ui-packs/sr.ts +47 -0
  196. package/src/core/ui-packs/sv.ts +47 -0
  197. package/src/core/ui-packs/th.ts +47 -0
  198. package/src/core/ui-packs/tr.ts +47 -0
  199. package/src/core/ui-packs/uk.ts +47 -0
  200. package/src/core/ui-packs/vi.ts +47 -0
  201. package/src/core/ui-packs/zh-tw.ts +47 -0
  202. package/src/core/ui-packs/zh.ts +47 -0
  203. package/src/core/version.ts +23 -0
  204. package/src/deploy/robots.ts +20 -0
  205. package/src/deploy/rss.ts +128 -0
  206. package/src/deploy/sitemap.ts +28 -0
  207. package/src/index.ts +27 -0
  208. package/src/markdown/code-title.ts +71 -0
  209. package/src/markdown/directives.ts +83 -0
  210. package/src/markdown/heading-anchors.ts +137 -0
  211. package/src/markdown/index.ts +159 -0
  212. package/src/markdown/inline-code.ts +108 -0
  213. package/src/markdown/language-icon.ts +172 -0
  214. package/src/markdown/math.ts +32 -0
  215. package/src/markdown/mdast.ts +48 -0
  216. package/src/markdown/mermaid.ts +37 -0
  217. package/src/markdown/package-commands.ts +159 -0
  218. package/src/markdown/package-install.ts +40 -0
  219. package/src/migrate/fumadocs/config.ts +106 -0
  220. package/src/migrate/fumadocs/content.ts +365 -0
  221. package/src/migrate/fumadocs/frontmatter.ts +18 -0
  222. package/src/migrate/fumadocs/index.ts +252 -0
  223. package/src/migrate/fumadocs/meta.ts +114 -0
  224. package/src/migrate/migrate.ts +53 -0
  225. package/src/migrate/mintlify/config.ts +1040 -0
  226. package/src/migrate/mintlify/content.ts +98 -0
  227. package/src/migrate/mintlify/frontmatter.ts +126 -0
  228. package/src/migrate/mintlify/i18n.ts +51 -0
  229. package/src/migrate/mintlify/icons.ts +128 -0
  230. package/src/migrate/mintlify/index.ts +266 -0
  231. package/src/migrate/mintlify/snippets.ts +305 -0
  232. package/src/migrate/mintlify/transform.ts +81 -0
  233. package/src/migrate/nextra/content.ts +46 -0
  234. package/src/migrate/nextra/frontmatter.ts +40 -0
  235. package/src/migrate/nextra/index.ts +374 -0
  236. package/src/migrate/nextra/meta.ts +266 -0
  237. package/src/migrate/shared.ts +623 -0
  238. package/src/migrate/starlight/config.ts +459 -0
  239. package/src/migrate/starlight/content.ts +78 -0
  240. package/src/migrate/starlight/frontmatter.ts +111 -0
  241. package/src/migrate/starlight/i18n.ts +54 -0
  242. package/src/migrate/starlight/index.ts +131 -0
  243. package/src/og/card.ts +92 -0
  244. package/src/og/index.ts +2 -0
  245. package/src/openapi/scalar.ts +246 -0
  246. package/src/registry/eject.ts +263 -0
  247. package/src/registry/registry.ts +100 -0
  248. package/src/registry/rewrite-imports.ts +39 -0
  249. package/src/runtime/index.ts +14 -0
  250. package/src/search/build.ts +23 -0
  251. package/src/search/documents.ts +165 -0
  252. package/src/search/orama-index.ts +66 -0
  253. package/src/search/providers.ts +91 -0
  254. package/src/search/sync/algolia.ts +30 -0
  255. package/src/search/sync/index.ts +50 -0
  256. package/src/search/sync/orama-cloud.ts +40 -0
  257. package/src/search/sync/typesense.ts +65 -0
  258. package/src/seo/jsonld.ts +113 -0
  259. package/src/theme/entry.ts +608 -0
  260. package/src/theme/fonts.ts +198 -0
  261. package/src/theme/icons.ts +184 -0
  262. package/src/theme/palette.ts +143 -0
  263. package/src/theme/twoslash.ts +81 -0
@@ -0,0 +1,445 @@
1
+ ---
2
+ title: Syntax
3
+ description: Every Markdown and MDX feature Blume renders — formatting, lists, tables, callouts, code blocks, package installs, and math.
4
+ ---
5
+
6
+ Blume renders standard Markdown and MDX with a curated, GitHub-flavored feature
7
+ set — no imports, no configuration. Write content the way you already do; this
8
+ page shows everything that's supported, with a live preview and the source for
9
+ each.
10
+
11
+ ## Headings
12
+
13
+ Structure a page with headings. Blume renders your frontmatter `title` as the
14
+ page heading, so start your content at `##` — `##` through `####` become entries
15
+ in the table of contents. Every `##`–`######` heading is also wrapped in a link
16
+ to its own anchor, so readers can click a heading to copy, bookmark, or share a
17
+ permalink straight to that section (hover to reveal the `#`). Turn this off with
18
+ `markdown: { headingAnchors: false }` in `blume.config.ts`.
19
+
20
+ ```md
21
+ ## Section
22
+
23
+ ### Subsection
24
+
25
+ #### Detail
26
+ ```
27
+
28
+ ## Emphasis
29
+
30
+ Inline formatting for stressing words, marking deletions, and showing code or
31
+ keystrokes mid-sentence.
32
+
33
+ **Bold**, _italic_, ~~strikethrough~~, and `inline code`.
34
+
35
+ ```md
36
+ **Bold**, _italic_, ~~strikethrough~~, and `inline code`.
37
+ ```
38
+
39
+ ## Superscript and subscript
40
+
41
+ For footnote markers, ordinals, and scientific or chemical notation inline.
42
+
43
+ E = mc^2^ and H~2~O.
44
+
45
+ ```md
46
+ E = mc^2^ and H~2~O.
47
+ ```
48
+
49
+ ## Blockquotes
50
+
51
+ Set off a quotation, callout aside, or an editorial note from the surrounding
52
+ text.
53
+
54
+ > Documentation that's fast, AI-ready, and zero-config — down to the template.
55
+
56
+ ```md
57
+ > Documentation that's fast, AI-ready, and zero-config — down to the template.
58
+ ```
59
+
60
+ ## Lists
61
+
62
+ Use unordered lists for unordered sets, ordered lists for sequences, and task
63
+ lists for checklists and roadmaps.
64
+
65
+ - Markdown-first authoring
66
+ - Static by default
67
+ - Opt into server features
68
+ - Own your output
69
+
70
+ 1. Install Blume
71
+ 2. Write a page
72
+ 3. Ship it
73
+
74
+ - [x] Scaffold the project
75
+ - [ ] Write the first guide
76
+
77
+ ```md
78
+ - Markdown-first authoring
79
+ - Static by default
80
+ - Opt into server features
81
+ - Own your output
82
+
83
+ 1. Install Blume
84
+ 2. Write a page
85
+ 3. Ship it
86
+
87
+ - [x] Scaffold the project
88
+ - [ ] Write the first guide
89
+ ```
90
+
91
+ ## Tables
92
+
93
+ Tabulate structured data — config options, comparison matrices, parameter lists.
94
+ Use colons in the divider row to align columns.
95
+
96
+ | Command | Description | Output |
97
+ | ------------- | --------------------- | :-----: |
98
+ | `blume dev` | Start the dev server | — |
99
+ | `blume build` | Build the static site | `dist/` |
100
+
101
+ ```md
102
+ | Command | Description | Output |
103
+ | ------------- | --------------------- | :-----: |
104
+ | `blume dev` | Start the dev server | — |
105
+ | `blume build` | Build the static site | `dist/` |
106
+ ```
107
+
108
+ ## Links and images
109
+
110
+ Link to other pages or external sites. Images accept any path under `public/` or
111
+ a remote URL.
112
+
113
+ Read the [quickstart](/docs/quickstart) to get started.
114
+
115
+ ```md
116
+ Read the [quickstart](/docs/quickstart) to get started.
117
+
118
+ ![Alt text](/screenshot.png)
119
+ ```
120
+
121
+ Content images are click-to-zoom by default — readers can click any image to open
122
+ it in a lightbox. Turn this off with `markdown: { imageZoom: false }` in
123
+ `blume.config.ts`, or opt a single image out with `data-no-zoom`.
124
+
125
+ ## Horizontal rule
126
+
127
+ Separate major shifts in topic within a long page.
128
+
129
+ ---
130
+
131
+ ```md
132
+ ---
133
+ ```
134
+
135
+ ## Code blocks
136
+
137
+ Fenced code blocks are syntax-highlighted with a header showing the language —
138
+ with a brand icon for recognized languages — and a copy button. Add a **title**
139
+ after the language — typically a filename — and it replaces the language label in
140
+ the header.
141
+
142
+ ```ts blume.config.ts
143
+ import { defineConfig } from "blume";
144
+
145
+ export default defineConfig({
146
+ title: "My docs",
147
+ });
148
+ ```
149
+
150
+ ````md
151
+ ```ts blume.config.ts
152
+ import { defineConfig } from "blume";
153
+
154
+ export default defineConfig({
155
+ title: "My docs",
156
+ });
157
+ ```
158
+ ````
159
+
160
+ Inline code can be highlighted too: add a `{:lang}` marker inside a backtick span
161
+ and it's colored like a tiny code block — `useState(){:js}` or
162
+ `T extends object{:ts}`. Turn it on with `markdown: { code: { inline: true } }`.
163
+
164
+ ### Line numbers
165
+
166
+ Append `lineNumbers` to render a line-number gutter — on its own or alongside a
167
+ title:
168
+
169
+ ```ts server.ts lineNumbers
170
+ import { serve } from "blume";
171
+
172
+ serve({ port: 3000 });
173
+ ```
174
+
175
+ ````md
176
+ ```ts server.ts lineNumbers
177
+ import { serve } from "blume";
178
+
179
+ serve({ port: 3000 });
180
+ ```
181
+ ````
182
+
183
+ ### Highlighting
184
+
185
+ Annotate code with GitHub-style comments to draw attention to lines, words, and
186
+ changes. The comments are stripped from the rendered output, so the code stays
187
+ copy-paste clean. All four are on by default — no configuration.
188
+
189
+ Mark a line with `// [!code highlight]` to give it a highlighted background:
190
+
191
+ ```ts
192
+ const config = defineConfig({
193
+ title: "My docs", // [!code highlight]
194
+ });
195
+ ```
196
+
197
+ Show changes with `// [!code ++]` for additions and `// [!code --]` for
198
+ removals, rendered as a green/red diff:
199
+
200
+ ```ts
201
+ export default defineConfig({
202
+ title: "My docs", // [!code --]
203
+ title: "Blume docs", // [!code ++]
204
+ });
205
+ ```
206
+
207
+ Highlight every occurrence of a term on a line with `// [!code word:serve]`:
208
+
209
+ ```ts
210
+ import { serve } from "blume"; // [!code word:serve]
211
+
212
+ serve({ port: 3000 });
213
+ ```
214
+
215
+ Dim everything except the lines you mark with `// [!code focus]` (the rest
216
+ sharpens on hover):
217
+
218
+ ```ts
219
+ export default defineConfig({
220
+ title: "My docs", // [!code focus]
221
+ description: "Built with Blume",
222
+ });
223
+ ```
224
+
225
+ Or highlight lines by **number** instead of comments — useful when you can't edit
226
+ the code. Put a brace range after the language; single lines, comma lists, and
227
+ `start-end` spans all work:
228
+
229
+ ```ts {1,4-5}
230
+ import { defineConfig } from "blume";
231
+
232
+ export default defineConfig({
233
+ title: "My docs",
234
+ description: "Built with Blume",
235
+ });
236
+ ```
237
+
238
+ ````md
239
+ ```ts {1,4-5}
240
+ import { defineConfig } from "blume";
241
+
242
+ export default defineConfig({
243
+ title: "My docs",
244
+ description: "Built with Blume",
245
+ });
246
+ ```
247
+ ````
248
+
249
+ ### Display types
250
+
251
+ Mark a TypeScript block `twoslash` to display real types straight from the
252
+ compiler — powered by [Twoslash](https://shiki.style/packages/twoslash). Hover
253
+ any token to see its inferred type, and add an inline `^?` query to pin a type
254
+ below the line.
255
+
256
+ ```ts twoslash
257
+ const config = {
258
+ title: "My docs",
259
+ version: 1,
260
+ };
261
+
262
+ config.title;
263
+ // ^?
264
+ ```
265
+
266
+ ````md
267
+ ```ts twoslash
268
+ const config = { title: "My docs", version: 1 };
269
+
270
+ config.title;
271
+ // ^?
272
+ ```
273
+ ````
274
+
275
+ :::note
276
+ Hide the language icons or wrap long lines instead of scrolling with
277
+ `markdown: { code: { icons: false, wrap: true } }` in `blume.config.ts`.
278
+ :::
279
+
280
+ ## Package install
281
+
282
+ A `package-install` block turns a single install command into a tabbed snippet
283
+ for npm, pnpm, yarn, and bun — so readers copy the one that matches their setup.
284
+
285
+ ```package-install
286
+ npm i blume
287
+ ```
288
+
289
+ ````md
290
+ ```package-install
291
+ npm i blume
292
+ ```
293
+ ````
294
+
295
+ ## Diagrams
296
+
297
+ A `mermaid` block renders a [Mermaid](https://mermaid.js.org) diagram — flowcharts,
298
+ sequence diagrams, and more — straight from text. Diagrams follow the active color
299
+ theme and re-render when it changes.
300
+
301
+ ```mermaid
302
+ flowchart LR
303
+ A[Markdown] --> B{blume build}
304
+ B --> C[Static HTML]
305
+ B --> D[llms.txt]
306
+ ```
307
+
308
+ ````md
309
+ ```mermaid
310
+ flowchart LR
311
+ A[Markdown] --> B{blume build}
312
+ B --> C[Static HTML]
313
+ B --> D[llms.txt]
314
+ ```
315
+ ````
316
+
317
+ Diagrams render on the client, so this is an MDX-only feature, and the Mermaid
318
+ library loads only on pages that include one.
319
+
320
+ ## Callouts
321
+
322
+ Callouts pull a reader's attention to context, advice, or risk. Write them as
323
+ `:::type` directives; add a title in brackets, like `:::warning[Heads up]`.
324
+
325
+ ### Note
326
+
327
+ Neutral, supporting context the reader should keep in mind.
328
+
329
+ :::note
330
+ Blume regenerates `.blume/` on every run — never edit it by hand.
331
+ :::
332
+
333
+ ```md
334
+ :::note
335
+ Blume regenerates `.blume/` on every run — never edit it by hand.
336
+ :::
337
+ ```
338
+
339
+ ### Tip
340
+
341
+ A helpful shortcut or best practice that isn't required but makes life easier.
342
+
343
+ :::tip
344
+ Set `deployment.site` so sitemaps and Open Graph images use absolute URLs.
345
+ :::
346
+
347
+ ```md
348
+ :::tip
349
+ Set `deployment.site` so sitemaps and Open Graph images use absolute URLs.
350
+ :::
351
+ ```
352
+
353
+ ### Success
354
+
355
+ Confirm a positive outcome or that a step completed as expected.
356
+
357
+ :::success
358
+ Your docs built successfully and are ready to deploy.
359
+ :::
360
+
361
+ ```md
362
+ :::success
363
+ Your docs built successfully and are ready to deploy.
364
+ :::
365
+ ```
366
+
367
+ ### Warning
368
+
369
+ Flag something that needs care to avoid a mistake or surprising behavior.
370
+
371
+ :::warning[Heads up]
372
+ Switching to `output: "server"` requires an adapter before you can deploy.
373
+ :::
374
+
375
+ ```md
376
+ :::warning[Heads up]
377
+ Switching to `output: "server"` requires an adapter before you can deploy.
378
+ :::
379
+ ```
380
+
381
+ ### Danger
382
+
383
+ Call out a destructive or breaking action that can't easily be undone.
384
+
385
+ :::danger
386
+ `blume eject` is a one-way step — the generated Astro project becomes yours.
387
+ :::
388
+
389
+ ```md
390
+ :::danger
391
+ `blume eject` is a one-way step — the generated Astro project becomes yours.
392
+ :::
393
+ ```
394
+
395
+ ### Info
396
+
397
+ An informational aside; an alias-friendly default that reads as neutral.
398
+
399
+ :::info
400
+ The core theme ships zero client JavaScript.
401
+ :::
402
+
403
+ ```md
404
+ :::info
405
+ The core theme ships zero client JavaScript.
406
+ :::
407
+ ```
408
+
409
+ The names `caution`, `error`, `important`, and `warn` are accepted as aliases for
410
+ `warning`, `danger`, `note`, and `warning` respectively.
411
+
412
+ ## Math
413
+
414
+ Render LaTeX with KaTeX for formulas in prose or as centered blocks — useful for
415
+ math-heavy or scientific docs. Inline math goes in `$…$`; block math in `$$…$$`.
416
+
417
+ The Pythagorean theorem is $a^2 + b^2 = c^2$.
418
+
419
+ $$
420
+ \int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}
421
+ $$
422
+
423
+ ```md
424
+ The Pythagorean theorem is $a^2 + b^2 = c^2$.
425
+
426
+ $$
427
+ \int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}
428
+ $$
429
+ ```
430
+
431
+ :::note
432
+ Math is opt-in because `$` is common in prose and code. Enable it with
433
+ `markdown: { math: true }` in `blume.config.ts`.
434
+ :::
435
+
436
+ ## Smart punctuation
437
+
438
+ Blume converts straight quotes and dashes to typographic equivalents as you
439
+ write, so prose reads like it was typeset — no special characters required.
440
+
441
+ "Quotes" become curly, -- becomes an en dash, --- an em dash, and ... an ellipsis.
442
+
443
+ ```md
444
+ "Quotes" become curly, -- becomes an en dash, --- an em dash, and ... an ellipsis.
445
+ ```
package/docs/index.mdx ADDED
@@ -0,0 +1,112 @@
1
+ ---
2
+ title: Introduction
3
+ description: Blume is an open-source, markdown-first documentation framework on Astro and Vite — fast, AI-ready, and zero-config down to the template.
4
+ sidebar:
5
+ label: Introduction
6
+ order: 0
7
+ ---
8
+
9
+ Drop Markdown or MDX into a folder, run `blume dev`, and get a production-grade
10
+ docs site — navigation, search, theming, Open Graph images, and a rich component
11
+ library — with no app boilerplate to write or maintain.
12
+
13
+ <CardGroup cols={2}>
14
+ <Card title="Quickstart" href="/docs/quickstart" icon="rocket">
15
+ Install Blume and ship your first page in minutes.
16
+ </Card>
17
+ <Card title="Configuration" href="/docs/configuration" icon="file">
18
+ Tune the title, theme, search, and deployment.
19
+ </Card>
20
+ </CardGroup>
21
+
22
+ ## Why Blume exists
23
+
24
+ Blume is the answer to a problem I kept trying to solve at Vercel: documentation
25
+ should be _fast_, _AI-ready_, and require _zero configuration_ — down to not
26
+ needing a starter template at all.
27
+
28
+ Most docs tools hand you a project to own before you've written a word: an app to
29
+ scaffold, a framework to learn, a template to keep in sync with upstream. Blume
30
+ flips that around. The framework _is_ the template, so the only thing you ever
31
+ touch is your content. When you outgrow the defaults, you add configuration one
32
+ file at a time — and you can `blume eject` to a plain Astro project the day you
33
+ want full control.
34
+
35
+ — Hayden Bleasel
36
+
37
+ ## What makes Blume different
38
+
39
+ ### Fast by default
40
+
41
+ Blume builds on Astro and Vite and renders static HTML by default — fast,
42
+ cacheable, and cheap to host. The core theme is React-free and ships **zero
43
+ client JavaScript**, so pages score well on Core Web Vitals out of the box. Dev
44
+ startup and hot reload feel Vite-native, and you opt into server features only
45
+ when you need them.
46
+
47
+ ### AI-ready out of the box
48
+
49
+ Every Blume site speaks fluent machine. It emits [`llms.txt` and
50
+ `llms-full.txt`](/docs/configuration/ai), serves any page's raw Markdown by
51
+ appending `.md` to its URL, and gives readers **Copy as Markdown** and **Open in
52
+ chat** actions on every page. Add an optional in-page **Ask AI** assistant, or
53
+ host an [**MCP server**](/docs/configuration/ai#mcp-server) so coding agents like
54
+ Claude Code and Cursor can search and read your docs directly — no scraping, no
55
+ hosted service. Your Markdown is the source of truth for both humans and models.
56
+
57
+ ### Zero configuration — even the template
58
+
59
+ A folder of docs is a complete project. There's no starter to clone, no Astro or
60
+ Tailwind to set up, and no template to maintain. Navigation is inferred from your
61
+ files, [search](/docs/configuration/search) works in dev and production without a hosted
62
+ service, and theming is a handful of tokens. Everything has a sensible default;
63
+ configuration is something you reach for, not something you start with.
64
+
65
+ ### Type-safe to the core
66
+
67
+ Your [`blume.config.ts`](/docs/configuration) and every
68
+ [`meta.ts`](/docs/content/meta) are real TypeScript — validated by a schema and
69
+ authored with `defineConfig` and `defineMeta`. Your editor autocompletes every
70
+ option and catches typos, invalid values, and missing fields as you type, long
71
+ before a build. Configuration is code you can refactor, compute, and trust — not
72
+ loosely-typed YAML.
73
+
74
+ ## Everything included
75
+
76
+ - **Components** — callouts, cards, steps, tabs, accordions, badges, file trees,
77
+ and parameter tables, usable in MDX with [no imports](/docs/content/components).
78
+ - **Local search** — Orama works in dev and production; Pagefind is one flag away
79
+ for large sites. No hosted index.
80
+ - **AI** — [`llms.txt`, raw Markdown URLs, Copy as Markdown, Open in chat, an
81
+ Ask AI assistant, and a hosted MCP server](/docs/configuration/ai).
82
+ - **Navigation** — inferred from files, refined with `meta.ts` or config.
83
+ - **SEO** — metadata, Open Graph images, RSS feeds, and JSON-LD, [built in](/docs/configuration/seo).
84
+ - **Customization** — component overrides, React islands, custom pages, theme
85
+ tokens, and a source-component registry via `blume add`.
86
+ - **Migration** — `blume migrate mintlify | starlight | fumadocs`.
87
+ - **Eject** — `blume eject` produces a standalone Astro project that still uses
88
+ the `blume` package.
89
+
90
+ ## How it works
91
+
92
+ The Blume CLI discovers your content, builds a content graph, and generates a
93
+ hidden Astro project under `.blume/` that it drives for dev and build. The
94
+ generated runtime is an implementation detail — you write Markdown, Blume handles
95
+ the rest — until you choose to eject and own it.
96
+
97
+ ## Next steps
98
+
99
+ <CardGroup cols={2}>
100
+ <Card title="Configuration" href="/docs/configuration" icon="file">
101
+ Tune the title, theme, search, and deployment.
102
+ </Card>
103
+ <Card title="Components" href="/docs/content/components" icon="folder">
104
+ Explore the built-in component library.
105
+ </Card>
106
+ <Card title="AI" href="/docs/configuration/ai" icon="lightbulb">
107
+ Ship `llms.txt` and an Ask AI assistant.
108
+ </Card>
109
+ <Card title="CLI" href="/docs/reference/cli" icon="rocket">
110
+ Every `blume` command and flag.
111
+ </Card>
112
+ </CardGroup>
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: CLI
3
+ description: The Blume command-line interface.
4
+ ---
5
+
6
+ ```bash
7
+ blume <command> [options]
8
+ ```
9
+
10
+ ## Commands
11
+
12
+ | Command | Description |
13
+ | ---------------------- | ------------------------------------------------------ |
14
+ | `blume init` | Scaffold a minimal project. |
15
+ | `blume dev` | Start the dev server with hot reload. |
16
+ | `blume build` | Build the static (or server) site. |
17
+ | `blume preview` | Preview the last build. |
18
+ | `blume add <item>` | Install a source component from the registry. |
19
+ | `blume migrate <tool>` | Migrate from Mintlify, Starlight, Nextra, or Fumadocs. |
20
+ | `blume eject` | Promote the runtime into a standalone Astro app. |
21
+ | `blume doctor` | Diagnose config and content problems. |
22
+ | `blume validate` | Validate links across your content. |
23
+
24
+ ## Common flags
25
+
26
+ - `blume dev --host --port <n> --open`
27
+ - `blume build --strict` — fail on diagnostics.
28
+ - `blume eject --yes` — skip the confirmation prompt.
29
+ - `blume validate --external` — also check external links over the network.
30
+ - `blume validate --strict` — exit non-zero on warnings too.
31
+
32
+ ## Validating links
33
+
34
+ `blume validate` checks every link discovered in your content:
35
+
36
+ - **Internal page links** (`/guides/intro`, `./sibling`) must resolve to a real
37
+ page — broken ones are reported as errors.
38
+ - **Anchor links** (`#section`, `/guides/intro#setup`) must match a heading on
39
+ the target page — misses are warnings.
40
+ - **Asset links** (`/logo.png`) are checked against the `public/` directory.
41
+ - **External links** are only checked with `--external` (off by default since it
42
+ requires the network); dead links (404/410/unreachable) are errors, while
43
+ rate-limited or transient responses (403/429/5xx/timeout) are warnings.
@@ -0,0 +1,74 @@
1
+ ---
2
+ title: Frontmatter
3
+ description: The page metadata schema.
4
+ ---
5
+
6
+ Every page accepts the following frontmatter. All fields are optional.
7
+
8
+ <TypeTable
9
+ type={{
10
+ title: { type: "string", description: "Page title." },
11
+ description: { type: "string", description: "Page summary." },
12
+ type: {
13
+ type: "string",
14
+ default: "doc",
15
+ description: "Content type. blog/changelog drive feeds.",
16
+ },
17
+ date: {
18
+ type: "string",
19
+ description: "Publish date for blog/changelog feeds (ISO or YAML date).",
20
+ },
21
+ slug: { type: "string", description: "Override the generated slug." },
22
+ draft: {
23
+ type: "boolean",
24
+ default: "false",
25
+ description: "Exclude from production builds.",
26
+ },
27
+ }}
28
+ />
29
+
30
+ ## Sidebar
31
+
32
+ ```yaml lineNumbers
33
+ sidebar:
34
+ label: Install
35
+ order: 2
36
+ icon: Download
37
+ hidden: false
38
+ ```
39
+
40
+ ## SEO
41
+
42
+ ```yaml lineNumbers
43
+ seo:
44
+ title: Install Blume
45
+ image: /og/install.png
46
+ noindex: false
47
+ ```
48
+
49
+ ## Search
50
+
51
+ ```yaml lineNumbers
52
+ search:
53
+ exclude: false
54
+ tags: [api]
55
+ ```
56
+
57
+ ## Changelog
58
+
59
+ Changelog entries (`type: changelog`) accept an optional `changelog` object for
60
+ richer feed and display metadata:
61
+
62
+ ```yaml lineNumbers
63
+ type: changelog
64
+ changelog:
65
+ version: 1.2.0
66
+ date: 2026-06-20
67
+ category: Features
68
+ ```
69
+
70
+ `date` may live here or at the top level — both feed the
71
+ [changelog RSS feed](/docs/content#feeds). See [Changelog](/docs/advanced/changelog) for the
72
+ generated timeline page and feed.
73
+
74
+ Schemas are exported from `blume/schema` for editor and migration tooling.
@@ -0,0 +1,7 @@
1
+ import { defineMeta } from "blume";
2
+
3
+ export default defineMeta({
4
+ order: 6,
5
+ pages: ["frontmatter", "cli"],
6
+ title: "Reference",
7
+ });