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: ({ docPath }) => {
59 return `https://github.com/spiceai/docs/edit/trunk/website/docs/${docPath}`
60 }
61 },
62 blog: {
63 path: 'blog',
64 showLastUpdateAuthor: true,
65 showLastUpdateTime: true,
66 onUntruncatedBlogPosts: 'ignore',
67 editUrl: ({ locale, blogDirPath, blogPath }) => {
68 return `https://github.com/spiceai/docs/edit/trunk/website/${blogDirPath}/${blogPath}`
69 },
70 remarkPlugins: [],
71 postsPerPage: 5,
72 feedOptions: {
73 type: 'all',
74 description:
75 'Keep up to date with upcoming Spice.ai OSS releases and articles by following our feed!',
76 copyright: `Copyright © 2025 Spice AI, Inc.`,
77 xslt: true
78 },
79 blogTitle: 'Spice.ai OSS blog',
80 blogDescription: 'Read blog posts about Spice.ai OSS from the team and community',
81 blogSidebarCount: 'ALL',
82 blogSidebarTitle: 'All Posts'
83 } satisfies BlogOptions,
84 pages: {
85 remarkPlugins: [],
86 showLastUpdateAuthor: true,
87 showLastUpdateTime: true
88 } satisfies PageOptions,
89 theme: {
90 customCss: ['./src/css/custom.css', './src/css/openapi.css', './src/css/preflight.css']
91 },
92 gtag: {
93 trackingID: 'G-SST0X6NS37',
94 anonymizeIP: true
95 }
96 } satisfies Preset.Options
97 ]
98 ],
99 themes: ['docusaurus-theme-openapi-docs'],
100 themeConfig: {
101 announcementBar: {
102 content: '<a href="/blog/releases/v1.6.1">Spice.ai OSS v1.6.1</a> is now available! 🚀',
103 backgroundColor: 'var(--announcement-bar-bg)',
104 textColor: 'var(--announcement-bar-text)',
105 isCloseable: true
106 },
107 navbar: {
108 title: 'Spice.ai OSS',
109 logo: {
110 alt: 'Spice.ai OSS logo',
111 src: 'img/logo.svg'
112 },
113 hideOnScroll: true,
114 items: [
115 {
116 type: 'doc',
117 position: 'left',
118 docId: 'index',
119 label: 'Docs'
120 },
121 {
122 type: 'docSidebar',
123 position: 'left',
124 sidebarId: 'api',
125 label: 'API'
126 },
127 { to: 'blog', label: 'Blog', position: 'left' },
128 { to: 'cookbook', label: 'Cookbook', position: 'left' },
129 { to: 'docs/reference/sql', label: 'SQL Reference', position: 'left' },
130 {
131 label: 'Try Spice Cloud',
132 href: 'https://spice.ai/login',
133 position: 'right'
134 },
135 {
136 label: 'X',
137 href: 'https://x.com/spice_ai',
138 position: 'right'
139 },
140 {
141 label: 'Discord',
142 href: 'https://discord.gg/kZnTfneP5u',
143 position: 'right'
144 },
145 {
146 label: 'YouTube',
147 href: 'https://www.youtube.com/@spiceai',
148 position: 'right'
149 },
150 {
151 href: 'https://github.com/spiceai/spiceai',
152 position: 'right',
153 className: 'header-github-link',
154 'aria-label': 'GitHub repository'
155 }
156 ]
157 },
158 footer: {
159 style: 'dark',
160 links: [
161 {
162 title: 'Docs',
163 items: [
164 {
165 label: 'Getting Started',
166 to: '/docs/getting-started'
167 },
168 {
169 label: 'API',
170 to: '/docs/api'
171 },
172 {
173 label: 'CLI',
174 to: '/docs/cli'
175 },
176 {
177 label: 'SDKs',
178 to: '/docs/sdks'
179 }
180 ]
181 },
182 {
183 title: 'Community',
184 items: [
185 {
186 label: 'Reddit',
187 href: 'https://reddit.com/r/spiceai'
188 },
189 {
190 label: 'Discord',
191 href: 'https://discord.gg/kZnTfneP5u'
192 },
193 {
194 label: 'X',
195 href: 'https://x.com/spice_ai'
196 },
197 {
198 label: 'YouTube',
199 href: 'https://www.youtube.com/@spiceai'
200 }
201 ]
202 },
203 {
204 title: 'More',
205 items: [
206 {
207 label: 'Blog',
208 href: 'https://blog.spiceai.org'
209 },
210 {
211 label: 'GitHub',
212 href: 'https://github.com/spiceai/spiceai'
213 }
214 ]
215 }
216 ],
217 copyright: `Copyright © 2025 Spice AI, Inc.`
218 },
219 languageTabs: [
220 {
221 highlight: 'bash',
222 language: 'curl',
223 logoClass: 'curl'
224 }
225 ],
226 prism: {
227 theme: prismThemes.oneLight,
228 darkTheme: prismThemes.gruvboxMaterialDark,
229 additionalLanguages: ['bash', 'json', 'csharp']
230 },
231 algolia: {
232 appId: '0SP8I8JTL8',
233 apiKey: '72f66fe334ccd3c7db696a123d68735c',
234 indexName: 'spiceai',
235 contextualSearch: false
236 }
237 } satisfies Preset.ThemeConfig,
238
239 headTags: [
240 {
241 tagName: 'link',
242 attributes: {
243 rel: 'preconnect',
244 href: 'https://fonts.googleapis.com'
245 }
246 },
247 {
248 tagName: 'link',
249 attributes: {
250 rel: 'preconnect',
251 href: 'https://fonts.gstatic.com',
252 crossorigin: 'true'
253 }
254 },
255 {
256 tagName: 'link',
257 attributes: {
258 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',
259 rel: 'stylesheet'
260 }
261 },
262 {
263 tagName: 'link',
264 attributes: {
265 rel: 'icon',
266 type: 'image/png',
267 sizes: '32x32',
268 href: '/favicon-32x32.png'
269 }
270 },
271 {
272 tagName: 'link',
273 attributes: {
274 rel: 'icon',
275 type: 'image/png',
276 sizes: '16x16',
277 href: '/favicon-16x16.png'
278 }
279 },
280 {
281 tagName: 'script',
282 attributes: {
283 type: 'text/javascript',
284 id: 'hs-script-loader',
285 async: 'true',
286 defer: 'true',
287 src: '//js.hs-scripts.com/46107967.js'
288 }
289 }
290 ],
291
292 plugins: [
293 tailwindPlugin,
294 [
295 'docusaurus-plugin-openapi-docs',
296 {
297 id: 'api',
298 docsPluginId: 'classic',
299 config: {
300 spice: {
301 proxy: 'http://localhost:8090',
302
303 specPath: 'public/openapi.json',
304 outputDir: 'docs/api/HTTP',
305 sidebarOptions: {
306 groupPathsBy: 'tag'
307 }
308 } satisfies OpenApiPlugin.Options
309 }
310 }
311 ],
312 [
313 '@docusaurus/plugin-client-redirects',
314 {
315 redirects: [
316 {
317 from: '/query-federation',
318 to: '/docs/features/query-federation'
319 },
320 {
321 from: '/blog/2025/amazon-s3-vectors-with-spice',
322 to: '/blog/amazon-s3-vectors-with-spice'
323 },
324 {
325 from: '/federated-queries',
326 to: '/docs/features/query-federation'
327 },
328 {
329 from: '/data-ingestion',
330 to: '/docs/features/data-ingestion'
331 },
332 {
333 from: '/data-acceleration',
334 to: '/docs/features/data-acceleration'
335 },
336 {
337 from: '/monitoring',
338 to: '/docs/features/observability'
339 }
340 ]
341 }
342 ]
343 ]
344}
345
346export default config
347
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: ({ docPath }) => {
59 return `https://github.com/spiceai/docs/edit/trunk/website/docs/${docPath}`
60 }
61 },
62 blog: {
63 path: 'blog',
64 showLastUpdateAuthor: true,
65 showLastUpdateTime: true,
66 onUntruncatedBlogPosts: 'ignore',
67 editUrl: ({ locale, blogDirPath, blogPath }) => {
68 return `https://github.com/spiceai/docs/edit/trunk/website/${blogDirPath}/${blogPath}`
69 },
70 remarkPlugins: [],
71 postsPerPage: 5,
72 feedOptions: {
73 type: 'all',
74 description:
75 'Keep up to date with upcoming Spice.ai OSS releases and articles by following our feed!',
76 copyright: `Copyright © 2025 Spice AI, Inc.`,
77 xslt: true
78 },
79 blogTitle: 'Spice.ai OSS blog',
80 blogDescription: 'Read blog posts about Spice.ai OSS from the team and community',
81 blogSidebarCount: 'ALL',
82 blogSidebarTitle: 'All Posts'
83 } satisfies BlogOptions,
84 pages: {
85 remarkPlugins: [],
86 showLastUpdateAuthor: true,
87 showLastUpdateTime: true
88 } satisfies PageOptions,
89 theme: {
90 customCss: ['./src/css/custom.css', './src/css/openapi.css', './src/css/preflight.css']
91 },
92 gtag: {
93 trackingID: 'G-SST0X6NS37',
94 anonymizeIP: true
95 }
96 } satisfies Preset.Options
97 ]
98 ],
99 themes: ['docusaurus-theme-openapi-docs'],
100 themeConfig: {
101 announcementBar: {
102 content: '<a href="/blog/releases/v1.6.1">Spice.ai OSS v1.6.1</a> is now available! 🚀',
103 backgroundColor: 'var(--announcement-bar-bg)',
104 textColor: 'var(--announcement-bar-text)',
105 isCloseable: true
106 },
107 navbar: {
108 title: 'Spice.ai OSS',
109 logo: {
110 alt: 'Spice.ai OSS logo',
111 src: 'img/logo.svg'
112 },
113 hideOnScroll: true,
114 items: [
115 {
116 type: 'doc',
117 position: 'left',
118 docId: 'index',
119 label: 'Docs'
120 },
121 {
122 type: 'docSidebar',
123 position: 'left',
124 sidebarId: 'api',
125 label: 'API'
126 },
127 { to: 'blog', label: 'Blog', position: 'left' },
128 { to: 'cookbook', label: 'Cookbook', position: 'left' },
129 { to: 'docs/reference/sql', label: 'SQL Reference', position: 'left' },
130 {
131 label: 'Try Spice Cloud',
132 href: 'https://spice.ai/login',
133 position: 'right'
134 },
135 {
136 label: 'X',
137 href: 'https://x.com/spice_ai',
138 position: 'right'
139 },
140 {
141 label: 'Discord',
142 href: 'https://discord.gg/kZnTfneP5u',
143 position: 'right'
144 },
145 {
146 label: 'YouTube',
147 href: 'https://www.youtube.com/@spiceai',
148 position: 'right'
149 },
150 {
151 href: 'https://github.com/spiceai/spiceai',
152 position: 'right',
153 className: 'header-github-link',
154 'aria-label': 'GitHub repository'
155 }
156 ]
157 },
158 footer: {
159 style: 'dark',
160 links: [
161 {
162 title: 'Docs',
163 items: [
164 {
165 label: 'Getting Started',
166 to: '/docs/getting-started'
167 },
168 {
169 label: 'API',
170 to: '/docs/api'
171 },
172 {
173 label: 'CLI',
174 to: '/docs/cli'
175 },
176 {
177 label: 'SDKs',
178 to: '/docs/sdks'
179 }
180 ]
181 },
182 {
183 title: 'Community',
184 items: [
185 {
186 label: 'Reddit',
187 href: 'https://reddit.com/r/spiceai'
188 },
189 {
190 label: 'Discord',
191 href: 'https://discord.gg/kZnTfneP5u'
192 },
193 {
194 label: 'X',
195 href: 'https://x.com/spice_ai'
196 },
197 {
198 label: 'YouTube',
199 href: 'https://www.youtube.com/@spiceai'
200 }
201 ]
202 },
203 {
204 title: 'More',
205 items: [
206 {
207 label: 'Blog',
208 href: 'https://blog.spiceai.org'
209 },
210 {
211 label: 'GitHub',
212 href: 'https://github.com/spiceai/spiceai'
213 }
214 ]
215 }
216 ],
217 copyright: `Copyright © 2025 Spice AI, Inc.`
218 },
219 languageTabs: [
220 {
221 highlight: 'bash',
222 language: 'curl',
223 logoClass: 'curl'
224 }
225 ],
226 prism: {
227 theme: prismThemes.oneLight,
228 darkTheme: prismThemes.gruvboxMaterialDark,
229 additionalLanguages: ['bash', 'json', 'csharp']
230 },
231 algolia: {
232 appId: '0SP8I8JTL8',
233 apiKey: '72f66fe334ccd3c7db696a123d68735c',
234 indexName: 'spiceai',
235 contextualSearch: false
236 }
237 } satisfies Preset.ThemeConfig,
238
239 headTags: [
240 {
241 tagName: 'link',
242 attributes: {
243 rel: 'preconnect',
244 href: 'https://fonts.googleapis.com'
245 }
246 },
247 {
248 tagName: 'link',
249 attributes: {
250 rel: 'preconnect',
251 href: 'https://fonts.gstatic.com',
252 crossorigin: 'true'
253 }
254 },
255 {
256 tagName: 'link',
257 attributes: {
258 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',
259 rel: 'stylesheet'
260 }
261 },
262 {
263 tagName: 'link',
264 attributes: {
265 rel: 'icon',
266 type: 'image/png',
267 sizes: '32x32',
268 href: '/favicon-32x32.png'
269 }
270 },
271 {
272 tagName: 'link',
273 attributes: {
274 rel: 'icon',
275 type: 'image/png',
276 sizes: '16x16',
277 href: '/favicon-16x16.png'
278 }
279 },
280 {
281 tagName: 'script',
282 attributes: {
283 type: 'text/javascript',
284 id: 'hs-script-loader',
285 async: 'true',
286 defer: 'true',
287 src: '//js.hs-scripts.com/46107967.js'
288 }
289 }
290 ],
291
292 plugins: [
293 tailwindPlugin,
294 [
295 'docusaurus-plugin-openapi-docs',
296 {
297 id: 'api',
298 docsPluginId: 'classic',
299 config: {
300 spice: {
301 proxy: 'http://localhost:8090',
302
303 specPath: 'public/openapi.json',
304 outputDir: 'docs/api/HTTP',
305 sidebarOptions: {
306 groupPathsBy: 'tag'
307 }
308 } satisfies OpenApiPlugin.Options
309 }
310 }
311 ],
312 [
313 '@docusaurus/plugin-client-redirects',
314 {
315 redirects: [
316 {
317 from: '/query-federation',
318 to: '/docs/features/query-federation'
319 },
320 {
321 from: '/blog/2025/amazon-s3-vectors-with-spice',
322 to: '/blog/amazon-s3-vectors-with-spice'
323 },
324 {
325 from: '/federated-queries',
326 to: '/docs/features/query-federation'
327 },
328 {
329 from: '/data-ingestion',
330 to: '/docs/features/data-ingestion'
331 },
332 {
333 from: '/data-acceleration',
334 to: '/docs/features/data-acceleration'
335 },
336 {
337 from: '/monitoring',
338 to: '/docs/features/observability'
339 }
340 ]
341 }
342 ]
343 ]
344}
345
346export default config
347