1import { themes as prismThemes } from 'prism-react-renderer'
2import type { Config } from '@docusaurus/types'
3import type * as Preset from '@docusaurus/preset-classic'
4
5import type * as OpenApiPlugin from 'docusaurus-plugin-openapi-docs'
6import type { Options as BlogOptions } from '@docusaurus/plugin-content-blog'
7import type { Options as PageOptions } from '@docusaurus/plugin-content-pages'
8
9import tailwindPlugin from './plugins/tailwind-config.cjs'
10
11const config: Config = {
12 title: 'Spice.ai OSS',
13 tagline:
14 'A portable SQL query and AI compute engine, written in Rust, for data-grounded apps and agents.',
15 favicon: 'img/favicon.ico',
16
17 // Set the production url of your site here
18 url: 'https://spiceai.org',
19 // Set the /<baseUrl>/ pathname under which your site is served
20 // For GitHub pages deployment, it is often '/<projectName>/'
21 baseUrl: '/',
22
23 trailingSlash: false,
24
25 // GitHub pages deployment config.
26 // If you aren't using GitHub pages, you don't need these.
27 organizationName: 'spiceai', // Usually your GitHub org/user name.
28 projectName: 'docs', // Usually your repo name.
29
30 onBrokenAnchors: 'throw',
31 onBrokenLinks: 'throw',
32 onBrokenMarkdownLinks: 'throw',
33
34 // Even if you don't use internationalization, you can use this field to set
35 // useful metadata like html lang. For example, if your site is Chinese, you
36 // may want to replace "en" with "zh-Hans".
37 i18n: {
38 defaultLocale: 'en',
39 locales: ['en']
40 },
41
42 future: {
43 v4: {
44 removeLegacyPostBuildHeadAttribute: true // required
45 },
46 experimental_faster: true
47 },
48
49 presets: [
50 [
51 'classic',
52 {
53 docs: {
54 routeBasePath: '/docs',
55 path: 'docs',
56 sidebarPath: 'sidebars.ts',
57 docItemComponent: '@theme/ApiItem',
58 editUrl: 'https://github.com/spiceai/docs/tree/trunk/website/'
59 },
60 blog: {
61 path: 'blog',
62 showLastUpdateAuthor: true,
63 showLastUpdateTime: true,
64 onUntruncatedBlogPosts: 'ignore',
65 editUrl: ({ locale, blogDirPath, blogPath }) => {
66 return `https://github.com/spiceai/docs/edit/trunk/website/${blogDirPath}/${blogPath}`
67 },
68 remarkPlugins: [],
69 postsPerPage: 5,
70 feedOptions: {
71 type: 'all',
72 description:
73 'Keep up to date with upcoming Spice.ai OSS releases and articles by following our feed!',
74 copyright: `Copyright © 2025 Spice AI, Inc.`,
75 xslt: true
76 },
77 blogTitle: 'Spice.ai OSS blog',
78 blogDescription: 'Read blog posts about Spice.ai OSS from the team and community',
79 blogSidebarCount: 'ALL',
80 blogSidebarTitle: 'All Posts'
81 } satisfies BlogOptions,
82 pages: {
83 remarkPlugins: [],
84 showLastUpdateAuthor: true,
85 showLastUpdateTime: true
86 } satisfies PageOptions,
87 theme: {
88 customCss: ['./src/css/custom.css', './src/css/openapi.css', './src/css/preflight.css']
89 },
90 gtag: {
91 trackingID: 'G-SST0X6NS37',
92 anonymizeIP: true
93 }
94 } satisfies Preset.Options
95 ]
96 ],
97 themes: ['docusaurus-theme-openapi-docs'],
98 themeConfig: {
99 announcementBar: {
100 content: '<a href="/blog/releases/v1.4.0">Spice.ai OSS v1.4.0</a> is now available! 🚀',
101 backgroundColor: 'var(--announcement-bar-bg)',
102 textColor: 'var(--announcement-bar-text)',
103 isCloseable: true
104 },
105 navbar: {
106 title: 'Spice.ai OSS',
107 logo: {
108 alt: 'Spice.ai OSS logo',
109 src: 'img/logo.svg'
110 },
111 hideOnScroll: true,
112 items: [
113 {
114 type: 'doc',
115 position: 'left',
116 docId: 'index',
117 label: 'Docs'
118 },
119 {
120 type: 'docSidebar',
121 position: 'left',
122 sidebarId: 'api',
123 label: 'API'
124 },
125 { to: 'blog', label: 'Blog', position: 'left' },
126 { to: 'cookbook', label: 'Cookbook', position: 'left' },
127 {
128 type: 'dropdown',
129 label: 'Community',
130 position: 'left',
131 items: [
132 {
133 label: 'Discord',
134 href: 'https://discord.gg/kZnTfneP5u'
135 },
136 {
137 label: 'X',
138 href: 'https://x.com/spice_ai'
139 },
140 {
141 label: 'Reddit',
142 href: 'https://reddit.com/r/spiceai'
143 },
144 {
145 label: 'YouTube',
146 href: 'https://www.youtube.com/@spiceai'
147 }
148 ]
149 },
150 {
151 label: 'X',
152 href: 'https://x.com/spice_ai',
153 position: 'right'
154 },
155 {
156 label: 'Discord',
157 href: 'https://discord.gg/kZnTfneP5u',
158 position: 'right'
159 },
160 {
161 label: 'YouTube',
162 href: 'https://www.youtube.com/@spiceai',
163 position: 'right'
164 },
165 {
166 href: 'https://github.com/spiceai/spiceai',
167 position: 'right',
168 className: 'header-github-link',
169 'aria-label': 'GitHub repository'
170 }
171 ]
172 },
173 footer: {
174 style: 'dark',
175 links: [
176 {
177 title: 'Docs',
178 items: [
179 {
180 label: 'Getting Started',
181 to: '/docs/getting-started'
182 },
183 {
184 label: 'API',
185 to: '/docs/api'
186 },
187 {
188 label: 'CLI',
189 to: '/docs/cli'
190 },
191 {
192 label: 'SDKs',
193 to: '/docs/sdks'
194 }
195 ]
196 },
197 {
198 title: 'Community',
199 items: [
200 {
201 label: 'Reddit',
202 href: 'https://reddit.com/r/spiceai'
203 },
204 {
205 label: 'Discord',
206 href: 'https://discord.gg/kZnTfneP5u'
207 },
208 {
209 label: 'X',
210 href: 'https://x.com/spice_ai'
211 },
212 {
213 label: 'YouTube',
214 href: 'https://www.youtube.com/@spiceai'
215 }
216 ]
217 },
218 {
219 title: 'More',
220 items: [
221 {
222 label: 'Blog',
223 href: 'https://blog.spiceai.org'
224 },
225 {
226 label: 'GitHub',
227 href: 'https://github.com/spiceai/spiceai'
228 }
229 ]
230 }
231 ],
232 copyright: `Copyright © 2025 Spice AI, Inc.`
233 },
234 languageTabs: [
235 {
236 highlight: 'bash',
237 language: 'curl',
238 logoClass: 'curl'
239 }
240 ],
241 prism: {
242 theme: prismThemes.oneLight,
243 darkTheme: prismThemes.gruvboxMaterialDark,
244 additionalLanguages: ['bash', 'json', 'csharp']
245 },
246 algolia: {
247 appId: '0SP8I8JTL8',
248 apiKey: '72f66fe334ccd3c7db696a123d68735c',
249 indexName: 'spiceai',
250 contextualSearch: false
251 }
252 } satisfies Preset.ThemeConfig,
253
254 headTags: [
255 {
256 tagName: 'link',
257 attributes: {
258 rel: 'preconnect',
259 href: 'https://fonts.googleapis.com'
260 }
261 },
262 {
263 tagName: 'link',
264 attributes: {
265 rel: 'preconnect',
266 href: 'https://fonts.gstatic.com',
267 crossorigin: 'true'
268 }
269 },
270 {
271 tagName: 'link',
272 attributes: {
273 href: 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap',
274 rel: 'stylesheet'
275 }
276 },
277 {
278 tagName: 'link',
279 attributes: {
280 rel: 'icon',
281 type: 'image/png',
282 sizes: '32x32',
283 href: '/favicon-32x32.png'
284 }
285 },
286 {
287 tagName: 'link',
288 attributes: {
289 rel: 'icon',
290 type: 'image/png',
291 sizes: '16x16',
292 href: '/favicon-16x16.png'
293 }
294 },
295 {
296 tagName: 'script',
297 attributes: {
298 type: 'text/javascript',
299 id: 'hs-script-loader',
300 async: 'true',
301 defer: 'true',
302 src: '//js.hs-scripts.com/46107967.js'
303 }
304 }
305 ],
306
307 plugins: [
308 tailwindPlugin,
309 [
310 'docusaurus-plugin-openapi-docs',
311 {
312 id: 'api',
313 docsPluginId: 'classic',
314 config: {
315 spice: {
316 proxy: 'http://localhost:8090',
317
318 specPath: 'public/openapi.json',
319 outputDir: 'docs/api/HTTP',
320 sidebarOptions: {
321 groupPathsBy: 'tag'
322 }
323 } satisfies OpenApiPlugin.Options
324 }
325 }
326 ],
327 [
328 '@docusaurus/plugin-client-redirects',
329 {
330 redirects: [
331 {
332 from: '/query-federation',
333 to: '/docs/features/query-federation'
334 },
335 {
336 from: '/federated-queries',
337 to: '/docs/features/query-federation'
338 },
339 {
340 from: '/data-ingestion',
341 to: '/docs/features/data-ingestion'
342 },
343 {
344 from: '/data-acceleration',
345 to: '/docs/features/data-acceleration'
346 },
347 {
348 from: '/monitoring',
349 to: '/docs/features/observability'
350 }
351 ]
352 }
353 ]
354 ]
355}
356
357export default config
358
1import { themes as prismThemes } from 'prism-react-renderer'
2import type { Config } from '@docusaurus/types'
3import type * as Preset from '@docusaurus/preset-classic'
4
5import type * as OpenApiPlugin from 'docusaurus-plugin-openapi-docs'
6import type { Options as BlogOptions } from '@docusaurus/plugin-content-blog'
7import type { Options as PageOptions } from '@docusaurus/plugin-content-pages'
8
9import tailwindPlugin from './plugins/tailwind-config.cjs'
10
11const config: Config = {
12 title: 'Spice.ai OSS',
13 tagline:
14 'A portable SQL query and AI compute engine, written in Rust, for data-grounded apps and agents.',
15 favicon: 'img/favicon.ico',
16
17 // Set the production url of your site here
18 url: 'https://spiceai.org',
19 // Set the /<baseUrl>/ pathname under which your site is served
20 // For GitHub pages deployment, it is often '/<projectName>/'
21 baseUrl: '/',
22
23 trailingSlash: false,
24
25 // GitHub pages deployment config.
26 // If you aren't using GitHub pages, you don't need these.
27 organizationName: 'spiceai', // Usually your GitHub org/user name.
28 projectName: 'docs', // Usually your repo name.
29
30 onBrokenAnchors: 'throw',
31 onBrokenLinks: 'throw',
32 onBrokenMarkdownLinks: 'throw',
33
34 // Even if you don't use internationalization, you can use this field to set
35 // useful metadata like html lang. For example, if your site is Chinese, you
36 // may want to replace "en" with "zh-Hans".
37 i18n: {
38 defaultLocale: 'en',
39 locales: ['en']
40 },
41
42 future: {
43 v4: {
44 removeLegacyPostBuildHeadAttribute: true // required
45 },
46 experimental_faster: true
47 },
48
49 presets: [
50 [
51 'classic',
52 {
53 docs: {
54 routeBasePath: '/docs',
55 path: 'docs',
56 sidebarPath: 'sidebars.ts',
57 docItemComponent: '@theme/ApiItem',
58 editUrl: 'https://github.com/spiceai/docs/tree/trunk/website/'
59 },
60 blog: {
61 path: 'blog',
62 showLastUpdateAuthor: true,
63 showLastUpdateTime: true,
64 onUntruncatedBlogPosts: 'ignore',
65 editUrl: ({ locale, blogDirPath, blogPath }) => {
66 return `https://github.com/spiceai/docs/edit/trunk/website/${blogDirPath}/${blogPath}`
67 },
68 remarkPlugins: [],
69 postsPerPage: 5,
70 feedOptions: {
71 type: 'all',
72 description:
73 'Keep up to date with upcoming Spice.ai OSS releases and articles by following our feed!',
74 copyright: `Copyright © 2025 Spice AI, Inc.`,
75 xslt: true
76 },
77 blogTitle: 'Spice.ai OSS blog',
78 blogDescription: 'Read blog posts about Spice.ai OSS from the team and community',
79 blogSidebarCount: 'ALL',
80 blogSidebarTitle: 'All Posts'
81 } satisfies BlogOptions,
82 pages: {
83 remarkPlugins: [],
84 showLastUpdateAuthor: true,
85 showLastUpdateTime: true
86 } satisfies PageOptions,
87 theme: {
88 customCss: ['./src/css/custom.css', './src/css/openapi.css', './src/css/preflight.css']
89 },
90 gtag: {
91 trackingID: 'G-SST0X6NS37',
92 anonymizeIP: true
93 }
94 } satisfies Preset.Options
95 ]
96 ],
97 themes: ['docusaurus-theme-openapi-docs'],
98 themeConfig: {
99 announcementBar: {
100 content: '<a href="/blog/releases/v1.4.0">Spice.ai OSS v1.4.0</a> is now available! 🚀',
101 backgroundColor: 'var(--announcement-bar-bg)',
102 textColor: 'var(--announcement-bar-text)',
103 isCloseable: true
104 },
105 navbar: {
106 title: 'Spice.ai OSS',
107 logo: {
108 alt: 'Spice.ai OSS logo',
109 src: 'img/logo.svg'
110 },
111 hideOnScroll: true,
112 items: [
113 {
114 type: 'doc',
115 position: 'left',
116 docId: 'index',
117 label: 'Docs'
118 },
119 {
120 type: 'docSidebar',
121 position: 'left',
122 sidebarId: 'api',
123 label: 'API'
124 },
125 { to: 'blog', label: 'Blog', position: 'left' },
126 { to: 'cookbook', label: 'Cookbook', position: 'left' },
127 {
128 type: 'dropdown',
129 label: 'Community',
130 position: 'left',
131 items: [
132 {
133 label: 'Discord',
134 href: 'https://discord.gg/kZnTfneP5u'
135 },
136 {
137 label: 'X',
138 href: 'https://x.com/spice_ai'
139 },
140 {
141 label: 'Reddit',
142 href: 'https://reddit.com/r/spiceai'
143 },
144 {
145 label: 'YouTube',
146 href: 'https://www.youtube.com/@spiceai'
147 }
148 ]
149 },
150 {
151 label: 'X',
152 href: 'https://x.com/spice_ai',
153 position: 'right'
154 },
155 {
156 label: 'Discord',
157 href: 'https://discord.gg/kZnTfneP5u',
158 position: 'right'
159 },
160 {
161 label: 'YouTube',
162 href: 'https://www.youtube.com/@spiceai',
163 position: 'right'
164 },
165 {
166 href: 'https://github.com/spiceai/spiceai',
167 position: 'right',
168 className: 'header-github-link',
169 'aria-label': 'GitHub repository'
170 }
171 ]
172 },
173 footer: {
174 style: 'dark',
175 links: [
176 {
177 title: 'Docs',
178 items: [
179 {
180 label: 'Getting Started',
181 to: '/docs/getting-started'
182 },
183 {
184 label: 'API',
185 to: '/docs/api'
186 },
187 {
188 label: 'CLI',
189 to: '/docs/cli'
190 },
191 {
192 label: 'SDKs',
193 to: '/docs/sdks'
194 }
195 ]
196 },
197 {
198 title: 'Community',
199 items: [
200 {
201 label: 'Reddit',
202 href: 'https://reddit.com/r/spiceai'
203 },
204 {
205 label: 'Discord',
206 href: 'https://discord.gg/kZnTfneP5u'
207 },
208 {
209 label: 'X',
210 href: 'https://x.com/spice_ai'
211 },
212 {
213 label: 'YouTube',
214 href: 'https://www.youtube.com/@spiceai'
215 }
216 ]
217 },
218 {
219 title: 'More',
220 items: [
221 {
222 label: 'Blog',
223 href: 'https://blog.spiceai.org'
224 },
225 {
226 label: 'GitHub',
227 href: 'https://github.com/spiceai/spiceai'
228 }
229 ]
230 }
231 ],
232 copyright: `Copyright © 2025 Spice AI, Inc.`
233 },
234 languageTabs: [
235 {
236 highlight: 'bash',
237 language: 'curl',
238 logoClass: 'curl'
239 }
240 ],
241 prism: {
242 theme: prismThemes.oneLight,
243 darkTheme: prismThemes.gruvboxMaterialDark,
244 additionalLanguages: ['bash', 'json', 'csharp']
245 },
246 algolia: {
247 appId: '0SP8I8JTL8',
248 apiKey: '72f66fe334ccd3c7db696a123d68735c',
249 indexName: 'spiceai',
250 contextualSearch: false
251 }
252 } satisfies Preset.ThemeConfig,
253
254 headTags: [
255 {
256 tagName: 'link',
257 attributes: {
258 rel: 'preconnect',
259 href: 'https://fonts.googleapis.com'
260 }
261 },
262 {
263 tagName: 'link',
264 attributes: {
265 rel: 'preconnect',
266 href: 'https://fonts.gstatic.com',
267 crossorigin: 'true'
268 }
269 },
270 {
271 tagName: 'link',
272 attributes: {
273 href: 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap',
274 rel: 'stylesheet'
275 }
276 },
277 {
278 tagName: 'link',
279 attributes: {
280 rel: 'icon',
281 type: 'image/png',
282 sizes: '32x32',
283 href: '/favicon-32x32.png'
284 }
285 },
286 {
287 tagName: 'link',
288 attributes: {
289 rel: 'icon',
290 type: 'image/png',
291 sizes: '16x16',
292 href: '/favicon-16x16.png'
293 }
294 },
295 {
296 tagName: 'script',
297 attributes: {
298 type: 'text/javascript',
299 id: 'hs-script-loader',
300 async: 'true',
301 defer: 'true',
302 src: '//js.hs-scripts.com/46107967.js'
303 }
304 }
305 ],
306
307 plugins: [
308 tailwindPlugin,
309 [
310 'docusaurus-plugin-openapi-docs',
311 {
312 id: 'api',
313 docsPluginId: 'classic',
314 config: {
315 spice: {
316 proxy: 'http://localhost:8090',
317
318 specPath: 'public/openapi.json',
319 outputDir: 'docs/api/HTTP',
320 sidebarOptions: {
321 groupPathsBy: 'tag'
322 }
323 } satisfies OpenApiPlugin.Options
324 }
325 }
326 ],
327 [
328 '@docusaurus/plugin-client-redirects',
329 {
330 redirects: [
331 {
332 from: '/query-federation',
333 to: '/docs/features/query-federation'
334 },
335 {
336 from: '/federated-queries',
337 to: '/docs/features/query-federation'
338 },
339 {
340 from: '/data-ingestion',
341 to: '/docs/features/data-ingestion'
342 },
343 {
344 from: '/data-acceleration',
345 to: '/docs/features/data-acceleration'
346 },
347 {
348 from: '/monitoring',
349 to: '/docs/features/observability'
350 }
351 ]
352 }
353 ]
354 ]
355}
356
357export default config
358