@clarify-labs/templates 0.5.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 (34) hide show
  1. package/LICENSE +1 -0
  2. package/complete/clarify.ts +94 -0
  3. package/complete/index.html +11 -0
  4. package/complete/public/favicon.svg +11 -0
  5. package/complete/public/logo.svg +11 -0
  6. package/complete/source/en-US/api/embedding.mdx +46 -0
  7. package/complete/source/en-US/api.openapi.json +319 -0
  8. package/complete/source/en-US/changelog.mdx +20 -0
  9. package/complete/source/en-US/guides/navigation.mdx +78 -0
  10. package/complete/source/en-US/guides/writing-content.mdx +102 -0
  11. package/complete/source/en-US/index.mdx +77 -0
  12. package/complete/source/en-US/reference/components.mdx +65 -0
  13. package/complete/source/en-US/reference/configuration.mdx +76 -0
  14. package/complete/source/zh-CN/guides/writing-content.mdx +30 -0
  15. package/complete/source/zh-CN/index.mdx +39 -0
  16. package/minimal/clarify.ts +9 -0
  17. package/minimal/index.html +11 -0
  18. package/minimal/public/favicon.svg +11 -0
  19. package/minimal/public/logo.svg +11 -0
  20. package/minimal/source/index.mdx +7 -0
  21. package/output/index.cjs +87 -0
  22. package/output/index.cjs.map +1 -0
  23. package/output/index.d.ts +22 -0
  24. package/output/index.js +80 -0
  25. package/output/index.js.map +1 -0
  26. package/package.json +42 -0
  27. package/standard/clarify.ts +57 -0
  28. package/standard/index.html +11 -0
  29. package/standard/public/favicon.svg +11 -0
  30. package/standard/public/logo.svg +11 -0
  31. package/standard/source/changelog.mdx +20 -0
  32. package/standard/source/guides/navigation.mdx +70 -0
  33. package/standard/source/guides/writing-content.mdx +102 -0
  34. package/standard/source/index.mdx +77 -0
