mrkeyoor.com_
Tue 08 Sept 16:07 UTC
Dataevaluationupdated 08 Sept 2026

quickwit review

Quickwit is a distributed search engine that keeps log and trace indexes in cloud object storage while search and indexing workers scale separately. It gives observability teams native APIs plus partial Elasticsearch compatibility, which can reduce the amount of indexed data held on attached server disks.

Verdict

Our Quickwit build took 560 seconds and 2 of 2,178 tests failed, so its object-storage design deserves a staged trial rather than a blind Elasticsearch replacement. It is worth testing for long-retention logs or traces when the team already operates object storage, PostgreSQL, and Kafka. Skip it for metrics today, exact Elasticsearch behavior, or a 0.9 rollout that cannot stop the old cluster.

We ran it

Lab card: what happened when we ran quickwitScreenshot of quickwit (quickwit.io)
Install✓ · 67s824 packages
Build✓ · 560s
Tests✗ · 702s2176 passed · 2 failed of 2178 (cargo test)
Repo1557 files~368,733 lines of source · 23.6 MB · 13 CI workflows

Answers from our run

Does quickwit build from source?

Dependencies installed in 67 seconds (824 packages), and the build succeeded in 560 seconds. We cloned commit a39730c into a clean Debian container with 3 CPUs and no project-specific setup.

Do quickwit's tests pass?

Not all of them: 2176 of 2178 passed and 2 failed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use quickwit?

Metrics teams looking for a supported all-in-one observability database: the README says metrics are on the roadmap, and the 0.9 release calls the source-tree metrics work an unsupported prototype.

What are the alternatives to quickwit?

OpenSearch, Grafana Loki, Elasticsearch. Our Quickwit build took 560 seconds and 2 of 2,178 tests failed, so its object-storage design deserves a staged trial rather than a blind Elasticsearch replacement.

Setup2/5The build took 560 seconds before cluster services entered the picture
Docs4/5Architecture and migration detail is strong; the README still leads with 0.8
Community5/511,582 stars and code pushed on September 8, 2026
Maturity4/5Version 0.9 is substantial, but our full test run had 2 failures

Who it’s for

Observability teams storing large log or trace histories in S3, Azure Blob Storage, Google Cloud Storage, or an S3-compatible service.
Platform engineers prepared to run searchers, indexers, a control plane, a metastore, and maintenance jobs.
Kafka users who need highly available ingestion and can test Quickwit's source behavior under their own traffic.
Teams migrating selected Elasticsearch clients after checking every endpoint, query, and aggregation they use.

Who it’s NOT for

Metrics teams looking for a supported all-in-one observability database: the README says metrics are on the roadmap, and the 0.9 release calls the source-tree metrics work an unsupported prototype.
Elasticsearch senders that use _bulk updates, deletes, document IDs, or per-item error responses: Quickwit's compatibility page says only create is handled, other actions are ignored, and indexing errors go to server logs.
Clusters that need highly available indexing without Kafka: the README limits HA indexing to Kafka sources.
Operators requiring a rolling 0.8 to 0.9 upgrade: the upgrade guide says mixed-version clusters are unsupported and all 0.8 nodes must stop first.
Contributors who need a quick clean source check: our build took 560 seconds, and 2 of 2,178 tests failed.

Setup reality

Our sandbox installed 824 Rust packages in 67 seconds. The build succeeded in 560 seconds. Cargo test then failed with exit 101 after 702 seconds: 2,176 tests passed and 2 failed out of 2,178.

A local node can use disk and a file-backed metastore. A clustered deployment usually needs cloud object storage credentials, PostgreSQL, service roles, index and source configuration, and an ingestion path such as Kafka, Pulsar, Kinesis, or the API. Grafana, Jaeger, and OpenTelemetry are integrations, not substitutes for that base.

Source builds for 0.9 require Rust 1.92. The 0.9 upgrade runs metastore migrations on first write, requires a backup for rollback, and does not support a mixed 0.8 and 0.9 cluster. HA indexing is documented only for Kafka. The checkout has no Dockerfile, though releases provide binaries and the docs refer to published images.

Quickwit keeps index splits in object storage

Quickwit breaks each search index into independent splits, writes those files to S3, Azure Blob Storage, Google Cloud Storage, an S3-compatible service, or local disk, and keeps split metadata in a metastore. Search workers fetch the pieces needed for a query instead of owning permanent shards on attached disks. Compute can then change without moving the complete index between machines. That design is most useful for observability data whose retained volume grows faster than the search fleet.

Logs and distributed traces are the finished use cases in version 0.9. OpenTelemetry, Jaeger, Kafka, Pulsar, Kinesis, SQS, file ingestion, and HTTP APIs cover several common paths into the system. Metrics are a different story: the README still calls them roadmap work, while the 0.9 release says its Parquet and DataFusion metrics code is an early prototype excluded from published binaries and images. Buyers seeking one store for all 3 telemetry types should wait or pair Quickwit with a metrics database.

Four services plus a janitor make up a cluster

