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