1import React from 'react'
2import { Title } from '@site/src/components/atoms/title/title'
3import { Paragraph } from '@site/src/components/atoms/paragraph/paragraph'
4import { Container } from '@site/src/components/atoms/container/container'
5import { Recipe } from '@site/src/components/molecules/recipe/recipe'
6import { Link } from '@site/src/components/atoms/link/link'
7import { Icon } from '@site/src/components/atoms/icon/icon'
8
9interface RecipeData {
10 title: string
11 description: string
12 path: string
13 tags: string[]
14 videoUrl?: string
15}
16
17const recipeBaseUrl = 'https://github.com/spiceai/cookbook/blob/trunk'
18
19const recipes: RecipeData[] = [
20 // Core scenarios
21 {
22 title: 'Federated SQL Query',
23 description:
24 'Join data from S3 and PostgreSQL in a single SQL query, then accelerate both locally.',
25 path: '/federation/README.md',
26 tags: ['core', 'federation', 'sql']
27 },
28 {
29 title: 'Cayenne Data Accelerator',
30 description: 'Accelerate a local copy of a dataset stored in S3 using Cayenne.',
31 path: '/cayenne/README.md',
32 tags: ['core', 'acceleration', 'cayenne']
33 },
34 {
35 title: 'Async Queries',
36 description: 'Submit long-running SQL queries and retrieve the results asynchronously.',
37 path: '/async-queries/README.md',
38 tags: ['core', 'sql', 'async']
39 },
40 {
41 title: 'Hybrid-Search with RRF',
42 description:
43 'Combine full-text and vector search using Reciprocal Rank Fusion (RRF) for improved search results.',
44 path: '/search/README.md',
45 tags: ['core', 'search', 'rrf']
46 },
47 {
48 title: 'AI SQL Function',
49 description: 'Invoke LLMs directly within SQL queries using the AI SQL function.',
50 path: '/ai/README.md',
51 tags: ['core', 'ai', 'sql', 'llm']
52 },
53 // Sample Applications and guides
54 {
55 title: 'Command Query Responsibility Segregation (CQRS)',
56 description: 'Sample application implementing the CQRS pattern with Spice.',
57 path: '/cqrs/README.md',
58 tags: ['sample', 'cqrs', 'application']
59 },
60 {
61 title: 'Intelligent Security Copilot',
62 description:
63 'Use AI to analyze real-time data access patterns and detect potential security risks.',
64 path: '/guides/security-analyzer/README.md',
65 tags: ['guide', 'analyzer']
66 },
67 // Models & AI
68 {
69 title: 'Azure OpenAI Models',
70 description:
71 'Use Azure OpenAI models for vector search and chat over structured and unstructured data.',
72 path: '/azure_openai/README.md',
73 tags: ['ai', 'openai', 'azure']
74 },
75 {
76 title: 'OpenAI Models',
77 description: 'Use OpenAI language and embedding models with Spice.',
78 path: '/models/openai/README.md',
79 tags: ['ai', 'openai', 'models']
80 },
81 {
82 title: 'Running Llama3 Locally',
83 description: 'Use the Llama family of models locally from HuggingFace using Spice.',
84 path: '/llama/README.md',
85 tags: ['ai', 'llama', 'huggingface'],
86 videoUrl: 'https://youtu.be/I2i6uZKBbd4'
87 },
88 {
89 title: 'Filesystem Hosted Model',
90 description: 'Serve a model stored on the local filesystem.',
91 path: '/models/filesystem/README.md',
92 tags: ['ai', 'models', 'local']
93 },
94 {
95 title: 'OpenAI SDK',
96 description: 'Use the OpenAI SDK to connect to models hosted on Spice.',
97 path: '/openai_sdk/README.md',
98 tags: ['ai', 'openai', 'sdk']
99 },
100 {
101 title: 'OpenAI Responses API',
102 description: 'Use the OpenAI Responses API with Spice.',
103 path: '/openai-responses-api/README.md',
104 tags: ['ai', 'openai']
105 },
106 {
107 title: 'LLM Memory',
108 description: 'Persistent memory for language models.',
109 path: '/llm-memory/README.md',
110 tags: ['ai', 'llm', 'memory'],
111 videoUrl: 'https://youtu.be/uc8TCAPu1IM'
112 },
113 {
114 title: 'Text to SQL (NSQL)',
115 description:
116 'Ask natural language (NLP) questions of your datasets using the built-in text-to-SQL tool.',
117 path: '/text-to-sql/README.md',
118 tags: ['ai', 'text-to-sql', 'nsql', 'tools']
119 },
120 {
121 title: 'Generative Visualizations',
122 description: 'Generate SQL queries and interactive charts from natural language questions.',
123 path: '/generative-visualisations/README.md',
124 tags: ['ai', 'visualization', 'charts']
125 },
126 {
127 title: 'Nvidia NIM on Kubernetes',
128 description: 'Deploy Nvidia NIM infrastructure on Kubernetes with GPUs, connected to Spice.',
129 path: '/nvidia-nim/kubernetes/README.md',
130 tags: ['ai', 'nvidia', 'nim', 'kubernetes']
131 },
132 {
133 title: 'Nvidia NIM on AWS EC2',
134 description: 'Deploy Nvidia NIM on a GPU-optimized AWS EC2 instance, connected to Spice.',
135 path: '/nvidia-nim/ec2/README.md',
136 tags: ['ai', 'nvidia', 'nim', 'aws']
137 },
138 {
139 title: 'Searching GitHub Files',
140 description: 'Search GitHub files with embeddings and vector similarity search.',
141 path: '/search_github_files/README.md',
142 tags: ['ai', 'github', 'search'],
143 videoUrl: 'https://youtu.be/5y26MveEJ8c'
144 },
145 {
146 title: 'xAI Models',
147 description: 'Use xAI models such as Grok.',
148 path: '/models/xai/README.md',
149 tags: ['ai', 'xai', 'models'],
150 videoUrl: 'https://youtu.be/-7RkAsqQLdk'
151 },
152 {
153 title: 'DeepSeek Model',
154 description: 'Use DeepSeek model through Spice.',
155 path: '/deepseek/README.md',
156 tags: ['ai', 'deepseek', 'models']
157 },
158 {
159 title: 'Model Context Protocol (MCP)',
160 description: 'Connect to MCP servers and use MCP tools with Spice.',
161 path: '/mcp/README.md',
162 tags: ['ai', 'mcp', 'tools']
163 },
164 {
165 title: 'Spice as an MCP Server',
166 description:
167 'Run Spice as an MCP server and connect AI assistants such as Claude Desktop, Cursor, or VS Code.',
168 path: '/mcp-server/README.md',
169 tags: ['ai', 'mcp', 'tools']
170 },
171 {
172 title: 'Amazon S3 Vectors',
173 description: 'Use Amazon S3 Vectors to store embeddings and perform efficient vector search.',
174 path: '/vectors/s3/README.md',
175 tags: ['ai', 'search', 'AWS'],
176 videoUrl: 'https://www.youtube.com/watch?v=QPbqPf5W36g'
177 },
178 // Data Acceleration
179 {
180 title: 'DuckDB Data Accelerator',
181 description: 'Accelerate data locally using DuckDB.',
182 path: '/duckdb/accelerator/README.md',
183 tags: ['acceleration', 'duckdb', 'data'],
184 videoUrl: 'https://youtu.be/hFvVz5NGpaw'
185 },
186 {
187 title: 'PostgreSQL Data Accelerator',
188 description:
189 'Materialize data into an attached PostgreSQL instance. Available in Spice.ai Enterprise.',
190 path: '/postgres/accelerator/README.md',
191 tags: ['acceleration', 'postgresql', 'data', 'enterprise']
192 },
193 {
194 title: 'SQLite Data Accelerator',
195 description: 'Accelerate data locally using SQLite.',
196 path: '/sqlite/accelerator/README.md',
197 tags: ['acceleration', 'sqlite', 'data']
198 },
199 {
200 title: 'Apache Arrow Data Accelerator',
201 description: 'Accelerate data in memory using Apache Arrow.',
202 path: '/arrow/README.md',
203 tags: ['acceleration', 'apache', 'arrow']
204 },
205 {
206 title: 'Hashed Partitioning with Cayenne',
207 description: 'Prune data on categorical columns, such as IDs, using hashed partitioning.',
208 path: '/hashed_partitioning/README.md',
209 tags: ['acceleration', 'cayenne', 'partitioning']
210 },
211 {
212 title: 'Dataset Partitioning',
213 description: 'Partition accelerated datasets so queries skip partitions they do not need.',
214 path: '/acceleration/partitioning/README.md',
215 tags: ['acceleration', 'partitioning']
216 },
217 {
218 title: 'Accelerated Views',
219 description: 'Pre-calculate and materialize derived data for faster queries.',
220 path: '/views/README.md',
221 tags: ['acceleration', 'views']
222 },
223 {
224 title: 'Acceleration Snapshots',
225 description:
226 'Bootstrap accelerations from snapshots in object storage to skip cold starts. Available in Spice.ai Enterprise.',
227 path: '/acceleration/snapshots/README.md',
228 tags: ['acceleration', 'snapshots', 'enterprise']
229 },
230 {
231 title: 'Dual-Dataset Registration',
232 description: 'Serve queries immediately while a large table accelerates in the background.',
233 path: '/acceleration/dual-dataset-registration/README.md',
234 tags: ['acceleration', 'federation']
235 },
236 {
237 title: 'Serializable Transactions',
238 description:
239 'Commit gated, serializable transactions on Cayenne tables and write the results back to PostgreSQL.',
240 path: '/serializable-transactions/README.md',
241 tags: ['acceleration', 'cayenne', 'transactions']
242 },
243 // Change Data Capture
244 {
245 title: 'PostgreSQL CDC',
246 description:
247 'Stream changes from PostgreSQL using logical replication, without Debezium or Kafka.',
248 path: '/postgres/cdc/README.md',
249 tags: ['cdc', 'postgresql']
250 },
251 {
252 title: 'PostgreSQL Catalog CDC',
253 description:
254 'Discover every table in a PostgreSQL database and keep a local copy of each current with CDC.',
255 path: '/catalogs/postgres-cdc/README.md',
256 tags: ['cdc', 'catalog', 'postgresql']
257 },
258 {
259 title: 'MySQL CDC',
260 description: 'Stream changes from MySQL using the binary log, without Debezium or Kafka.',
261 path: '/mysql/cdc/README.md',
262 tags: ['cdc', 'mysql']
263 },
264 {
265 title: 'AWS Aurora MySQL CDC',
266 description: 'Stream changes from an AWS Aurora MySQL cluster using the binary log.',
267 path: '/mysql/rds-aurora-cdc/README.md',
268 tags: ['cdc', 'aws', 'aurora', 'mysql']
269 },
270 {
271 title: 'MongoDB Change Streams',
272 description: 'Stream changes from a MongoDB collection using Change Streams.',
273 path: '/mongodb/change-streams/README.md',
274 tags: ['cdc', 'mongodb']
275 },
276 {
277 title: 'DynamoDB Streams',
278 description:
279 'Stream inserts, updates, and deletes from a DynamoDB table using DynamoDB Streams.',
280 path: '/dynamodb/streams/README.md',
281 tags: ['cdc', 'aws', 'dynamodb']
282 },
283 {
284 title: 'Debezium CDC from Postgres',
285 description: 'Stream changes from PostgreSQL using Debezium CDC.',
286 path: '/cdc-debezium/README.md',
287 tags: ['cdc', 'debezium', 'postgresql']
288 },
289 {
290 title: 'Debezium CDC with SASL/SCRAM',
291 description: 'Stream MySQL changes using Debezium with SASL/SCRAM authentication.',
292 path: '/cdc-debezium/sasl-scram/README.md',
293 tags: ['cdc', 'debezium', 'sasl', 'scram', 'mysql']
294 },
295 // Search
296 {
297 title: 'Full-Text Search',
298 description: 'Retrieve records matching keywords using BM25 scoring.',
299 path: '/full-text-search/README.md',
300 tags: ['search', 'bm25']
301 },
302 {
303 title: 'Elasticsearch Full-Text and Vector Search',
304 description:
305 'Use Elasticsearch for both full-text and vector search. Available in Spice.ai Enterprise.',
306 path: '/search/elasticsearch/README.md',
307 tags: ['search', 'elasticsearch', 'enterprise']
308 },
309 // Data Connectors
310 {
311 title: 'PostgreSQL Connector',
312 description: 'Connect to and query PostgreSQL databases.',
313 path: '/postgres/connector/README.md',
314 tags: ['connector', 'postgresql', 'query']
315 },
316 {
317 title: 'AWS RDS PostgreSQL',
318 description: 'Connect to AWS RDS PostgreSQL instances.',
319 path: '/postgres/rds/README.md',
320 tags: ['connector', 'aws', 'rds', 'postgresql']
321 },
322 {
323 title: 'Supabase PostgreSQL',
324 description: 'Connect to Supabase PostgreSQL databases.',
325 path: '/postgres/supabase/README.md',
326 tags: ['connector', 'supabase', 'postgresql']
327 },
328 {
329 title: 'MySQL Connector',
330 description: 'Connect to and query MySQL databases.',
331 path: '/mysql/connector/README.md',
332 tags: ['connector', 'mysql', 'query']
333 },
334 {
335 title: 'AWS RDS Aurora MySQL',
336 description: 'Connect to AWS RDS Aurora with MySQL compatibility.',
337 path: '/mysql/rds-aurora/README.md',
338 tags: ['connector', 'aws', 'rds', 'aurora', 'mysql']
339 },
340 {
341 title: 'PlanetScale MySQL',
342 description: 'Connect to PlanetScale MySQL databases.',
343 path: '/mysql/planetscale/README.md',
344 tags: ['connector', 'planetscale', 'mysql']
345 },
346 {
347 title: 'ClickHouse Connector',
348 description: 'Connect to and query ClickHouse databases.',
349 path: '/clickhouse/README.md',
350 tags: ['connector', 'clickhouse', 'query']
351 },
352 {
353 title: 'Databricks Connector',
354 description: 'Connect to and query Databricks instances using Delta Lake or Spark Connect.',
355 path: '/databricks/README.md',
356 tags: ['connector', 'databricks', 'delta', 'lake', 'spark', 'connect']
357 },
358 {
359 title: 'Delta Lake Connector',
360 description: 'Query data from Delta Lake tables.',
361 path: '/delta-lake/README.md',
362 tags: ['connector', 'delta', 'lake']
363 },
364 {
365 title: 'Dremio Connector',
366 description: 'Connect to and query a self-hosted Dremio instance running in Docker.',
367 path: '/dremio/README.md',
368 tags: ['connector', 'dremio', 'query']
369 },
370 {
371 title: 'DuckDB Connector',
372 description: 'Query DuckDB databases with sample TPCH data.',
373 path: '/duckdb/connector/README.md',
374 tags: ['connector', 'duckdb', 'query']
375 },
376 {
377 title: 'DynamoDB Connector',
378 description: 'Query data from an AWS-hosted DynamoDB table.',
379 path: '/dynamodb/README.md',
380 tags: ['connector', 'aws', 'dynamodb']
381 },
382 {
383 title: 'Elasticsearch Connector',
384 description:
385 'Query Elasticsearch indices using federated SQL. Available in Spice.ai Enterprise.',
386 path: '/elasticsearch/connector/README.md',
387 tags: ['connector', 'elasticsearch', 'enterprise']
388 },
389 {
390 title: 'File Connector',
391 description: 'Query data from local files.',
392 path: '/file/README.md',
393 tags: ['connector', 'file', 'query']
394 },
395 {
396 title: 'FTP Connector',
397 description: 'Query data from FTP and SFTP servers.',
398 path: '/ftp/README.md',
399 tags: ['connector', 'ftp', 'query']
400 },
401 {
402 title: 'GitHub Connector',
403 description: 'Connect to and query GitHub data.',
404 path: '/github/README.md',
405 tags: ['connector', 'github', 'query'],
406 videoUrl: 'https://youtu.be/mxwt0HEF1VQ'
407 },
408 {
409 title: 'GraphQL Connector',
410 description: 'Query data from GraphQL endpoints.',
411 path: '/graphql/README.md',
412 tags: ['connector', 'graphql', 'query']
413 },
414 {
415 title: 'HTTP Connector',
416 description: 'Query data from HTTP(S) endpoints, such as REST APIs.',
417 path: '/http/README.md',
418 tags: ['connector', 'http', 'api']
419 },
420 {
421 title: 'MSSQL Connector',
422 description: 'Connect to and query across multiple Microsoft SQL Server instances.',
423 path: '/mssql/README.md',
424 tags: ['connector', 'mssql', 'query']
425 },
426 {
427 title: 'ODBC Connector',
428 description: 'Connect to databases using ODBC. Available in Spice.ai Enterprise.',
429 path: '/odbc/README.md',
430 tags: ['connector', 'odbc', 'query', 'enterprise']
431 },
432 {
433 title: 'Oracle Connector',
434 description: 'Connect to and accelerate data from Oracle databases.',
435 path: '/oracle/README.md',
436 tags: ['connector', 'oracle', 'query']
437 },
438 {
439 title: 'Amazon Redshift',
440 description: 'Read and write TPC-H data with Amazon Redshift.',
441 path: '/redshift/README.md',
442 tags: ['connector', 'aws', 'redshift']
443 },
444 {
445 title: 'Glue Connector',
446 description: 'Query tables in an AWS Glue Data Catalog.',
447 path: '/glue/README.md',
448 tags: ['connector', 'aws', 'glue']
449 },
450 {
451 title: 'S3 Connector',
452 description: 'Query data from S3 compatible storage.',
453 path: '/s3/README.md',
454 tags: ['connector', 's3', 'query']
455 },
456 {
457 title: 'ScyllaDB Connector',
458 description: 'Query ScyllaDB clusters using federated SQL. Available in Spice.ai Enterprise.',
459 path: '/scylladb/README.md',
460 tags: ['connector', 'scylladb', 'enterprise']
461 },
462 {
463 title: 'SharePoint Connector',
464 description: 'Connect to SharePoint and OneDrive for Business.',
465 path: '/sharepoint/README.md',
466 tags: ['connector', 'sharepoint', 'onedrive']
467 },
468 {
469 title: 'SMB Connector',
470 description: 'Query data files on SMB network shares.',
471 path: '/smb/README.md',
472 tags: ['connector', 'smb', 'query']
473 },
474 {
475 title: 'Snowflake Connector',
476 description: 'Connect to and query Snowflake databases.',
477 path: '/snowflake/README.md',
478 tags: ['connector', 'snowflake', 'query']
479 },
480 {
481 title: 'Snowflake DML',
482 description: 'Ingest data from an HTTP API and write it to a Snowflake table with INSERT.',
483 path: '/snowflake/dml/README.md',
484 tags: ['connector', 'snowflake', 'dml']
485 },
486 {
487 title: 'Spice.ai Cloud Connector',
488 description: 'Connect to the Spice.ai Cloud Platform.',
489 path: '/spiceai/README.md',
490 tags: ['connector', 'spiceai', 'cloud']
491 },
492 {
493 title: 'Apache Spark Connector',
494 description: 'Connect to and query Apache Spark.',
495 path: '/spark/README.md',
496 tags: ['connector', 'apache', 'spark', 'query']
497 },
498 {
499 title: 'IMAP Emails',
500 description: 'Federated SQL query of mail across IMAP email servers.',
501 path: '/imap/README.md',
502 tags: ['connector', 'imap', 'datasource']
503 },
504 {
505 title: 'MongoDB Connector',
506 description: 'Connect to and query MongoDB databases.',
507 path: '/mongodb/connector/README.md',
508 tags: ['connector', 'mongodb', 'datasource']
509 },
510 {
511 title: 'Live Orders Analytics with Apache Kafka Data Connector',
512 description: 'Combine real-time data streaming from Kafka with other datasets using Spice.',
513 path: '/kafka/README.md',
514 tags: ['connector', 'apache', 'kafka', 'datasource']
515 },
516 // Catalog Connectors
517 {
518 title: 'Spice.ai Cloud Platform Catalog',
519 description: 'Connect to the Spice.ai Cloud Platform catalog.',
520 path: '/catalogs/spiceai/README.md',
521 tags: ['catalog', 'spiceai', 'cloud']
522 },
523 {
524 title: 'Databricks Unity Catalog',
525 description: 'Connect to Databricks Unity catalog.',
526 path: '/catalogs/databricks/README.md',
527 tags: ['catalog', 'databricks', 'unity']
528 },
529 {
530 title: 'Unity Catalog',
531 description: 'Connect to an open-source Unity Catalog instance.',
532 path: '/catalogs/unity_catalog/README.md',
533 tags: ['catalog', 'unity']
534 },
535 {
536 title: 'Iceberg Catalog Connector',
537 description: 'Connect to Iceberg catalog with support for reading and writing Iceberg tables.',
538 path: '/catalogs/iceberg/README.md',
539 tags: ['catalog', 'iceberg']
540 },
541 {
542 title: 'Iceberg Hadoop Catalog',
543 description: 'Connect to Iceberg Hadoop catalogs, locally or on S3-compatible object storage.',
544 path: '/catalogs/iceberg-hadoop/README.md',
545 tags: ['catalog', 'iceberg', 'hadoop']
546 },
547 {
548 title: 'AWS Glue Catalog',
549 description: 'Query tables registered in an AWS Glue Data Catalog.',
550 path: '/catalogs/glue/README.md',
551 tags: ['catalog', 'aws', 'glue']
552 },
553 {
554 title: 'DuckLake Catalog',
555 description: 'Discover and query all schemas and tables in a DuckLake catalog.',
556 path: '/catalogs/ducklake/README.md',
557 tags: ['catalog', 'ducklake']
558 },
559 {
560 title: 'PostgreSQL Catalog',
561 description: 'Discover and query all schemas and tables in a PostgreSQL database.',
562 path: '/catalogs/postgres/README.md',
563 tags: ['catalog', 'postgresql']
564 },
565 {
566 title: 'MySQL Catalog',
567 description: 'Discover and query all databases and tables in a MySQL server.',
568 path: '/catalogs/mysql/README.md',
569 tags: ['catalog', 'mysql']
570 },
571 {
572 title: 'Microsoft SQL Server Catalog',
573 description: 'Discover and query all schemas and tables in a SQL Server database.',
574 path: '/catalogs/mssql/README.md',
575 tags: ['catalog', 'mssql']
576 },
577 // Visualization
578 {
579 title: 'Sales BI with Apache Superset',
580 description: 'Visualize data in Spice with Apache Superset.',
581 path: '/sales-bi/README.md',
582 tags: ['visualization', 'bi', 'superset']
583 },
584 {
585 title: 'Grafana Datasource',
586 description: 'Add Spice as a Grafana datasource.',
587 path: '/grafana-datasource/README.md',
588 tags: ['visualization', 'grafana', 'datasource']
589 },
590
591 // Deployment
592 {
593 title: 'Deploying to Kubernetes',
594 description: 'Deploy Spice.ai on Kubernetes using the Helm chart.',
595 path: '/kubernetes/README.md',
596 tags: ['deployment', 'kubernetes']
597 },
598 {
599 title: 'Running in Docker',
600 description: 'Run Spice.ai in Docker containers.',
601 path: '/docker/README.md',
602 tags: ['deployment', 'docker']
603 },
604 {
605 title: 'Sidecar Deployment Architecture',
606 description: 'Run Spice alongside the application on the same host for low-latency access.',
607 path: '/architectures/sidecar/README.md',
608 tags: ['deployment', 'architecture']
609 },
610 {
611 title: 'Microservice Deployment Architecture',
612 description:
613 'Run Spice as an independent service, optionally with replicas behind a load balancer.',
614 path: '/architectures/microservice/README.md',
615 tags: ['deployment', 'architecture']
616 },
617 {
618 title: 'Cloud Connect on a Development Machine',
619 description:
620 'Connect a local Spice instance to Spice Cloud, deploy changes without restarting, and deliver secrets.',
621 path: '/cloud-connect-dev/README.md',
622 tags: ['deployment', 'cloud']
623 },
624
625 // Performance
626 {
627 title: 'TPC-H Benchmarking',
628 description: 'Load TPC-H benchmark data and run the benchmark queries.',
629 path: '/tpc-h/README.md',
630 tags: ['performance', 'benchmarking', 'tpc-h']
631 },
632 {
633 title: 'SQL Results Caching',
634 description: 'Cache query results in memory for faster repeated queries.',
635 path: '/caching/sql_results/README.md',
636 tags: ['performance', 'caching']
637 },
638 {
639 title: 'Caching Accelerator',
640 description: 'Cache HTTP-based datasets with stale-while-revalidate (SWR) support.',
641 path: '/caching/accelerator/README.md',
642 tags: ['performance', 'caching', 'http']
643 },
644 {
645 title: 'Indexes on Accelerated Data',
646 description: 'Create and manage indexes on accelerated data.',
647 path: '/acceleration/indexes/README.md',
648 tags: ['performance', 'indexes', 'acceleration']
649 },
650
651 // Configuration
652 {
653 title: 'Data Retention Policy',
654 description: 'Evict accelerated data older than a specified duration.',
655 path: '/retention/README.md',
656 tags: ['configuration', 'retention']
657 },
658 {
659 title: 'Refresh Data Window',
660 description: 'Refresh only recent data into accelerated datasets.',
661 path: '/refresh-data-window/README.md',
662 tags: ['configuration', 'refresh']
663 },
664 {
665 title: 'Advanced Data Refresh',
666 description: 'Advanced configuration for data refresh.',
667 path: '/acceleration/data-refresh/README.md',
668 tags: ['configuration', 'data', 'refresh']
669 },
670 {
671 title: 'Data Quality with Constraints',
672 description: 'Enforce data quality constraints on accelerated datasets.',
673 path: '/acceleration/constraints/README.md',
674 tags: ['configuration', 'data', 'quality', 'constraints']
675 },
676 {
677 title: 'Cron Dataset Schedules',
678 description: 'Schedule dataset refreshes using cron syntax.',
679 path: '/acceleration/cron/README.md',
680 tags: ['configuration', 'scheduling', 'refresh']
681 },
682
683 // Client SDKs
684 {
685 title: 'Rust SDK',
686 description: 'Query Spice.ai using the Rust SDK.',
687 path: '/client-sdk/spice-rs-sdk-sample/README.md',
688 tags: ['sdk', 'rust']
689 },
690 {
691 title: 'Python SDK',
692 description: 'Query Spice.ai using the Python SDK.',
693 path: '/client-sdk/spicepy-sdk-sample/README.md',
694 tags: ['sdk', 'python']
695 },
696 {
697 title: 'Go SDK',
698 description: 'Query Spice.ai using the Go SDK.',
699 path: '/client-sdk/gospice-sdk-sample/README.md',
700 tags: ['sdk', 'go']
701 },
702 {
703 title: 'Spice.js JavaScript (Node.js) SDK',
704 description: 'Query Spice.ai using the JavaScript (Node.js) SDK with examples.',
705 path: '/client-sdk/spice.js-sdk-sample/README.md',
706 tags: ['sdk', 'javascript']
707 },
708 {
709 title: 'Java SDK',
710 description: 'Query Spice.ai using the Java SDK.',
711 path: '/client-sdk/spice-java-sdk-sample/README.md',
712 tags: ['sdk', 'java']
713 },
714 {
715 title: '.NET SDK',
716 description: 'Query Spice.ai from C# using the .NET SDK.',
717 path: '/client-sdk/spice-dotnet-sdk-sample/README.md',
718 tags: ['sdk', 'dotnet', 'csharp']
719 },
720 // Clients
721 {
722 title: 'Python ADBC Client',
723 description: 'Query Spice using ADBC and Parameterized Queries with Python.',
724 path: '/clients/adbc/README.md',
725 tags: ['client', 'python', 'adbc', 'parameterized queries']
726 },
727 {
728 title: 'Java JDBC Client',
729 description: 'Query Spice.ai using the Java JDBC client.',
730 path: '/clients/java/README.md',
731 tags: ['client', 'java', 'jdbc']
732 },
733 {
734 title: 'Scala JDBC Client',
735 description: 'Query Spice.ai using the Scala JDBC client.',
736 path: '/clients/scala/README.md',
737 tags: ['client', 'scala', 'jdbc']
738 },
739 {
740 title: 'cURL with Spice.ai Cloud',
741 description: 'Run SQL against Spice.ai Cloud over HTTP using cURL.',
742 path: '/client-sdk/curl-sample/README.md',
743 tags: ['client', 'curl', 'cloud']
744 },
745 {
746 title: 'Spice CLI with Spice.ai Cloud',
747 description: 'Run SQL against Spice.ai Cloud using the Spice CLI.',
748 path: '/client-sdk/spice-cli-sample/README.md',
749 tags: ['client', 'cli', 'cloud']
750 },
751 // Security
752 {
753 title: 'TLS Encryption',
754 description: 'Enable encryption in transit using TLS.',
755 path: '/tls/README.md',
756 tags: ['security', 'tls']
757 },
758 {
759 title: 'API Key Authentication',
760 description: 'Secure access with API key authentication.',
761 path: '/api_key/README.md',
762 tags: ['security', 'api', 'key']
763 },
764 {
765 title: 'Mutual TLS (mTLS)',
766 description:
767 'Authenticate clients with certificates using mutual TLS. Available in Spice.ai Enterprise.',
768 path: '/mtls/README.md',
769 tags: ['security', 'mtls', 'enterprise']
770 },
771 {
772 title: 'Authorization',
773 description:
774 'Add multi-tenancy, row-level security, PII masking, and RBAC with Cedar policies. Available in Spice.ai Enterprise.',
775 path: '/authorization/README.md',
776 tags: ['security', 'authorization', 'enterprise']
777 },
778
779 // Advanced
780 {
781 title: 'Local Dataset Replication',
782 description: 'Link datasets in a parent/child relationship within the current Spicepod.',
783 path: '/localpod/README.md',
784 tags: ['advanced', 'replication', 'dataset']
785 },
786 {
787 title: 'Distributed Query',
788 description: 'Run queries across multiple nodes using schedulers and executors.',
789 path: '/distributed/README.md',
790 tags: ['advanced', 'distributed', 'cluster']
791 },
792 {
793 title: 'JSON Strings',
794 description: 'Work with JSON strings using JSON functions.',
795 path: '/json_strings/README.md',
796 tags: ['advanced', 'json', 'sql']
797 }
798]
799
800const RecipeGroup: React.FC<{ recipes: RecipeData[] }> = ({ recipes }) => {
801 const getGridClass = (count: number) => {
802 if (count === 1) return 'grid-cols-1 max-w-sm mx-auto'
803 if (count === 2) return 'grid-cols-1 sm:grid-cols-2 max-w-2xl mx-auto'
804 if (count === 3) return 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 max-w-4xl mx-auto'
805 return 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4'
806 }
807
808 return (
809 <section className='mx-auto px-6 md:max-w-[1020px] md:px-0'>
810 <div className={`grid gap-4 ${getGridClass(recipes.length)}`}>
811 {recipes.map((recipe, index) => (
812 <div key={index} className='h-full'>
813 <Recipe
814 title={recipe.title}
815 description={recipe.description}
816 href={recipeBaseUrl + recipe.path}
817 videoUrl={recipe.videoUrl}
818 className='h-full px-4 py-4 text-xs gap-4 md:gap-8 md:px-8 md:py-8'
819 />
820 </div>
821 ))}
822 </div>
823 </section>
824 )
825}
826
827export function CookbookPage() {
828 const filterByTag = (...tags: string[]) =>
829 recipes.filter((r) => r.tags.some((t) => tags.includes(t)))
830
831 const description = `${recipes.length} guides and samples to help you build data-grounded AI apps and agents with Spice.ai Open-Source. Find ready-to-use examples for data acceleration, AI agents, LLM memory, and more.`
832
833 return (
834 <div className='tailwind font-sans'>
835 <Title as='h1' variant='large' className='mx-auto mb-7 mt-8 md:text-center xl:max-w-[1020px]'>
836 🧑🍳 Spice.ai OSS <span className='text-primary'>Cookbook</span>
837 </Title>
838
839 <Paragraph className='mb-6 md:text-center mx-auto px-6 md:max-w-[843px]'>
840 {description}
841 </Paragraph>
842
843 <Paragraph className='mb-6 md:text-center mx-auto px-6 md:max-w-[843px] hover:underline'>
844 <Link
845 className='inline-flex gap-1.5'
846 target='_blank'
847 href='https://github.com/spiceai/cookbook/blob/trunk/README.md'
848 >
849 <Icon iconName='github' /> Contribute to the Cookbook on GitHub!
850 </Link>
851 </Paragraph>
852
853 <Container className='mt-6 mb-20'>
854 <Title className='mb-14 text-center'>Featured Recipes</Title>
855
856 <section className='mx-auto px-6 md:max-w-[843px] md:px-0'>
857 <div className='flex flex-col gap-6 md:flex-row'>
858 <div className='flex w-full flex-col gap-6 md:w-1/2'>
859 <Recipe
860 title='Federated SQL Query'
861 description='Join S3 and PostgreSQL data in one SQL query.'
862 href={`${recipeBaseUrl}/federation/README.md`}
863 />
864 <Recipe
865 title='Run Llama3 Locally'
866 description='Use Llama models from HuggingFace with Spice.'
867 href={`${recipeBaseUrl}/llama/README.md`}
868 videoUrl='https://youtu.be/I2i6uZKBbd4'
869 />
870 </div>
871 <div className='flex w-full flex-col gap-6 md:w-1/2 md:pt-20'>
872 <Recipe
873 title='Data Acceleration with Cayenne'
874 description='Speed up queries using Cayenne.'
875 href={`${recipeBaseUrl}/cayenne/README.md`}
876 />
877 <Recipe
878 title='LLM Memory'
879 description='Persistent memory for language models'
880 href={`${recipeBaseUrl}/llm-memory/README.md`}
881 videoUrl='https://youtu.be/uc8TCAPu1IM'
882 />
883 </div>
884 </div>
885 </section>
886 </Container>
887
888 <Container className='mt-6 mb-20'>
889 <Title className='mb-4 text-center'>Sample Applications and Guides</Title>
890 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
891 Example apps and guides for real-world Spice.ai usage and best practices.
892 </Paragraph>
893
894 <RecipeGroup recipes={filterByTag('sample', 'guide')} />
895 </Container>
896
897 <Container className='mt-6 mb-20'>
898 <Title className='mb-4 text-center'>Core Features</Title>
899 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
900 Start with the core capabilities: federated SQL query, data acceleration, async queries,
901 hybrid search, and AI inference in SQL.
902 </Paragraph>
903
904 <RecipeGroup recipes={filterByTag('core')} />
905 </Container>
906
907 <Container className='mt-6 mb-20'>
908 <Title className='mb-4 text-center'>Models, AI, and Agents</Title>
909 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
910 Connect to hosted and local AI models, and build intelligent agents using Spice.ai.
911 </Paragraph>
912
913 <RecipeGroup recipes={filterByTag('ai')} />
914 </Container>
915
916 <Container className='mt-6 mb-20'>
917 <Title className='mb-4 text-center'>
918 Data Acceleration, Materialization, and Federation
919 </Title>
920 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
921 Optimize query performance with local acceleration, data materialization, and federation
922 techniques.
923 </Paragraph>
924
925 <RecipeGroup recipes={filterByTag('acceleration')} />
926 </Container>
927
928 <Container className='mt-6 mb-20'>
929 <Title className='mb-4 text-center'>Change Data Capture (CDC)</Title>
930 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
931 Stream inserts, updates, and deletes from source databases to keep accelerated datasets
932 current.
933 </Paragraph>
934
935 <RecipeGroup recipes={filterByTag('cdc')} />
936 </Container>
937
938 <Container className='mt-6 mb-20'>
939 <Title className='mb-4 text-center'>Search & Embeddings</Title>
940 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
941 Search data with full-text, vector, and hybrid search, using embeddings and vector
942 engines.
943 </Paragraph>
944
945 <RecipeGroup recipes={filterByTag('search')} />
946 </Container>
947
948 <Container className='mt-6 mb-20'>
949 <Title className='mb-4 text-center'>Data Connectors</Title>
950 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
951 Connect to databases, data warehouses, data lakes, and APIs, and query them with SQL.
952 </Paragraph>
953
954 <RecipeGroup recipes={filterByTag('connector')} />
955 </Container>
956
957 <Container className='mt-6 mb-20'>
958 <Title className='mb-4 text-center'>Catalog Connectors</Title>
959 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
960 Connect to data catalogs to discover and query their tables.
961 </Paragraph>
962
963 <RecipeGroup recipes={filterByTag('catalog')} />
964 </Container>
965
966 <Container className='mt-6 mb-20'>
967 <Title className='mb-4 text-center'>Visualization</Title>
968 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
969 Visualize data with BI and analytics tools.
970 </Paragraph>
971
972 <RecipeGroup recipes={filterByTag('visualization')} />
973 </Container>
974
975 <Container className='mt-6 mb-20'>
976 <Title className='mb-4 text-center'>API Clients</Title>
977 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
978 Use API clients for data access and integration.
979 </Paragraph>
980
981 <RecipeGroup recipes={filterByTag('client')} />
982 </Container>
983
984 <Container className='mt-6 mb-20'>
985 <Title className='mb-4 text-center'>Deployment</Title>
986 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
987 Deploy Spice.ai in different environments.
988 </Paragraph>
989
990 <RecipeGroup recipes={filterByTag('deployment')} />
991 </Container>
992
993 <Container className='mt-6 mb-20'>
994 <Title className='mb-4 text-center'>Performance and Benchmarking</Title>
995 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
996 Measure and optimize performance with benchmarks and best practices for your Spice.ai
997 deployment.
998 </Paragraph>
999
1000 <RecipeGroup recipes={filterByTag('performance')} />
1001 </Container>
1002
1003 <Container className='mt-6 mb-20'>
1004 <Title className='mb-4 text-center'>Configuration</Title>
1005 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1006 Configure data refresh, retention, scheduling, and data quality for accelerated
1007 datasets.
1008 </Paragraph>
1009
1010 <RecipeGroup recipes={filterByTag('configuration')} />
1011 </Container>
1012
1013 <Container className='mt-6 mb-20'>
1014 <Title className='mb-4 text-center'>SDKs</Title>
1015 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1016 Use SDKs for different programming languages.
1017 </Paragraph>
1018
1019 <RecipeGroup recipes={filterByTag('sdk')} />
1020 </Container>
1021
1022 <Container className='mt-6 mb-20'>
1023 <Title className='mb-4 text-center'>Security</Title>
1024 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1025 Secure your Spice.ai deployment and data access with encryption, authentication, and
1026 authorization.
1027 </Paragraph>
1028
1029 <RecipeGroup recipes={filterByTag('security')} />
1030 </Container>
1031
1032 <Container className='mt-6 mb-20'>
1033 <Title className='mb-4 text-center'>Advanced Topics</Title>
1034 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1035 Replicate datasets locally, distribute queries across nodes, and work with JSON data.
1036 </Paragraph>
1037
1038 <RecipeGroup recipes={filterByTag('advanced')} />
1039 </Container>
1040 </div>
1041 )
1042}
1043
1import React from 'react'
2import { Title } from '@site/src/components/atoms/title/title'
3import { Paragraph } from '@site/src/components/atoms/paragraph/paragraph'
4import { Container } from '@site/src/components/atoms/container/container'
5import { Recipe } from '@site/src/components/molecules/recipe/recipe'
6import { Link } from '@site/src/components/atoms/link/link'
7import { Icon } from '@site/src/components/atoms/icon/icon'
8
9interface RecipeData {
10 title: string
11 description: string
12 path: string
13 tags: string[]
14 videoUrl?: string
15}
16
17const recipeBaseUrl = 'https://github.com/spiceai/cookbook/blob/trunk'
18
19const recipes: RecipeData[] = [
20 // Core scenarios
21 {
22 title: 'Federated SQL Query',
23 description:
24 'Join data from S3 and PostgreSQL in a single SQL query, then accelerate both locally.',
25 path: '/federation/README.md',
26 tags: ['core', 'federation', 'sql']
27 },
28 {
29 title: 'Cayenne Data Accelerator',
30 description: 'Accelerate a local copy of a dataset stored in S3 using Cayenne.',
31 path: '/cayenne/README.md',
32 tags: ['core', 'acceleration', 'cayenne']
33 },
34 {
35 title: 'Async Queries',
36 description: 'Submit long-running SQL queries and retrieve the results asynchronously.',
37 path: '/async-queries/README.md',
38 tags: ['core', 'sql', 'async']
39 },
40 {
41 title: 'Hybrid-Search with RRF',
42 description:
43 'Combine full-text and vector search using Reciprocal Rank Fusion (RRF) for improved search results.',
44 path: '/search/README.md',
45 tags: ['core', 'search', 'rrf']
46 },
47 {
48 title: 'AI SQL Function',
49 description: 'Invoke LLMs directly within SQL queries using the AI SQL function.',
50 path: '/ai/README.md',
51 tags: ['core', 'ai', 'sql', 'llm']
52 },
53 // Sample Applications and guides
54 {
55 title: 'Command Query Responsibility Segregation (CQRS)',
56 description: 'Sample application implementing the CQRS pattern with Spice.',
57 path: '/cqrs/README.md',
58 tags: ['sample', 'cqrs', 'application']
59 },
60 {
61 title: 'Intelligent Security Copilot',
62 description:
63 'Use AI to analyze real-time data access patterns and detect potential security risks.',
64 path: '/guides/security-analyzer/README.md',
65 tags: ['guide', 'analyzer']
66 },
67 // Models & AI
68 {
69 title: 'Azure OpenAI Models',
70 description:
71 'Use Azure OpenAI models for vector search and chat over structured and unstructured data.',
72 path: '/azure_openai/README.md',
73 tags: ['ai', 'openai', 'azure']
74 },
75 {
76 title: 'OpenAI Models',
77 description: 'Use OpenAI language and embedding models with Spice.',
78 path: '/models/openai/README.md',
79 tags: ['ai', 'openai', 'models']
80 },
81 {
82 title: 'Running Llama3 Locally',
83 description: 'Use the Llama family of models locally from HuggingFace using Spice.',
84 path: '/llama/README.md',
85 tags: ['ai', 'llama', 'huggingface'],
86 videoUrl: 'https://youtu.be/I2i6uZKBbd4'
87 },
88 {
89 title: 'Filesystem Hosted Model',
90 description: 'Serve a model stored on the local filesystem.',
91 path: '/models/filesystem/README.md',
92 tags: ['ai', 'models', 'local']
93 },
94 {
95 title: 'OpenAI SDK',
96 description: 'Use the OpenAI SDK to connect to models hosted on Spice.',
97 path: '/openai_sdk/README.md',
98 tags: ['ai', 'openai', 'sdk']
99 },
100 {
101 title: 'OpenAI Responses API',
102 description: 'Use the OpenAI Responses API with Spice.',
103 path: '/openai-responses-api/README.md',
104 tags: ['ai', 'openai']
105 },
106 {
107 title: 'LLM Memory',
108 description: 'Persistent memory for language models.',
109 path: '/llm-memory/README.md',
110 tags: ['ai', 'llm', 'memory'],
111 videoUrl: 'https://youtu.be/uc8TCAPu1IM'
112 },
113 {
114 title: 'Text to SQL (NSQL)',
115 description:
116 'Ask natural language (NLP) questions of your datasets using the built-in text-to-SQL tool.',
117 path: '/text-to-sql/README.md',
118 tags: ['ai', 'text-to-sql', 'nsql', 'tools']
119 },
120 {
121 title: 'Generative Visualizations',
122 description: 'Generate SQL queries and interactive charts from natural language questions.',
123 path: '/generative-visualisations/README.md',
124 tags: ['ai', 'visualization', 'charts']
125 },
126 {
127 title: 'Nvidia NIM on Kubernetes',
128 description: 'Deploy Nvidia NIM infrastructure on Kubernetes with GPUs, connected to Spice.',
129 path: '/nvidia-nim/kubernetes/README.md',
130 tags: ['ai', 'nvidia', 'nim', 'kubernetes']
131 },
132 {
133 title: 'Nvidia NIM on AWS EC2',
134 description: 'Deploy Nvidia NIM on a GPU-optimized AWS EC2 instance, connected to Spice.',
135 path: '/nvidia-nim/ec2/README.md',
136 tags: ['ai', 'nvidia', 'nim', 'aws']
137 },
138 {
139 title: 'Searching GitHub Files',
140 description: 'Search GitHub files with embeddings and vector similarity search.',
141 path: '/search_github_files/README.md',
142 tags: ['ai', 'github', 'search'],
143 videoUrl: 'https://youtu.be/5y26MveEJ8c'
144 },
145 {
146 title: 'xAI Models',
147 description: 'Use xAI models such as Grok.',
148 path: '/models/xai/README.md',
149 tags: ['ai', 'xai', 'models'],
150 videoUrl: 'https://youtu.be/-7RkAsqQLdk'
151 },
152 {
153 title: 'DeepSeek Model',
154 description: 'Use DeepSeek model through Spice.',
155 path: '/deepseek/README.md',
156 tags: ['ai', 'deepseek', 'models']
157 },
158 {
159 title: 'Model Context Protocol (MCP)',
160 description: 'Connect to MCP servers and use MCP tools with Spice.',
161 path: '/mcp/README.md',
162 tags: ['ai', 'mcp', 'tools']
163 },
164 {
165 title: 'Spice as an MCP Server',
166 description:
167 'Run Spice as an MCP server and connect AI assistants such as Claude Desktop, Cursor, or VS Code.',
168 path: '/mcp-server/README.md',
169 tags: ['ai', 'mcp', 'tools']
170 },
171 {
172 title: 'Amazon S3 Vectors',
173 description: 'Use Amazon S3 Vectors to store embeddings and perform efficient vector search.',
174 path: '/vectors/s3/README.md',
175 tags: ['ai', 'search', 'AWS'],
176 videoUrl: 'https://www.youtube.com/watch?v=QPbqPf5W36g'
177 },
178 // Data Acceleration
179 {
180 title: 'DuckDB Data Accelerator',
181 description: 'Accelerate data locally using DuckDB.',
182 path: '/duckdb/accelerator/README.md',
183 tags: ['acceleration', 'duckdb', 'data'],
184 videoUrl: 'https://youtu.be/hFvVz5NGpaw'
185 },
186 {
187 title: 'PostgreSQL Data Accelerator',
188 description:
189 'Materialize data into an attached PostgreSQL instance. Available in Spice.ai Enterprise.',
190 path: '/postgres/accelerator/README.md',
191 tags: ['acceleration', 'postgresql', 'data', 'enterprise']
192 },
193 {
194 title: 'SQLite Data Accelerator',
195 description: 'Accelerate data locally using SQLite.',
196 path: '/sqlite/accelerator/README.md',
197 tags: ['acceleration', 'sqlite', 'data']
198 },
199 {
200 title: 'Apache Arrow Data Accelerator',
201 description: 'Accelerate data in memory using Apache Arrow.',
202 path: '/arrow/README.md',
203 tags: ['acceleration', 'apache', 'arrow']
204 },
205 {
206 title: 'Hashed Partitioning with Cayenne',
207 description: 'Prune data on categorical columns, such as IDs, using hashed partitioning.',
208 path: '/hashed_partitioning/README.md',
209 tags: ['acceleration', 'cayenne', 'partitioning']
210 },
211 {
212 title: 'Dataset Partitioning',
213 description: 'Partition accelerated datasets so queries skip partitions they do not need.',
214 path: '/acceleration/partitioning/README.md',
215 tags: ['acceleration', 'partitioning']
216 },
217 {
218 title: 'Accelerated Views',
219 description: 'Pre-calculate and materialize derived data for faster queries.',
220 path: '/views/README.md',
221 tags: ['acceleration', 'views']
222 },
223 {
224 title: 'Acceleration Snapshots',
225 description:
226 'Bootstrap accelerations from snapshots in object storage to skip cold starts. Available in Spice.ai Enterprise.',
227 path: '/acceleration/snapshots/README.md',
228 tags: ['acceleration', 'snapshots', 'enterprise']
229 },
230 {
231 title: 'Dual-Dataset Registration',
232 description: 'Serve queries immediately while a large table accelerates in the background.',
233 path: '/acceleration/dual-dataset-registration/README.md',
234 tags: ['acceleration', 'federation']
235 },
236 {
237 title: 'Serializable Transactions',
238 description:
239 'Commit gated, serializable transactions on Cayenne tables and write the results back to PostgreSQL.',
240 path: '/serializable-transactions/README.md',
241 tags: ['acceleration', 'cayenne', 'transactions']
242 },
243 // Change Data Capture
244 {
245 title: 'PostgreSQL CDC',
246 description:
247 'Stream changes from PostgreSQL using logical replication, without Debezium or Kafka.',
248 path: '/postgres/cdc/README.md',
249 tags: ['cdc', 'postgresql']
250 },
251 {
252 title: 'PostgreSQL Catalog CDC',
253 description:
254 'Discover every table in a PostgreSQL database and keep a local copy of each current with CDC.',
255 path: '/catalogs/postgres-cdc/README.md',
256 tags: ['cdc', 'catalog', 'postgresql']
257 },
258 {
259 title: 'MySQL CDC',
260 description: 'Stream changes from MySQL using the binary log, without Debezium or Kafka.',
261 path: '/mysql/cdc/README.md',
262 tags: ['cdc', 'mysql']
263 },
264 {
265 title: 'AWS Aurora MySQL CDC',
266 description: 'Stream changes from an AWS Aurora MySQL cluster using the binary log.',
267 path: '/mysql/rds-aurora-cdc/README.md',
268 tags: ['cdc', 'aws', 'aurora', 'mysql']
269 },
270 {
271 title: 'MongoDB Change Streams',
272 description: 'Stream changes from a MongoDB collection using Change Streams.',
273 path: '/mongodb/change-streams/README.md',
274 tags: ['cdc', 'mongodb']
275 },
276 {
277 title: 'DynamoDB Streams',
278 description:
279 'Stream inserts, updates, and deletes from a DynamoDB table using DynamoDB Streams.',
280 path: '/dynamodb/streams/README.md',
281 tags: ['cdc', 'aws', 'dynamodb']
282 },
283 {
284 title: 'Debezium CDC from Postgres',
285 description: 'Stream changes from PostgreSQL using Debezium CDC.',
286 path: '/cdc-debezium/README.md',
287 tags: ['cdc', 'debezium', 'postgresql']
288 },
289 {
290 title: 'Debezium CDC with SASL/SCRAM',
291 description: 'Stream MySQL changes using Debezium with SASL/SCRAM authentication.',
292 path: '/cdc-debezium/sasl-scram/README.md',
293 tags: ['cdc', 'debezium', 'sasl', 'scram', 'mysql']
294 },
295 // Search
296 {
297 title: 'Full-Text Search',
298 description: 'Retrieve records matching keywords using BM25 scoring.',
299 path: '/full-text-search/README.md',
300 tags: ['search', 'bm25']
301 },
302 {
303 title: 'Elasticsearch Full-Text and Vector Search',
304 description:
305 'Use Elasticsearch for both full-text and vector search. Available in Spice.ai Enterprise.',
306 path: '/search/elasticsearch/README.md',
307 tags: ['search', 'elasticsearch', 'enterprise']
308 },
309 // Data Connectors
310 {
311 title: 'PostgreSQL Connector',
312 description: 'Connect to and query PostgreSQL databases.',
313 path: '/postgres/connector/README.md',
314 tags: ['connector', 'postgresql', 'query']
315 },
316 {
317 title: 'AWS RDS PostgreSQL',
318 description: 'Connect to AWS RDS PostgreSQL instances.',
319 path: '/postgres/rds/README.md',
320 tags: ['connector', 'aws', 'rds', 'postgresql']
321 },
322 {
323 title: 'Supabase PostgreSQL',
324 description: 'Connect to Supabase PostgreSQL databases.',
325 path: '/postgres/supabase/README.md',
326 tags: ['connector', 'supabase', 'postgresql']
327 },
328 {
329 title: 'MySQL Connector',
330 description: 'Connect to and query MySQL databases.',
331 path: '/mysql/connector/README.md',
332 tags: ['connector', 'mysql', 'query']
333 },
334 {
335 title: 'AWS RDS Aurora MySQL',
336 description: 'Connect to AWS RDS Aurora with MySQL compatibility.',
337 path: '/mysql/rds-aurora/README.md',
338 tags: ['connector', 'aws', 'rds', 'aurora', 'mysql']
339 },
340 {
341 title: 'PlanetScale MySQL',
342 description: 'Connect to PlanetScale MySQL databases.',
343 path: '/mysql/planetscale/README.md',
344 tags: ['connector', 'planetscale', 'mysql']
345 },
346 {
347 title: 'ClickHouse Connector',
348 description: 'Connect to and query ClickHouse databases.',
349 path: '/clickhouse/README.md',
350 tags: ['connector', 'clickhouse', 'query']
351 },
352 {
353 title: 'Databricks Connector',
354 description: 'Connect to and query Databricks instances using Delta Lake or Spark Connect.',
355 path: '/databricks/README.md',
356 tags: ['connector', 'databricks', 'delta', 'lake', 'spark', 'connect']
357 },
358 {
359 title: 'Delta Lake Connector',
360 description: 'Query data from Delta Lake tables.',
361 path: '/delta-lake/README.md',
362 tags: ['connector', 'delta', 'lake']
363 },
364 {
365 title: 'Dremio Connector',
366 description: 'Connect to and query a self-hosted Dremio instance running in Docker.',
367 path: '/dremio/README.md',
368 tags: ['connector', 'dremio', 'query']
369 },
370 {
371 title: 'DuckDB Connector',
372 description: 'Query DuckDB databases with sample TPCH data.',
373 path: '/duckdb/connector/README.md',
374 tags: ['connector', 'duckdb', 'query']
375 },
376 {
377 title: 'DynamoDB Connector',
378 description: 'Query data from an AWS-hosted DynamoDB table.',
379 path: '/dynamodb/README.md',
380 tags: ['connector', 'aws', 'dynamodb']
381 },
382 {
383 title: 'Elasticsearch Connector',
384 description:
385 'Query Elasticsearch indices using federated SQL. Available in Spice.ai Enterprise.',
386 path: '/elasticsearch/connector/README.md',
387 tags: ['connector', 'elasticsearch', 'enterprise']
388 },
389 {
390 title: 'File Connector',
391 description: 'Query data from local files.',
392 path: '/file/README.md',
393 tags: ['connector', 'file', 'query']
394 },
395 {
396 title: 'FTP Connector',
397 description: 'Query data from FTP and SFTP servers.',
398 path: '/ftp/README.md',
399 tags: ['connector', 'ftp', 'query']
400 },
401 {
402 title: 'GitHub Connector',
403 description: 'Connect to and query GitHub data.',
404 path: '/github/README.md',
405 tags: ['connector', 'github', 'query'],
406 videoUrl: 'https://youtu.be/mxwt0HEF1VQ'
407 },
408 {
409 title: 'GraphQL Connector',
410 description: 'Query data from GraphQL endpoints.',
411 path: '/graphql/README.md',
412 tags: ['connector', 'graphql', 'query']
413 },
414 {
415 title: 'HTTP Connector',
416 description: 'Query data from HTTP(S) endpoints, such as REST APIs.',
417 path: '/http/README.md',
418 tags: ['connector', 'http', 'api']
419 },
420 {
421 title: 'MSSQL Connector',
422 description: 'Connect to and query across multiple Microsoft SQL Server instances.',
423 path: '/mssql/README.md',
424 tags: ['connector', 'mssql', 'query']
425 },
426 {
427 title: 'ODBC Connector',
428 description: 'Connect to databases using ODBC. Available in Spice.ai Enterprise.',
429 path: '/odbc/README.md',
430 tags: ['connector', 'odbc', 'query', 'enterprise']
431 },
432 {
433 title: 'Oracle Connector',
434 description: 'Connect to and accelerate data from Oracle databases.',
435 path: '/oracle/README.md',
436 tags: ['connector', 'oracle', 'query']
437 },
438 {
439 title: 'Amazon Redshift',
440 description: 'Read and write TPC-H data with Amazon Redshift.',
441 path: '/redshift/README.md',
442 tags: ['connector', 'aws', 'redshift']
443 },
444 {
445 title: 'Glue Connector',
446 description: 'Query tables in an AWS Glue Data Catalog.',
447 path: '/glue/README.md',
448 tags: ['connector', 'aws', 'glue']
449 },
450 {
451 title: 'S3 Connector',
452 description: 'Query data from S3 compatible storage.',
453 path: '/s3/README.md',
454 tags: ['connector', 's3', 'query']
455 },
456 {
457 title: 'ScyllaDB Connector',
458 description: 'Query ScyllaDB clusters using federated SQL. Available in Spice.ai Enterprise.',
459 path: '/scylladb/README.md',
460 tags: ['connector', 'scylladb', 'enterprise']
461 },
462 {
463 title: 'SharePoint Connector',
464 description: 'Connect to SharePoint and OneDrive for Business.',
465 path: '/sharepoint/README.md',
466 tags: ['connector', 'sharepoint', 'onedrive']
467 },
468 {
469 title: 'SMB Connector',
470 description: 'Query data files on SMB network shares.',
471 path: '/smb/README.md',
472 tags: ['connector', 'smb', 'query']
473 },
474 {
475 title: 'Snowflake Connector',
476 description: 'Connect to and query Snowflake databases.',
477 path: '/snowflake/README.md',
478 tags: ['connector', 'snowflake', 'query']
479 },
480 {
481 title: 'Snowflake DML',
482 description: 'Ingest data from an HTTP API and write it to a Snowflake table with INSERT.',
483 path: '/snowflake/dml/README.md',
484 tags: ['connector', 'snowflake', 'dml']
485 },
486 {
487 title: 'Spice.ai Cloud Connector',
488 description: 'Connect to the Spice.ai Cloud Platform.',
489 path: '/spiceai/README.md',
490 tags: ['connector', 'spiceai', 'cloud']
491 },
492 {
493 title: 'Apache Spark Connector',
494 description: 'Connect to and query Apache Spark.',
495 path: '/spark/README.md',
496 tags: ['connector', 'apache', 'spark', 'query']
497 },
498 {
499 title: 'IMAP Emails',
500 description: 'Federated SQL query of mail across IMAP email servers.',
501 path: '/imap/README.md',
502 tags: ['connector', 'imap', 'datasource']
503 },
504 {
505 title: 'MongoDB Connector',
506 description: 'Connect to and query MongoDB databases.',
507 path: '/mongodb/connector/README.md',
508 tags: ['connector', 'mongodb', 'datasource']
509 },
510 {
511 title: 'Live Orders Analytics with Apache Kafka Data Connector',
512 description: 'Combine real-time data streaming from Kafka with other datasets using Spice.',
513 path: '/kafka/README.md',
514 tags: ['connector', 'apache', 'kafka', 'datasource']
515 },
516 // Catalog Connectors
517 {
518 title: 'Spice.ai Cloud Platform Catalog',
519 description: 'Connect to the Spice.ai Cloud Platform catalog.',
520 path: '/catalogs/spiceai/README.md',
521 tags: ['catalog', 'spiceai', 'cloud']
522 },
523 {
524 title: 'Databricks Unity Catalog',
525 description: 'Connect to Databricks Unity catalog.',
526 path: '/catalogs/databricks/README.md',
527 tags: ['catalog', 'databricks', 'unity']
528 },
529 {
530 title: 'Unity Catalog',
531 description: 'Connect to an open-source Unity Catalog instance.',
532 path: '/catalogs/unity_catalog/README.md',
533 tags: ['catalog', 'unity']
534 },
535 {
536 title: 'Iceberg Catalog Connector',
537 description: 'Connect to Iceberg catalog with support for reading and writing Iceberg tables.',
538 path: '/catalogs/iceberg/README.md',
539 tags: ['catalog', 'iceberg']
540 },
541 {
542 title: 'Iceberg Hadoop Catalog',
543 description: 'Connect to Iceberg Hadoop catalogs, locally or on S3-compatible object storage.',
544 path: '/catalogs/iceberg-hadoop/README.md',
545 tags: ['catalog', 'iceberg', 'hadoop']
546 },
547 {
548 title: 'AWS Glue Catalog',
549 description: 'Query tables registered in an AWS Glue Data Catalog.',
550 path: '/catalogs/glue/README.md',
551 tags: ['catalog', 'aws', 'glue']
552 },
553 {
554 title: 'DuckLake Catalog',
555 description: 'Discover and query all schemas and tables in a DuckLake catalog.',
556 path: '/catalogs/ducklake/README.md',
557 tags: ['catalog', 'ducklake']
558 },
559 {
560 title: 'PostgreSQL Catalog',
561 description: 'Discover and query all schemas and tables in a PostgreSQL database.',
562 path: '/catalogs/postgres/README.md',
563 tags: ['catalog', 'postgresql']
564 },
565 {
566 title: 'MySQL Catalog',
567 description: 'Discover and query all databases and tables in a MySQL server.',
568 path: '/catalogs/mysql/README.md',
569 tags: ['catalog', 'mysql']
570 },
571 {
572 title: 'Microsoft SQL Server Catalog',
573 description: 'Discover and query all schemas and tables in a SQL Server database.',
574 path: '/catalogs/mssql/README.md',
575 tags: ['catalog', 'mssql']
576 },
577 // Visualization
578 {
579 title: 'Sales BI with Apache Superset',
580 description: 'Visualize data in Spice with Apache Superset.',
581 path: '/sales-bi/README.md',
582 tags: ['visualization', 'bi', 'superset']
583 },
584 {
585 title: 'Grafana Datasource',
586 description: 'Add Spice as a Grafana datasource.',
587 path: '/grafana-datasource/README.md',
588 tags: ['visualization', 'grafana', 'datasource']
589 },
590
591 // Deployment
592 {
593 title: 'Deploying to Kubernetes',
594 description: 'Deploy Spice.ai on Kubernetes using the Helm chart.',
595 path: '/kubernetes/README.md',
596 tags: ['deployment', 'kubernetes']
597 },
598 {
599 title: 'Running in Docker',
600 description: 'Run Spice.ai in Docker containers.',
601 path: '/docker/README.md',
602 tags: ['deployment', 'docker']
603 },
604 {
605 title: 'Sidecar Deployment Architecture',
606 description: 'Run Spice alongside the application on the same host for low-latency access.',
607 path: '/architectures/sidecar/README.md',
608 tags: ['deployment', 'architecture']
609 },
610 {
611 title: 'Microservice Deployment Architecture',
612 description:
613 'Run Spice as an independent service, optionally with replicas behind a load balancer.',
614 path: '/architectures/microservice/README.md',
615 tags: ['deployment', 'architecture']
616 },
617 {
618 title: 'Cloud Connect on a Development Machine',
619 description:
620 'Connect a local Spice instance to Spice Cloud, deploy changes without restarting, and deliver secrets.',
621 path: '/cloud-connect-dev/README.md',
622 tags: ['deployment', 'cloud']
623 },
624
625 // Performance
626 {
627 title: 'TPC-H Benchmarking',
628 description: 'Load TPC-H benchmark data and run the benchmark queries.',
629 path: '/tpc-h/README.md',
630 tags: ['performance', 'benchmarking', 'tpc-h']
631 },
632 {
633 title: 'SQL Results Caching',
634 description: 'Cache query results in memory for faster repeated queries.',
635 path: '/caching/sql_results/README.md',
636 tags: ['performance', 'caching']
637 },
638 {
639 title: 'Caching Accelerator',
640 description: 'Cache HTTP-based datasets with stale-while-revalidate (SWR) support.',
641 path: '/caching/accelerator/README.md',
642 tags: ['performance', 'caching', 'http']
643 },
644 {
645 title: 'Indexes on Accelerated Data',
646 description: 'Create and manage indexes on accelerated data.',
647 path: '/acceleration/indexes/README.md',
648 tags: ['performance', 'indexes', 'acceleration']
649 },
650
651 // Configuration
652 {
653 title: 'Data Retention Policy',
654 description: 'Evict accelerated data older than a specified duration.',
655 path: '/retention/README.md',
656 tags: ['configuration', 'retention']
657 },
658 {
659 title: 'Refresh Data Window',
660 description: 'Refresh only recent data into accelerated datasets.',
661 path: '/refresh-data-window/README.md',
662 tags: ['configuration', 'refresh']
663 },
664 {
665 title: 'Advanced Data Refresh',
666 description: 'Advanced configuration for data refresh.',
667 path: '/acceleration/data-refresh/README.md',
668 tags: ['configuration', 'data', 'refresh']
669 },
670 {
671 title: 'Data Quality with Constraints',
672 description: 'Enforce data quality constraints on accelerated datasets.',
673 path: '/acceleration/constraints/README.md',
674 tags: ['configuration', 'data', 'quality', 'constraints']
675 },
676 {
677 title: 'Cron Dataset Schedules',
678 description: 'Schedule dataset refreshes using cron syntax.',
679 path: '/acceleration/cron/README.md',
680 tags: ['configuration', 'scheduling', 'refresh']
681 },
682
683 // Client SDKs
684 {
685 title: 'Rust SDK',
686 description: 'Query Spice.ai using the Rust SDK.',
687 path: '/client-sdk/spice-rs-sdk-sample/README.md',
688 tags: ['sdk', 'rust']
689 },
690 {
691 title: 'Python SDK',
692 description: 'Query Spice.ai using the Python SDK.',
693 path: '/client-sdk/spicepy-sdk-sample/README.md',
694 tags: ['sdk', 'python']
695 },
696 {
697 title: 'Go SDK',
698 description: 'Query Spice.ai using the Go SDK.',
699 path: '/client-sdk/gospice-sdk-sample/README.md',
700 tags: ['sdk', 'go']
701 },
702 {
703 title: 'Spice.js JavaScript (Node.js) SDK',
704 description: 'Query Spice.ai using the JavaScript (Node.js) SDK with examples.',
705 path: '/client-sdk/spice.js-sdk-sample/README.md',
706 tags: ['sdk', 'javascript']
707 },
708 {
709 title: 'Java SDK',
710 description: 'Query Spice.ai using the Java SDK.',
711 path: '/client-sdk/spice-java-sdk-sample/README.md',
712 tags: ['sdk', 'java']
713 },
714 {
715 title: '.NET SDK',
716 description: 'Query Spice.ai from C# using the .NET SDK.',
717 path: '/client-sdk/spice-dotnet-sdk-sample/README.md',
718 tags: ['sdk', 'dotnet', 'csharp']
719 },
720 // Clients
721 {
722 title: 'Python ADBC Client',
723 description: 'Query Spice using ADBC and Parameterized Queries with Python.',
724 path: '/clients/adbc/README.md',
725 tags: ['client', 'python', 'adbc', 'parameterized queries']
726 },
727 {
728 title: 'Java JDBC Client',
729 description: 'Query Spice.ai using the Java JDBC client.',
730 path: '/clients/java/README.md',
731 tags: ['client', 'java', 'jdbc']
732 },
733 {
734 title: 'Scala JDBC Client',
735 description: 'Query Spice.ai using the Scala JDBC client.',
736 path: '/clients/scala/README.md',
737 tags: ['client', 'scala', 'jdbc']
738 },
739 {
740 title: 'cURL with Spice.ai Cloud',
741 description: 'Run SQL against Spice.ai Cloud over HTTP using cURL.',
742 path: '/client-sdk/curl-sample/README.md',
743 tags: ['client', 'curl', 'cloud']
744 },
745 {
746 title: 'Spice CLI with Spice.ai Cloud',
747 description: 'Run SQL against Spice.ai Cloud using the Spice CLI.',
748 path: '/client-sdk/spice-cli-sample/README.md',
749 tags: ['client', 'cli', 'cloud']
750 },
751 // Security
752 {
753 title: 'TLS Encryption',
754 description: 'Enable encryption in transit using TLS.',
755 path: '/tls/README.md',
756 tags: ['security', 'tls']
757 },
758 {
759 title: 'API Key Authentication',
760 description: 'Secure access with API key authentication.',
761 path: '/api_key/README.md',
762 tags: ['security', 'api', 'key']
763 },
764 {
765 title: 'Mutual TLS (mTLS)',
766 description:
767 'Authenticate clients with certificates using mutual TLS. Available in Spice.ai Enterprise.',
768 path: '/mtls/README.md',
769 tags: ['security', 'mtls', 'enterprise']
770 },
771 {
772 title: 'Authorization',
773 description:
774 'Add multi-tenancy, row-level security, PII masking, and RBAC with Cedar policies. Available in Spice.ai Enterprise.',
775 path: '/authorization/README.md',
776 tags: ['security', 'authorization', 'enterprise']
777 },
778
779 // Advanced
780 {
781 title: 'Local Dataset Replication',
782 description: 'Link datasets in a parent/child relationship within the current Spicepod.',
783 path: '/localpod/README.md',
784 tags: ['advanced', 'replication', 'dataset']
785 },
786 {
787 title: 'Distributed Query',
788 description: 'Run queries across multiple nodes using schedulers and executors.',
789 path: '/distributed/README.md',
790 tags: ['advanced', 'distributed', 'cluster']
791 },
792 {
793 title: 'JSON Strings',
794 description: 'Work with JSON strings using JSON functions.',
795 path: '/json_strings/README.md',
796 tags: ['advanced', 'json', 'sql']
797 }
798]
799
800const RecipeGroup: React.FC<{ recipes: RecipeData[] }> = ({ recipes }) => {
801 const getGridClass = (count: number) => {
802 if (count === 1) return 'grid-cols-1 max-w-sm mx-auto'
803 if (count === 2) return 'grid-cols-1 sm:grid-cols-2 max-w-2xl mx-auto'
804 if (count === 3) return 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 max-w-4xl mx-auto'
805 return 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4'
806 }
807
808 return (
809 <section className='mx-auto px-6 md:max-w-[1020px] md:px-0'>
810 <div className={`grid gap-4 ${getGridClass(recipes.length)}`}>
811 {recipes.map((recipe, index) => (
812 <div key={index} className='h-full'>
813 <Recipe
814 title={recipe.title}
815 description={recipe.description}
816 href={recipeBaseUrl + recipe.path}
817 videoUrl={recipe.videoUrl}
818 className='h-full px-4 py-4 text-xs gap-4 md:gap-8 md:px-8 md:py-8'
819 />
820 </div>
821 ))}
822 </div>
823 </section>
824 )
825}
826
827export function CookbookPage() {
828 const filterByTag = (...tags: string[]) =>
829 recipes.filter((r) => r.tags.some((t) => tags.includes(t)))
830
831 const description = `${recipes.length} guides and samples to help you build data-grounded AI apps and agents with Spice.ai Open-Source. Find ready-to-use examples for data acceleration, AI agents, LLM memory, and more.`
832
833 return (
834 <div className='tailwind font-sans'>
835 <Title as='h1' variant='large' className='mx-auto mb-7 mt-8 md:text-center xl:max-w-[1020px]'>
836 🧑🍳 Spice.ai OSS <span className='text-primary'>Cookbook</span>
837 </Title>
838
839 <Paragraph className='mb-6 md:text-center mx-auto px-6 md:max-w-[843px]'>
840 {description}
841 </Paragraph>
842
843 <Paragraph className='mb-6 md:text-center mx-auto px-6 md:max-w-[843px] hover:underline'>
844 <Link
845 className='inline-flex gap-1.5'
846 target='_blank'
847 href='https://github.com/spiceai/cookbook/blob/trunk/README.md'
848 >
849 <Icon iconName='github' /> Contribute to the Cookbook on GitHub!
850 </Link>
851 </Paragraph>
852
853 <Container className='mt-6 mb-20'>
854 <Title className='mb-14 text-center'>Featured Recipes</Title>
855
856 <section className='mx-auto px-6 md:max-w-[843px] md:px-0'>
857 <div className='flex flex-col gap-6 md:flex-row'>
858 <div className='flex w-full flex-col gap-6 md:w-1/2'>
859 <Recipe
860 title='Federated SQL Query'
861 description='Join S3 and PostgreSQL data in one SQL query.'
862 href={`${recipeBaseUrl}/federation/README.md`}
863 />
864 <Recipe
865 title='Run Llama3 Locally'
866 description='Use Llama models from HuggingFace with Spice.'
867 href={`${recipeBaseUrl}/llama/README.md`}
868 videoUrl='https://youtu.be/I2i6uZKBbd4'
869 />
870 </div>
871 <div className='flex w-full flex-col gap-6 md:w-1/2 md:pt-20'>
872 <Recipe
873 title='Data Acceleration with Cayenne'
874 description='Speed up queries using Cayenne.'
875 href={`${recipeBaseUrl}/cayenne/README.md`}
876 />
877 <Recipe
878 title='LLM Memory'
879 description='Persistent memory for language models'
880 href={`${recipeBaseUrl}/llm-memory/README.md`}
881 videoUrl='https://youtu.be/uc8TCAPu1IM'
882 />
883 </div>
884 </div>
885 </section>
886 </Container>
887
888 <Container className='mt-6 mb-20'>
889 <Title className='mb-4 text-center'>Sample Applications and Guides</Title>
890 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
891 Example apps and guides for real-world Spice.ai usage and best practices.
892 </Paragraph>
893
894 <RecipeGroup recipes={filterByTag('sample', 'guide')} />
895 </Container>
896
897 <Container className='mt-6 mb-20'>
898 <Title className='mb-4 text-center'>Core Features</Title>
899 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
900 Start with the core capabilities: federated SQL query, data acceleration, async queries,
901 hybrid search, and AI inference in SQL.
902 </Paragraph>
903
904 <RecipeGroup recipes={filterByTag('core')} />
905 </Container>
906
907 <Container className='mt-6 mb-20'>
908 <Title className='mb-4 text-center'>Models, AI, and Agents</Title>
909 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
910 Connect to hosted and local AI models, and build intelligent agents using Spice.ai.
911 </Paragraph>
912
913 <RecipeGroup recipes={filterByTag('ai')} />
914 </Container>
915
916 <Container className='mt-6 mb-20'>
917 <Title className='mb-4 text-center'>
918 Data Acceleration, Materialization, and Federation
919 </Title>
920 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
921 Optimize query performance with local acceleration, data materialization, and federation
922 techniques.
923 </Paragraph>
924
925 <RecipeGroup recipes={filterByTag('acceleration')} />
926 </Container>
927
928 <Container className='mt-6 mb-20'>
929 <Title className='mb-4 text-center'>Change Data Capture (CDC)</Title>
930 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
931 Stream inserts, updates, and deletes from source databases to keep accelerated datasets
932 current.
933 </Paragraph>
934
935 <RecipeGroup recipes={filterByTag('cdc')} />
936 </Container>
937
938 <Container className='mt-6 mb-20'>
939 <Title className='mb-4 text-center'>Search & Embeddings</Title>
940 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
941 Search data with full-text, vector, and hybrid search, using embeddings and vector
942 engines.
943 </Paragraph>
944
945 <RecipeGroup recipes={filterByTag('search')} />
946 </Container>
947
948 <Container className='mt-6 mb-20'>
949 <Title className='mb-4 text-center'>Data Connectors</Title>
950 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
951 Connect to databases, data warehouses, data lakes, and APIs, and query them with SQL.
952 </Paragraph>
953
954 <RecipeGroup recipes={filterByTag('connector')} />
955 </Container>
956
957 <Container className='mt-6 mb-20'>
958 <Title className='mb-4 text-center'>Catalog Connectors</Title>
959 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
960 Connect to data catalogs to discover and query their tables.
961 </Paragraph>
962
963 <RecipeGroup recipes={filterByTag('catalog')} />
964 </Container>
965
966 <Container className='mt-6 mb-20'>
967 <Title className='mb-4 text-center'>Visualization</Title>
968 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
969 Visualize data with BI and analytics tools.
970 </Paragraph>
971
972 <RecipeGroup recipes={filterByTag('visualization')} />
973 </Container>
974
975 <Container className='mt-6 mb-20'>
976 <Title className='mb-4 text-center'>API Clients</Title>
977 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
978 Use API clients for data access and integration.
979 </Paragraph>
980
981 <RecipeGroup recipes={filterByTag('client')} />
982 </Container>
983
984 <Container className='mt-6 mb-20'>
985 <Title className='mb-4 text-center'>Deployment</Title>
986 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
987 Deploy Spice.ai in different environments.
988 </Paragraph>
989
990 <RecipeGroup recipes={filterByTag('deployment')} />
991 </Container>
992
993 <Container className='mt-6 mb-20'>
994 <Title className='mb-4 text-center'>Performance and Benchmarking</Title>
995 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
996 Measure and optimize performance with benchmarks and best practices for your Spice.ai
997 deployment.
998 </Paragraph>
999
1000 <RecipeGroup recipes={filterByTag('performance')} />
1001 </Container>
1002
1003 <Container className='mt-6 mb-20'>
1004 <Title className='mb-4 text-center'>Configuration</Title>
1005 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1006 Configure data refresh, retention, scheduling, and data quality for accelerated
1007 datasets.
1008 </Paragraph>
1009
1010 <RecipeGroup recipes={filterByTag('configuration')} />
1011 </Container>
1012
1013 <Container className='mt-6 mb-20'>
1014 <Title className='mb-4 text-center'>SDKs</Title>
1015 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1016 Use SDKs for different programming languages.
1017 </Paragraph>
1018
1019 <RecipeGroup recipes={filterByTag('sdk')} />
1020 </Container>
1021
1022 <Container className='mt-6 mb-20'>
1023 <Title className='mb-4 text-center'>Security</Title>
1024 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1025 Secure your Spice.ai deployment and data access with encryption, authentication, and
1026 authorization.
1027 </Paragraph>
1028
1029 <RecipeGroup recipes={filterByTag('security')} />
1030 </Container>
1031
1032 <Container className='mt-6 mb-20'>
1033 <Title className='mb-4 text-center'>Advanced Topics</Title>
1034 <Paragraph className='mb-14 md:text-center mx-auto px-6 md:max-w-[843px]'>
1035 Replicate datasets locally, distribute queries across nodes, and work with JSON data.
1036 </Paragraph>
1037
1038 <RecipeGroup recipes={filterByTag('advanced')} />
1039 </Container>
1040 </div>
1041 )
1042}
1043