package/LICENSE ADDED
@@ -0,0 +1 @@
1
+ Clarify template assets are distributed under the same license as this repository.
@@ -0,0 +1,94 @@
1
+ import { defineConfig } from '@clarify-labs/cli'
2
+
3
+ export default defineConfig({
4
+ title: 'Clarify Docs',
5
+ description: 'A full-featured documentation starter powered by Clarify.',
6
+ logo: '/logo.svg',
7
+ favicon: '/favicon.svg',
8
+ banner: {
9
+ content: {
10
+ 'en-US': 'Edit this starter in {{contentDir}} and ship your docs with Clarify.',
11
+ 'zh-CN': '在 {{contentDir}} 中编辑这个多语言模板,并使用 Clarify 发布文档。',
12
+ },
13
+ dismissible: true,
14
+ },
15
+ i18n: {
16
+ defaultLocale: 'en-US',
17
+ missing: 'fallback',
18
+ locales: [
19
+ { code: 'en-US', label: 'English' },
20
+ { code: 'zh-CN', label: '简体中文' },
21
+ ],
22
+ },
23
+ theme: {
24
+ preset: 'default',
25
+ tokens: {
26
+ colors: {
27
+ primary: '#2563eb',
28
+ accent: '#7c3aed',
29
+ },
30
+ radius: {
31
+ lg: '0.75rem',
32
+ xl: '1rem',
33
+ },
34
+ },
35
+ },
36
+ navbar: {
37
+ links: [
38
+ { label: { 'en-US': 'Guides', 'zh-CN': '指南' }, href: '/guides/writing-content' },
39
+ { label: { 'en-US': 'API', 'zh-CN': '接口' }, href: '/api' },
40
+ { label: 'GitHub', href: 'https://github.com/taicode-labs/clarify', external: true },
41
+ ],
42
+ },
43
+ footer: {
44
+ copyright: '© 2026 Your Company. Built with Clarify.',
45
+ links: [
46
+ { label: { 'en-US': 'Get started', 'zh-CN': '开始使用' }, href: '/' },
47
+ { label: { 'en-US': 'Configuration', 'zh-CN': '配置' }, href: '/reference/configuration' },
48
+ { label: { 'en-US': 'API reference', 'zh-CN': 'API 参考' }, href: '/api' },
49
+ ],
50
+ socials: {
51
+ GitHub: 'https://github.com/taicode-labs/clarify',
52
+ },
53
+ },
54
+ tabs: [
55
+ {
56
+ tab: { 'en-US': 'Docs', 'zh-CN': '文档' },
57
+ icon: 'BookOpen',
58
+ pages: [
59
+ {
60
+ group: { 'en-US': 'Start here', 'zh-CN': '从这里开始' },
61
+ icon: 'Rocket',
62
+ pages: [
63
+ { page: 'index', title: { 'en-US': 'Overview', 'zh-CN': '概览' }, icon: 'Sparkles' },
64
+ { page: 'guides/writing-content', title: { 'en-US': 'Writing content', 'zh-CN': '编写内容' }, icon: 'PenLine' },
65
+ { page: 'guides/navigation', title: { 'en-US': 'Navigation', 'zh-CN': '导航' }, icon: 'PanelLeft' },
66
+ ],
67
+ },
68
+ {
69
+ group: { 'en-US': 'Reference', 'zh-CN': '参考' },
70
+ icon: 'Library',
71
+ pages: [
72
+ { page: 'reference/configuration', title: { 'en-US': 'Configuration', 'zh-CN': '配置' }, icon: 'Settings2' },
73
+ { page: 'reference/components', title: { 'en-US': 'MDX components', 'zh-CN': 'MDX 组件' }, icon: 'Component' },
74
+ { page: 'changelog', title: { 'en-US': 'Changelog', 'zh-CN': '更新日志' }, icon: 'History' },
75
+ ],
76
+ },
77
+ ],
78
+ },
79
+ {
80
+ tab: { 'en-US': 'API', 'zh-CN': '接口' },
81
+ icon: 'Webhook',
82
+ pages: [
83
+ {
84
+ group: { 'en-US': 'API reference', 'zh-CN': 'API 参考' },
85
+ icon: 'FileJson2',
86
+ pages: [
87
+ { openapi: 'api.openapi.json', title: { 'en-US': 'OpenAPI reference', 'zh-CN': 'OpenAPI 参考' }, icon: 'FileJson2' },
88
+ { page: 'api/embedding', title: { 'en-US': 'Embed API endpoints', 'zh-CN': '嵌入 API 端点' }, icon: 'CodeXml' },
89
+ ],
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+ })
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Clarify Docs</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ </body>
11
+ </html>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="279px" height="200px" viewBox="0 0 279 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>clarify</title>
4
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="clarify" transform="translate(-0, 0.0054)">
6
+ <path d="M44.867217,0.0054376148 C130.715579,1.00591567 200,70.9091172 200,156.994562 L199.986321,155.127494 C199.384888,180.009127 179.026368,199.994562 154,199.994562 L46,199.994562 C20.5949015,199.994562 0,179.399661 0,153.994562 L0,45.9945624 C0,21.0975659 19.7793434,0.820282524 44.4815926,0.0191499894 Z" fill="#00D492"></path>
7
+ <path d="M123.867217,0.0054376148 C209.715579,1.00591567 279,70.9091172 279,156.994562 L278.986321,155.127494 C278.384888,180.009127 258.026368,199.994562 233,199.994562 L125,199.994562 C99.5949015,199.994562 79,179.399661 79,153.994562 L79,45.9945624 C79,21.0975659 98.7793434,0.820282524 123.481593,0.0191499894 Z" id="clarify-right" fill-opacity="0.6" fill="#00F6C9" transform="translate(179, 100) rotate(-90) translate(-179, -100)"></path>
8
+ <path d="M199.979267,154.416906 L199.984438,155.157125 L199.962366,155.872459 C198.977251,180.406837 178.776104,199.994562 154,199.994562 L124.372438,199.994125 L124.249053,199.994081 C99.6939678,199.603921 79.8122712,179.973634 79.01915,155.518407 L79.0054376,155.132783 C79.5830823,105.566626 103.129768,61.5221348 139.498462,33.1463428 C175.69419,61.3871018 199.186123,105.143863 199.979267,154.416906 Z" id="形状结合" fill="#00F692"></path>
9
+ </g>
10
+ </g>
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="279px" height="200px" viewBox="0 0 279 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>clarify</title>
4
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="clarify" transform="translate(-0, 0.0054)">
6
+ <path d="M44.867217,0.0054376148 C130.715579,1.00591567 200,70.9091172 200,156.994562 L199.986321,155.127494 C199.384888,180.009127 179.026368,199.994562 154,199.994562 L46,199.994562 C20.5949015,199.994562 0,179.399661 0,153.994562 L0,45.9945624 C0,21.0975659 19.7793434,0.820282524 44.4815926,0.0191499894 Z" fill="#00D492"></path>
7
+ <path d="M123.867217,0.0054376148 C209.715579,1.00591567 279,70.9091172 279,156.994562 L278.986321,155.127494 C278.384888,180.009127 258.026368,199.994562 233,199.994562 L125,199.994562 C99.5949015,199.994562 79,179.399661 79,153.994562 L79,45.9945624 C79,21.0975659 98.7793434,0.820282524 123.481593,0.0191499894 Z" id="clarify-right" fill-opacity="0.6" fill="#00F6C9" transform="translate(179, 100) rotate(-90) translate(-179, -100)"></path>
8
+ <path d="M199.979267,154.416906 L199.984438,155.157125 L199.962366,155.872459 C198.977251,180.406837 178.776104,199.994562 154,199.994562 L124.372438,199.994125 L124.249053,199.994081 C99.6939678,199.603921 79.8122712,179.973634 79.01915,155.518407 L79.0054376,155.132783 C79.5830823,105.566626 103.129768,61.5221348 139.498462,33.1463428 C175.69419,61.3871018 199.186123,105.143863 199.979267,154.416906 Z" id="形状结合" fill="#00F692"></path>
9
+ </g>
10
+ </g>
11
+ </svg>
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: Embed API endpoints
3
+ description: Render OpenAPI operations inside workflow-focused MDX pages.
4
+ ---
5
+
6
+ # Embed API endpoints
7
+
8
+ Use embedded OpenAPI components when an endpoint belongs next to a tutorial, setup guide, or integration workflow.
9
+
10
+ ## Markdown descriptions
11
+
12
+ OpenAPI `description` strings render Markdown in both full references and embedded operations. This keeps interface notes close to the spec while preserving links, lists, emphasis, and `inline code`.
13
+
14
+ ```json
15
+ {
16
+ "description": "Returns **active** projects.\n\n- Use `limit` for page size.\n- Use `nextCursor` for pagination."
17
+ }
18
+ ```
19
+
20
+ ## Embed one operation
21
+
22
+ ```mdx
23
+ <OpenApiOperation specPath="/api" path="/v1/projects" method="get" />
24
+ ```
25
+
26
+ <OpenApiOperation specPath="/api" path="/v1/projects" method="get" />
27
+
28
+ ## Embed a request body operation
29
+
30
+ ```mdx
31
+ <OpenApiOperation specPath="/api" path="/v1/projects" method="post" />
32
+ ```
33
+
34
+ <OpenApiOperation specPath="/api" path="/v1/projects" method="post" />
35
+
36
+ ## Embed the full API page
37
+
38
+ Use `OpenApiDocument` if you want prose before a complete reference.
39
+
40
+ ```mdx
41
+ <OpenApiDocument specPath="/api" />
42
+ ```
43
+
44
+ <Callout title="Spec path convention">
45
+ `specPath` is the route generated from the OpenAPI filename. `api.openapi.json` becomes `/api`.
46
+ </Callout>
@@ -0,0 +1,319 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Starter API",
5
+ "summary": "A compact OpenAPI example for Clarify.",
6
+ "description": "Replace this file with your real OpenAPI description.\n\n**Markdown descriptions are supported** in API reference pages and embedded endpoints. Use `inline code`, links, lists, and tables for interface notes while keeping reusable components in MDX.\n\n| Field | Use |\n| --- | --- |\n| `limit` | Page size |\n| `cursor` | Pagination token |",
7
+ "version": "1.0.0"
8
+ },
9
+ "servers": [
10
+ {
11
+ "url": "https://api.example.com",
12
+ "description": "Production"
13
+ },
14
+ {
15
+ "url": "https://sandbox.example.com",
16
+ "description": "Sandbox"
17
+ }
18
+ ],
19
+ "tags": [
20
+ {
21
+ "name": "Projects",
22
+ "description": "Project management endpoints."
23
+ },
24
+ {
25
+ "name": "System",
26
+ "description": "Operational endpoints."
27
+ }
28
+ ],
29
+ "security": [
30
+ {
31
+ "BearerAuth": []
32
+ }
33
+ ],
34
+ "paths": {
35
+ "/v1/projects": {
36
+ "get": {
37
+ "tags": ["Projects"],
38
+ "operationId": "listProjects",
39
+ "summary": "List projects",
40
+ "description": "Returns projects visible to the current API token.\n\n- Use `limit` to control page size.\n- Pass the returned `nextCursor` to continue pagination.",
41
+ "parameters": [
42
+ {
43
+ "name": "limit",
44
+ "in": "query",
45
+ "description": "Maximum number of projects to return.\n\n| Value | Behavior |\n| --- | --- |\n| `20` | Default page size |\n| `100` | Largest allowed page |",
46
+ "schema": {
47
+ "type": "integer",
48
+ "minimum": 1,
49
+ "maximum": 100,
50
+ "default": 20
51
+ }
52
+ },
53
+ {
54
+ "name": "cursor",
55
+ "in": "query",
56
+ "description": "Pagination cursor from a previous response.",
57
+ "schema": {
58
+ "type": "string"
59
+ }
60
+ }
61
+ ],
62
+ "responses": {
63
+ "200": {
64
+ "description": "Project list.",
65
+ "content": {
66
+ "application/json": {
67
+ "schema": {
68
+ "$ref": "#/components/schemas/ProjectList"
69
+ },
70
+ "examples": {
71
+ "default": {
72
+ "summary": "Two projects",
73
+ "value": {
74
+ "data": [
75
+ {
76
+ "id": "proj_123",
77
+ "name": "Documentation",
78
+ "status": "active"
79
+ },
80
+ {
81
+ "id": "proj_456",
82
+ "name": "API Reference",
83
+ "status": "archived"
84
+ }
85
+ ],
86
+ "nextCursor": null
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ },
93
+ "401": {
94
+ "$ref": "#/components/responses/Unauthorized"
95
+ }
96
+ }
97
+ },
98
+ "post": {
99
+ "tags": ["Projects"],
100
+ "operationId": "createProject",
101
+ "summary": "Create a project",
102
+ "description": "Creates a new project from a JSON request body.",
103
+ "requestBody": {
104
+ "required": true,
105
+ "description": "Send **JSON** with a `name` and optional `description`.",
106
+ "content": {
107
+ "application/json": {
108
+ "schema": {
109
+ "$ref": "#/components/schemas/ProjectCreate"
110
+ },
111
+ "examples": {
112
+ "default": {
113
+ "value": {
114
+ "name": "Documentation",
115
+ "description": "Public product documentation."
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ },
122
+ "responses": {
123
+ "201": {
124
+ "description": "Project created.",
125
+ "content": {
126
+ "application/json": {
127
+ "schema": {
128
+ "$ref": "#/components/schemas/Project"
129
+ }
130
+ }
131
+ }
132
+ },
133
+ "400": {
134
+ "$ref": "#/components/responses/BadRequest"
135
+ },
136
+ "401": {
137
+ "$ref": "#/components/responses/Unauthorized"
138
+ }
139
+ }
140
+ }
141
+ },
142
+ "/v1/projects/{projectId}": {
143
+ "parameters": [
144
+ {
145
+ "name": "projectId",
146
+ "in": "path",
147
+ "required": true,
148
+ "description": "Project identifier.",
149
+ "schema": {
150
+ "type": "string",
151
+ "pattern": "^proj_[a-zA-Z0-9]+$"
152
+ }
153
+ }
154
+ ],
155
+ "get": {
156
+ "tags": ["Projects"],
157
+ "operationId": "getProject",
158
+ "summary": "Get a project",
159
+ "responses": {
160
+ "200": {
161
+ "description": "Project details.",
162
+ "content": {
163
+ "application/json": {
164
+ "schema": {
165
+ "$ref": "#/components/schemas/Project"
166
+ }
167
+ }
168
+ }
169
+ },
170
+ "404": {
171
+ "$ref": "#/components/responses/NotFound"
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "/v1/health": {
177
+ "get": {
178
+ "tags": ["System"],
179
+ "operationId": "getHealth",
180
+ "summary": "Check service health",
181
+ "security": [],
182
+ "responses": {
183
+ "200": {
184
+ "description": "Service status.",
185
+ "content": {
186
+ "application/json": {
187
+ "schema": {
188
+ "type": "object",
189
+ "required": ["status"],
190
+ "properties": {
191
+ "status": {
192
+ "type": "string",
193
+ "enum": ["ok"]
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ },
204
+ "components": {
205
+ "securitySchemes": {
206
+ "BearerAuth": {
207
+ "type": "http",
208
+ "scheme": "bearer",
209
+ "bearerFormat": "JWT"
210
+ }
211
+ },
212
+ "schemas": {
213
+ "ProjectStatus": {
214
+ "type": "string",
215
+ "enum": ["active", "archived"],
216
+ "description": "Project lifecycle state: `active` projects appear in default lists; `archived` projects are retained for history."
217
+ },
218
+ "Project": {
219
+ "type": "object",
220
+ "required": ["id", "name", "status"],
221
+ "properties": {
222
+ "id": {
223
+ "type": "string",
224
+ "examples": ["proj_123"]
225
+ },
226
+ "name": {
227
+ "type": "string",
228
+ "minLength": 1
229
+ },
230
+ "description": {
231
+ "type": ["string", "null"],
232
+ "description": "Optional public summary. Markdown such as **bold text** and `inline code` is allowed in OpenAPI descriptions."
233
+ },
234
+ "status": {
235
+ "$ref": "#/components/schemas/ProjectStatus"
236
+ },
237
+ "createdAt": {
238
+ "type": "string",
239
+ "format": "date-time"
240
+ }
241
+ }
242
+ },
243
+ "ProjectCreate": {
244
+ "type": "object",
245
+ "required": ["name"],
246
+ "properties": {
247
+ "name": {
248
+ "type": "string",
249
+ "minLength": 1,
250
+ "maxLength": 120
251
+ },
252
+ "description": {
253
+ "type": "string",
254
+ "maxLength": 500
255
+ }
256
+ }
257
+ },
258
+ "ProjectList": {
259
+ "type": "object",
260
+ "required": ["data"],
261
+ "properties": {
262
+ "data": {
263
+ "type": "array",
264
+ "items": {
265
+ "$ref": "#/components/schemas/Project"
266
+ }
267
+ },
268
+ "nextCursor": {
269
+ "type": ["string", "null"]
270
+ }
271
+ }
272
+ },
273
+ "Error": {
274
+ "type": "object",
275
+ "required": ["code", "message"],
276
+ "properties": {
277
+ "code": {
278
+ "type": "string"
279
+ },
280
+ "message": {
281
+ "type": "string"
282
+ }
283
+ }
284
+ }
285
+ },
286
+ "responses": {
287
+ "BadRequest": {
288
+ "description": "Invalid request.\n\nCheck the response `code` and `message` before retrying.",
289
+ "content": {
290
+ "application/json": {
291
+ "schema": {
292
+ "$ref": "#/components/schemas/Error"
293
+ }
294
+ }
295
+ }
296
+ },
297
+ "Unauthorized": {
298
+ "description": "Missing or invalid API token.",
299
+ "content": {
300
+ "application/json": {
301
+ "schema": {
302
+ "$ref": "#/components/schemas/Error"
303
+ }
304
+ }
305
+ }
306
+ },
307
+ "NotFound": {
308
+ "description": "Resource was not found.",
309
+ "content": {
310
+ "application/json": {
311
+ "schema": {
312
+ "$ref": "#/components/schemas/Error"
313
+ }
314
+ }
315
+ }
316
+ }
317
+ }
318
+ }
319
+ }
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: Changelog
3
+ description: Track notable product and documentation changes.
4
+ ---
5
+
6
+ # Changelog
7
+
8
+ Use this page to publish notable product, API, and documentation updates.
9
+
10
+ ## 2026-06-20
11
+
12
+ ### Added
13
+
14
+ - Initial Clarify documentation starter.
15
+ - Basic MDX authoring examples.
16
+ - OpenAPI reference example.
17
+
18
+ ### Changed
19
+
20
+ - Replace these entries with your real release notes.
@@ -0,0 +1,78 @@
1
+ ---
2
+ title: Navigation
3
+ description: Configure tabs, sidebar groups, page links, OpenAPI entries, navbar links, and footer links.
4
+ ---
5
+
6
+ # Navigation
7
+
8
+ Clarify navigation is configured in `clarify.ts`. The starter uses explicit tabs so users can see how every part fits together.
9
+
10
+ ## Tabs and sidebar groups
11
+
12
+ ```ts title="clarify.ts"
13
+ export default defineConfig({
14
+ tabs: [
15
+ {
16
+ tab: 'Docs',
17
+ icon: 'BookOpen',
18
+ pages: [
19
+ {
20
+ group: 'Start here',
21
+ icon: 'Rocket',
22
+ pages: [
23
+ { page: 'index', title: 'Overview', icon: 'Sparkles' },
24
+ { page: 'guides/writing-content', title: 'Writing content', icon: 'PenLine' },
25
+ ],
26
+ },
27
+ ],
28
+ },
29
+ ],
30
+ })
31
+ ```
32
+
33
+ ## File tree mode
34
+
35
+ For smaller docs, use `FileTree` and let Clarify derive navigation from files.
36
+
37
+ ```ts title="clarify.ts"
38
+ export default defineConfig({
39
+ tabs: [
40
+ {
41
+ tab: 'Docs',
42
+ pages: 'FileTree',
43
+ },
44
+ ],
45
+ })
46
+ ```
47
+
48
+ ## Navbar and footer
49
+
50
+ ```ts title="clarify.ts"
51
+ export default defineConfig({
52
+ navbar: {
53
+ links: [
54
+ { label: 'Guides', href: '/guides/writing-content' },
55
+ { label: 'GitHub', href: 'https://github.com/taicode-labs/clarify', external: true },
56
+ ],
57
+ },
58
+ footer: {
59
+ copyright: '© 2026 Your Company.',
60
+ links: [{ label: 'Configuration', href: '/reference/configuration' }],
61
+ socials: { GitHub: 'https://github.com/taicode-labs/clarify' },
62
+ },
63
+ })
64
+ ```
65
+
66
+ ## OpenAPI entries
67
+
68
+ Add an OpenAPI file to navigation with `openapi` instead of `page`.
69
+
70
+ ```ts title="clarify.ts"
71
+ {
72
+ openapi: 'api.openapi.json',
73
+ title: 'OpenAPI reference',
74
+ icon: 'FileJson2',
75
+ }
76
+ ```
77
+
78
+ This renders the full reference for `{{contentDir}}/api.openapi.json` at `/api`.