The architecture guide separates Quickwit into 4 main services and 1 maintenance service. Searchers execute queries, indexers build splits, the metastore tracks them, and the control plane assigns indexing work. A janitor handles garbage collection, delete tasks, and retention policies. A single machine can use local files, but a cluster normally adds PostgreSQL for metadata and object storage for index data. This is infrastructure software, even though a prebuilt binary makes the first local start look simple.

High availability has a sharp limit. Search nodes are stateless and distribute work, while the README says highly available indexing is available only with Kafka. A production design therefore needs object-store credentials, PostgreSQL backup and recovery, service discovery, source offsets, retention settings, and capacity for search caches. Teams using another ingestion source should test what an indexer restart does to delivery. Quickwit's control plane reduces manual shard placement; it does not remove the surrounding services.

What happened when we ran it

Our sandbox installed commit a39730c in 67 seconds and pulled 824 Rust packages. The build succeeded, but it took 560 seconds on 3 CPUs with 12 GB of RAM. The clean checkout itself held 1,557 files, about 368,733 lines of source, and used 23.6 MB before compilation. That is a large contributor experience compared with downloading a release binary, and it should influence CI cache and feedback-time expectations.

Cargo test ran for 702 seconds and ended with exit code 101. It reported 2,176 passed and 2 failed out of 2,178. The supplied log tail does not name both failing tests or give their causes. It does show a quickwit-indexing library result with 230 passed, 1 failed, and 1 ignored, followed by Cargo's command to rerun that package. We will not guess why the 2 tests failed. The repository had 13 CI workflow files and no top-level tests directory or Dockerfile.

Elasticsearch compatibility ignores some bulk actions

Quickwit labels its Elasticsearch and OpenSearch API incomplete. The compatibility page says _bulk accepts only the create action; delete and update actions are ignored. Quickwit has no document ID behavior matching Elasticsearch, and indexing errors are written to server logs instead of returned in the bulk response. The endpoint also limits a payload to 10 MB. A shipper that only creates immutable log events may work, while a search application that updates records needs a different path.

Search compatibility is broader than bulk ingestion, with _search, multi-search, scroll, selected cat endpoints, query DSL features, and aggregations. It is still a checklist, not a promise of drop-in parity. OpenSearch is the safer move when existing clients depend on a wider Elasticsearch surface. Loki fits teams centered on logs and LogQL. Native Elasticsearch remains the direct choice when its API and integrations are requirements. Run captured production requests against Quickwit before changing a sender or dashboard.

Version 0.9 blocks a mixed-version rolling upgrade

Quickwit 0.9 makes Ingest V2 the default on the existing ingest route and removes the dedicated V2 route. The upgrade guide requires a metastore backup, then says every 0.8 node must stop before any 0.9 node starts because mixed clusters are unsupported. First write on 0.9 runs metastore migrations. Returning to 0.8 requires restoring the backup. Metric names and some configuration fields also changed, which can affect dashboards and alerts even when stored index data needs no reindexing.

Current issue activity gives operators more to test. Issue 6531 describes persistent no open shard found on ingester errors after some indexer restarts in a production 0.9 environment; it had 13 comments and was updated September 6. Issue 6719 reports an estimated 1.4 GB of unaccounted heap in one production setup and proposes that cache entry sizing omits request data. The reporter had not proved the root cause, so treat it as an investigation, not a confirmed memory defect.

September pushes continue after the July 0.9 release

GitHub recorded 11,582 stars and a last push on September 8, 2026, the date of commit a39730c. Search results returned 666 open issues and 141 open pull requests. Those counts show a large project with active work and a large queue; they do not equal 666 confirmed bugs. The latest release, v0.9.0, was published July 25 with Ingest V2, Jaeger v2 support, optional REST mTLS validation, a health-check server, and an SQS source.

The code activity after that release matters more than the README banner, which still announces version 0.8. Quickwit has credible architecture and serious operational documentation, but the 560-second build and failed 2,178-test run argue for pinning a revision and testing it with your own ingest restarts, query set, and upgrade rehearsal. Its best buyer has enough retained logs or traces to value object storage and enough platform capacity to operate 5 service roles without pretending the search engine is a single binary in production.

Alternatives

ProjectWhat it isPick it when
OpenSearchA distributed search and analytics engine derived from Elasticsearch.pick this instead when broader Elasticsearch behavior and its plugin ecosystem matter more than object-storage-first indexes.
Grafana Loki gh↗A log system that indexes labels and stores log bodies separately.pick this instead when logs, LogQL, and a Grafana-centered operating model are the whole job.
Elasticsearch gh↗The native Elasticsearch engine for search, analytics, and observability workloads.pick this instead when exact Elasticsearch APIs and Elastic integrations outweigh Quickwit's storage design.

What people are saying

  1. [github-trending] quickwit-oss/quickwit
  2. [github-trending] quickwit-oss/tantivy

Sources

  1. Quickwit repository and README
  2. Quickwit architecture guide
  3. Quickwit Elasticsearch-compatible API
  4. Quickwit v0.9.0 release
  5. Quickwit 0.9 upgrade guide
  6. Open shard report after indexer restart
  7. MemorySizedCache accounting report

More data reviews

mongoose · faiss · domain-list-community · dragonfly · TVAPP · timescaledb · the whole board →