Spice: a real-time analytics and inference node beside your operational database
Add a real-time analytics node to your operational database. Spice is a portable, accelerated SQL query, search, and LLM-inference engine in Rust for data-grounded AI apps and agents.
At a glance
- What is it?
- Spice is a Rust runtime that federates SQL across 30+ sources, accelerates a working set locally, and adds CDC replication from Postgres, MySQL, MongoDB and DynamoDB. The README's performance claims are vendor-published and unaudited, so treat the 2-second freshness figure as a design target to verify on your own schema.
- Who is it for?
- Adopt Spice if you want analytical reads off a Postgres, MySQL, MongoDB or DynamoDB primary without standing up Debezium or Kafka, and you accept that accelerator memory is bounded by the node it runs on. Do not adopt it as a system of record, and do not expect the README's TPC-H and TPC-DS numbers to reproduce on your hardware.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What problem Spice targets, and who feels it
The README frames the problem as analytical load landing on production. Point Spice at PostgreSQL, MySQL or MongoDB and it maintains what the project calls a sandboxed, analytics-ready replica using native change data capture: WAL for Postgres, binlog for MySQL, change streams for MongoDB, plus DynamoDB Streams. The stated goal is sub-second queries with roughly two-second freshness and no ETL, no Debezium, no Kafka. The audience is an engineering team that already runs an operational database and wants to run analytical SQL against it without provisioning a separate warehouse pipeline. A second audience is smaller: teams building AI agents that need SQL, full-text search and LLM inference behind one endpoint. For the first group the pitch is concrete and the trade-off is legible. For the second, the README lists an OpenAI-compatible API, an MCP server and gateway, and NSQL text-to-SQL, but gives no detail on how those pieces are wired, so that half of the product is harder to evaluate from the repository alone.
The architecture: federation, acceleration, and delegation
Spice is built on Apache DataFusion for query execution, Apache Arrow for the in-memory format, and Apache Ballista for distributed execution. The README describes three layers working together. First, connectors federate queries out to Postgres, MySQL, Snowflake, Databricks, Iceberg, Delta Lake, S3, Spark, MSSQL, DynamoDB, MongoDB, GitHub, SharePoint and Kafka, with what it calls advanced query push-down. Second, an accelerator holds a local working set on each pod, so repeated queries hit local storage instead of the source. Third, queries that exceed the local working set are transparently delegated to a distributed cluster. That third layer is the interesting design choice. Ballista runs multi-active schedulers coordinated through object storage, which means there is no single scheduler process to lose, but it also means the cluster's coordination state lives in whatever object store you point it at. The accelerator itself is called Spice Cayenne and is built on Vortex, with DuckDB and SQLite also named as foundations. The README claims Cayenne is 1.5x faster than DuckDB with 3x less memory on TPC-H SF100 and 26x faster than Spice 1.x on TPC-DS SF100. Those are vendor-published numbers with no methodology in the README, so they tell you the direction of travel, not what you will see.
Getting it running: the binary, the spicepod, and the SQL surface
The deployment unit is a single binary or container, run as a sidecar next to your application. The README points to a quickstart for local machines and to docs.spiceai.org, and the runtime exposes five interfaces: SQL query and search over HTTP, Arrow Flight, Arrow Flight SQL, ODBC, JDBC and ADBC; text-to-SQL through the HTTP API, the SQL REPL, or agent tool calls; an OpenAI-compatible endpoint for hosted providers (OpenAI, Anthropic, xAI, Bedrock) and local model serving; and a set of user-defined table functions. The search UDTFs are named in the README as vector_search, text_search, rrf and rerank, and the project says they can be combined in a single SQL query. Search backends listed are Amazon S3 Vectors, Tantivy for BM25, DuckDB HNSW and Elasticsearch kNN, with reciprocal rank fusion to merge result sets. Iceberg is treated as a first-class format: the README says you can query, accelerate and write to it, with ACID guarantees, using standard SQL INSERT INTO and without Spark. What the README does not contain is a worked configuration example. There is no spicepod.yaml snippet, no connector stanza, no accelerator memory setting shown. If you are evaluating this, the configuration keys you need are in the docs site, not in the repository front page, and that is the first place you will spend time.
Where a single-node sidecar stops being enough
The accelerator holds a working set on each pod. That is the mechanism that produces the latency claim, and it is also the constraint. Whatever does not fit in the working set falls through to the distributed cluster, which means the sidecar model degrades into a cluster deployment the moment your hot data outgrows the memory you gave the accelerator. The README does not state a memory ceiling, a recommended ratio of accelerator memory to source data size, or how eviction behaves. That is a real gap for capacity planning. The second limitation is freshness. Two seconds is a target, not a guarantee, and it depends on the health of the replication slot or binlog reader on the source side. A Postgres replication slot that is not consumed will retain WAL and can fill the primary's disk. The README does not describe slot lifecycle management, so you should confirm in the docs what happens to the slot when the Spice process is stopped or crashes. The third case where Spice is the wrong tool is transactional writes. It is an analytics and inference node; if your workload is point updates with strict serializability, you already have a database for that and Spice adds a replica to keep in sync for no benefit.
How it differs from DuckDB and from a warehouse pipeline
DuckDB is the closest comparison and the README invites it by benchmarking against it. The difference in approach is where the data lives. DuckDB is an embedded engine that reads files and tables you hand it; it has no connector layer that maintains a live replica of a Postgres primary, and no CDC path. Spice inverts that: the engine is a server process with a replication client attached, and the accelerator is a cache over federated sources rather than the primary storage. If your analytical data already sits in Parquet on S3 and you want an in-process query engine, DuckDB is the smaller dependency and the shorter path. If your analytical data sits in a live Postgres instance and you want it queryable without a nightly job, Spice is doing work DuckDB does not attempt. The warehouse pipeline comparison is also worth stating plainly. A dbt-plus-Kafka-plus-Debezium stack gives you a durable, replayable, auditable pipeline with a separate storage tier. Spice gives you a replica you did not have to build, at the cost of the pipeline's replay and audit properties. The README sells the absence of those components as the feature. Whether that is a win depends on whether you ever need to replay a transformation, and the README does not describe a replay mechanism.
Maintenance surface and the Apache-2.0 licence
Release cadence is visible from the material: v2.3.0 on September 9, 2026, v2.2.1 on September 1, v2.2.0 on August 24. Three releases in roughly three weeks during the 2.x line, with the last push to trunk on September 10, 2026. That is a fast-moving project, and fast-moving projects mean upgrade work. The README lists an extensibility model, OpenTelemetry observability, HashiCorp Vault and Azure Key Vault secret stores, mTLS and read-only API keys, which is a reasonable operational surface, but none of it is described in enough depth on the front page to plan an upgrade path. The practical cost is that you should expect to test each minor version against your spicepod configuration, because connector and accelerator behaviour is where breaking changes land. On licensing: the repository is Apache-2.0, which permits commercial use, modification and redistribution with the usual notice and attribution conditions. Apache-2.0 also includes an express patent grant, which matters if you are embedding the runtime in a product. That is a description of the licence text, not legal advice; if you are redistributing Spice inside a commercial offering, have counsel read the NOTICE and any third-party dependency licences that ship with the binary.
A verdict that depends on your working set fitting
Spice is worth a proof of concept if you run Postgres, MySQL, MongoDB or DynamoDB and your analytical queries currently hit the primary. The CDC path is the part that is hard to build yourself, and pointing the binary at a replica of your staging database is a bounded afternoon of work. It is not worth it if your analytical data already lives in object storage, if you need replayable transformations, or if your working set will not fit in the memory you can give a sidecar. The README's headline numbers (2.9x over single-node DataFusion on TPC-H SF100, 8x less RAM than Spark, 170x faster CDC ingest, 1,046 QPH at SF1000 under a 266,000+ tpmC load) come from the project's own launch material and should be read as marketing until you reproduce them. The honest summary is that the architecture is sound and the operational story is thin. Confirm the replication slot behaviour, the accelerator memory ceiling, and the upgrade cost between minor versions before you put this in front of production traffic.
Editorial conclusion
Adopt Spice if you want analytical reads off a Postgres, MySQL, MongoDB or DynamoDB primary without standing up Debezium or Kafka, and you accept that accelerator memory is bounded by the node it runs on. Do not adopt it as a system of record, and do not expect the README's TPC-H and TPC-DS numbers to reproduce on your hardware. Before committing, verify three things on your own data: whether your replication slot or binlog retention window survives a restart of the Spice process, what the memory ceiling of your accelerator is under your real cardinality, and whether your Iceberg writes need the ACID guarantees the README attributes to INSERT INTO. The single binary is the whole deployment unit, so the day your working set outgrows one node is the day you are running a cluster, not a sidecar.
Community notes