quickwit-oss/quickwit
60.1
Adequate · 29 September 2026
222.9k
lines of production code
Rust
primary language
2
measurements over time
What this system is
Quickwit is a distributed search and analytics engine designed for high-performance indexing and querying of large-scale datasets. It provides a comprehensive ingestion pipeline that supports diverse data sources including Kafka, Pulsar, and S3, alongside native compatibility with Elasticsearch and OpenTelemetry protocols. The system manages data lifecycle through dedicated services for indexing, search, compaction, and garbage collection, all coordinated by a control plane that handles shard management and cluster state. It offers robust deployment options via AWS ECS and Terraform, with a flexible storage layer supporting S3, Azure, and Google Cloud Storage.
How it got here
2021–2022 — v0.9 architecture and feature expansion
65 changes.
This period focused on establishing the foundational architecture for Quickwit v0.9, introducing a new actor-based indexing framework, a dedicated janitor service, and a comprehensive REST API. It also expanded storage capabilities with new cloud backends and caching, while launching the initial React-based UI and OpenTelemetry trace support.
2023 — distributed architecture and ingest v2
45 changes.
This period focused on restructuring Quickwit into a distributed system by introducing a dedicated Control Plane actor, a new Ingest V2 protocol with capacity-aware routing, and a comprehensive gRPC service layer. The work also established robust internal scaffolding through code generation, Tower middleware for resilience, and a new unified query engine with Elasticsearch compatibility.
2024–2026 — Elasticsearch compatibility and cloud-native expansion
35 changes.
This period focused on expanding Quickwit's ecosystem by introducing an Elasticsearch-compatible API layer and OpenTelemetry ingestion support to enhance interoperability. It also significantly broadened cloud infrastructure options with new AWS ECS deployment modules, Google Cloud Storage integration, and a PostgreSQL metastore backend. Concurrently, the codebase underwent substantial internal refactoring, including a modular document mapper, a standardized metrics system, and the introduction of a standalone compactor service.
Features
Add Jaeger compatibility service for OpenTelemetry traces
Quickwit now exposes a Jaeger-compatible API (v1 and v2) to allow users to query OpenTelemetry trace data using standard Jaeger clients and tools. This new \quickwit-jaeger\ crate implements the Jaeger \SpanReaderPlugin\ and \TraceReader\ interfaces, enabling operations such as listing services, retrieving operations, finding trace IDs, and streaming trace data. The service maps OpenTelemetry trace indexes to Jaeger protocol responses, including support for filtering by service name, operation, and tags, and exposes metrics for request duration and error counts to monitor usage.
quickwit/quickwit-jaeger · high confidence
Add OTLP HTTP API for logs and traces ingestion
Quickwit now exposes HTTP endpoints for ingesting OpenTelemetry data, allowing users to send logs and traces via standard OTLP HTTP/protobuf requests. The new \otlp\_api\ module registers REST handlers for \/otlp/v1/logs\ and \/otlp/v1/traces\, as well as index-specific routes like \/{index}/otlp/v1/logs\. These endpoints accept \application/x-protobuf\ payloads and support specifying the target index either via the URL path or through optional headers, integrating with the existing gRPC services to handle the actual ingestion.
_quickwit/quickwit-serve/src/otlp\api · high confidence
Add Pulsar-based Stack Overflow tutorial
Users can now follow a new tutorial that demonstrates ingesting Stack Overflow data via Apache Pulsar. This change introduces the necessary configuration files, including an index definition for the Stack Overflow dataset and a Pulsar source configuration, along with a Python script to send messages to the Pulsar topic.
config/tutorials/stackoverflow · high confidence
Add search tracing support with SpanId and TraceId types
The search module now includes dedicated SpanId and TraceId types to support distributed tracing within search operations. These types provide serialization and deserialization logic for hex-encoded identifiers, enabling proper integration with OpenTelemetry-style tracing systems. The implementation includes validation for correct byte lengths (8 bytes for span IDs, 16 bytes for trace IDs) and error handling for invalid inputs.
quickwit/quickwit-proto/src/search · high confidence
Added GitHub Codespaces configuration
Developers can now open the project directly in GitHub Codespaces. A new devcontainer configuration provides a pre-configured Rust environment with Node.js 24, Docker-in-Docker support, and the rust-analyzer extension. A post-create script automatically installs the CMake build tool and the Rust nightly toolchain with rustfmt, ensuring the local development environment is ready immediately upon container creation.
.devcontainer · high confidence
Added PostgreSQL metastore documentation and build configuration
The metastore module now includes a README explaining how to start a local PostgreSQL instance for testing the PostgresqlMetastore implementation, along with instructions for running tests with the \postgres\ feature and using sqlx-cli for migrations. A new \build.rs\ script ensures that changes to the PostgreSQL migration directories (\migrations/postgresql\ and \migrations/postgresql\_deferred\) trigger a rebuild, supporting the deferred migration strategy described in the documentation.
quickwit/quickwit-metastore · high confidence
Added codegen example demonstrating gRPC service implementation and error handling
The \quickwit-codegen/example/src\ directory now contains a complete example of a code-generated gRPC service, including the \hello.proto\ definition, a handwritten \HelloError\ enum implementing \ServiceError\ and \GrpcServiceError\ traits for proper gRPC status mapping, and a \HelloImpl\ demonstrating both unary and server-side streaming RPCs. This provides users with a concrete reference for structuring error types and implementing generated service traits within the Quickwit codegen ecosystem.
quickwit/quickwit-codegen/example/src · high confidence
Added ping actor example demonstrating actor communication
The \quickwit-actors\ crate now includes a \ping\_actor.rs\ example that demonstrates how to implement and interact with actors. This example defines a \PingReceiver\ actor that tracks the number of pings received and a \PingSender\ actor that periodically sends pings to a list of peer receivers via mailboxes. The example illustrates key actor framework concepts such as message handling, self-scheduling, peer management, and graceful shutdown within a \Universe\ context.
quickwit/quickwit-actors/examples · high confidence
Added third-party Protocol Buffers definitions
The \quickwit-proto\ crate now includes local copies of third-party \.proto\ files, specifically the GoGo Protobuf extensions (\gogoproto\) and Google's well-known types (such as \Any\, \Timestamp\, \Duration\, \Empty\, \FieldMask\, \Struct\, \Type\, \Api\, \Descriptor\, \SourceContext\, and \Value\). These additions provide the necessary schema definitions for the project's internal protocol buffer compilation and API contracts.
quickwit/quickwit-proto/protos/third-party · high confidence
Build-time version and environment metadata injection
The quickwit-serve crate now embeds build-time information directly into the binary. A new build script captures the current UTC build date, build profile, target platform, and Git commit details (hash, date, and tags) at compile time, making this metadata available to the application for identification and debugging purposes.
quickwit/quickwit-serve · high confidence
Expanded Elasticsearch-compatible API model definitions
The Elasticsearch API model layer now includes dedicated data structures and serialization logic for several endpoints, enabling richer compatibility. This adds support for the \\_bulk\ API with \create\ and \index\ actions and configurable refresh behavior (\false\, \true\, \wait\_for\), the \\_cat/indices\ API with JSON formatting and column filtering, the \\_field\_caps\ API with timestamp-based split pruning and index filtering, and the \\_mapping\ API with timestamp pushdown and dynamic field merging. Additionally, the \\_msearch\ endpoint now supports per-request and global \extra\_filters\, \\_source\_excludes\, and \\_source\_includes\, while the error model standardizes exception types (e.g., \index\_not\_found\_exception\) and maps internal service errors to Elasticsearch-compatible responses.
_quickwit/quickwit-serve/src/elasticsearch\api/model · high confidence
Experimental fingerprint-based document clustering for improved log compression
The indexing service now supports an experimental document clustering feature that reorders documents within a split before finalization to group similar log messages together, significantly improving compression ratios for recurring schemas and templates. This is achieved by computing per-document fingerprints based on configurable policies (structure, raw values, or tokenized signatures) and using a \DocIdClusterer\ to sort documents by group size at split finalization. The feature is controlled via \NodeConfig::docs\_clustering\_config\ and can be disabled with the \QW\_DISABLE\_DOCS\_CLUSTERING\ environment variable. While it enhances storage efficiency, it introduces trade-offs including increased CPU usage during ingestion, higher local disk traffic due to temporary uncompressed doc store writes, and additional memory consumption for fingerprint and ID tracking.
quickwit/quickwit-indexing/src · high confidence
File-backed metastore now supports index templates and wildcard index ID patterns
The file-backed metastore implementation has been updated to support index templates and wildcard index ID patterns. This change introduces an \IndexIdMatcher\ that allows index IDs to be matched using wildcard patterns (e.g., \index-\*\) and supports negative patterns (e.g., \-index-exclude\) for exclusion. It also adds an \IndexTemplateMatcher\ that manages a list of index templates, matching them to index IDs based on priority and pattern rules. The metastore factory now parses a \polling\_interval\ from the URI fragment to configure periodic metadata polling. Additionally, the manifest format has been updated to version 0.9, which includes support for storing index templates and their associated metadata, while maintaining backward compatibility with the legacy manifest format (0.7/0.8).
_quickwit/quickwit-metastore/src/metastore/file\backed · high confidence
Generated Rust service clients for cluster, compaction, control plane, developer, indexing, and ingest APIs
The codegen layer now produces Rust service traits and gRPC client implementations for the cluster, compaction, control plane, developer, indexing, and ingest (router and ingester) domains. These generated clients expose methods such as fetch\_cluster\_state, report\_compaction\_status, control plane index/shard management, get\_debug\_info, apply\_indexing\_plan, and ingest v2, along with support for Gzip/Zstd compression, configurable max message sizes, and test mocks. This provides the internal service contracts and transport wiring that other components depend on.
quickwit/quickwit-proto/src/codegen/quickwit · high confidence
Hot-reloadable TLS certificates for gRPC and REST servers
Quickwit now supports automatic reloading of TLS certificates without requiring a service restart. The \quickwit-transport\ crate introduces a \ReloadableCertResolver\ that swaps certificate material at runtime when files change on disk, triggered by a configurable poll interval (\cert\_poll\_interval\) or an immediate reload via \SIGHUP\. This capability applies to both server-side TLS (REST and gRPC) and client-side mTLS identities, ensuring that certificate rotations are picked up by new connections while in-flight sessions remain unaffected.
quickwit/quickwit-transport · high confidence
Ingest v2 introduces capacity-aware routing and shard throughput broadcasting
The ingest v2 pipeline now broadcasts ingester capacity scores and local shard states (including short- and long-term ingestion throughput) to the cluster via Chitchat. Routers use this real-time data to make smarter routing decisions, directing documents to ingesters with available capacity and balancing load based on actual shard throughput rather than static heuristics.
_quickwit/quickwit-ingest/src/ingest\v2 · high confidence
Initial Quickwit UI release with Vite build and Material UI integration
The Quickwit UI is now available as a standalone React application built with Vite, replacing the previous setup. This release introduces a new development environment (running on port 3000 with API proxying) and production build configuration. It integrates Material UI for the interface, with specific build adjustments to suppress 'use client' directive warnings from Material UI components. The package includes standard tooling configurations for TypeScript, Biome formatting/linting, Jest unit testing, and Playwright end-to-end testing.
quickwit/quickwit-ui · high confidence
Initial UI application structure and state management providers
The Quickwit UI application entry point is established, bootstrapping the React app with a BrowserRouter and the App component. This change introduces core state management providers: EditorProvider for managing Monaco Editor references and LocalStorageProvider for persisting and restoring the last search request across sessions. Additionally, a test suite is added to verify that the main application view correctly renders the Discover, Query editor, and Admin sidebar links.
quickwit/quickwit-ui/src · high confidence
Initial UI utility layer for search, models, and theming
The Quickwit UI introduces a foundational set of utility modules to support the search interface. The \models.ts\ file defines the data structures for document mappings, search requests, and aggregation configurations (including term and histogram aggregations), along with logic to parse aggregation results. The \urls.ts\ module handles the serialization and parsing of search parameters to and from the browser URL, enabling state persistence for queries, timestamps, sorting, and aggregations. The \SearchComponentProps.ts\ file establishes the interface for the search component's inputs, and \theme.ts\ configures the visual styling, including custom fonts and color palettes, for the application.
quickwit/quickwit-ui/src/utils · high confidence
Initial implementation of Elasticsearch-compatible query DSL
The \elastic\_query\_dsl\ module now supports a comprehensive set of Elasticsearch-compatible query types, including \bool\, \match\, \match\_phrase\, \match\_bool\_prefix\, \match\_phrase\_prefix\, \multi\_match\, \query\_string\, \range\, \exists\, \term\, \terms\, \prefix\, \wildcard\, and \regexp\ queries. This enables users to send standard Elasticsearch-style JSON queries to Quickwit, with specific behaviors such as \minimum\_should\_match\ resolution in boolean queries, field presence checks via \exists\, and phrase matching with slop.
_quickwit/quickwit-query/src/elastic\_query\dsl · high confidence
Initial release of the Quickwit UI with search, index management, and API playground
The Quickwit UI is now available, providing a web-based interface for interacting with Quickwit clusters. Users can perform full-text searches with support for aggregations via the Search view, manage and inspect index configurations (including doc mapping, indexing/search/retention settings, and splits) through the Indexes and Index views, and monitor cluster health and node details in the Cluster and Node Info views. Additionally, an API Playground is included to explore the OpenAPI specification directly in the browser.
quickwit/quickwit-ui/src/views · high confidence
Initial repository scaffolding and development environment setup
This change establishes the foundational structure for the Quickwit project, introducing essential configuration and documentation files. It adds a \.dockerignore\ to optimize Docker builds, a \.env.example\ for local service configuration (including pinned versions for LocalStack and PostgreSQL), and a \Dockerfile\ that builds the UI with Node 24 and the Rust binary. It also includes \AGENTS.md\ for AI assistant context, \AI\_POLICY.md\ governing AI usage, \CHANGELOG.md\ documenting the 0.9.0 and 0.9.1 releases, \CODE\_OF\_CONDUCT.md\, \CODE\_STYLE.md\ for Rust coding standards, and \CONTRIBUTING.md\ with detailed setup instructions for developers.
(repo-wide) · high confidence
Introduce AWS Lambda client for offloading leaf search
Quickwit now supports offloading leaf search operations to AWS Lambda to enable horizontal scaling. This change adds the \quickwit-lambda-client\ crate, which embeds a pre-built Lambda binary and automatically deploys it to AWS at startup if a matching version is not found. The client handles versioning based on the Quickwit release and binary hash, manages Lambda function lifecycle (including garbage collection of old versions), and implements retry logic with rate-limit backoff for invocations. It also exposes metrics for search duration and payload sizes to monitor Lambda performance.
quickwit/quickwit-lambda-client · high confidence
Introduce AWS Lambda handler for offloading leaf search operations
Added a new \quickwit-lambda-server\ crate that provides the entry point and handler logic for executing Quickwit leaf search tasks on AWS Lambda. This includes a binary entry point (\leaf\_search.rs\) to run the Lambda function, a context module (\context.rs\) that initializes the searcher environment based on Lambda memory constraints, and a handler module (\handler.rs\) that decodes incoming search requests, resolves storage, and executes split-level searches concurrently. This change enables offloading the execution of leaf search work to AWS Lambda functions.
quickwit/quickwit-lambda-server · high confidence
Introduce Control Plane actor with indexing and ingest controllers
The control plane is now implemented as a dedicated actor that manages two independent sub-controllers: an \IndexingScheduler\ for assigning indexing tasks to indexer nodes and an \IngestController\ for managing shard lifecycle on ingesters. This change introduces a new \ControlPlaneModel\ for state management, a \PhysicalIndexingPlan\ for defining task distribution, and a \CooldownMap\ to prevent excessive shard pruning. It also adds a \Debouncer\ to handle event rate-limiting and exposes comprehensive metrics (e.g., \indexes\_total\, \shards\, \locality\_repairs\_total\) for monitoring the control plane's internal state and operations.
quickwit/quickwit-control-plane/src · high confidence
Introduce Google Cloud Storage implementation via OpenDAL
Users can now store and retrieve data in Google Cloud Storage (GCS) using the \gs://\ URI scheme. This change adds a new \GoogleCloudStorageFactory\ that resolves GCS URIs, parses bucket and prefix information, and configures authentication via a credential chain (supporting default credentials, file-based service accounts, and token exchange). The underlying storage layer is built on OpenDAL, featuring configurable retry policies, concurrency limits, and specific timeouts for control and I/O operations to ensure reliability. A custom memory-efficient copy loop is also included to prevent unbounded memory growth during large uploads.
_quickwit/quickwit-storage/src/opendal\storage · high confidence
Introduce Ingest V2 protocol definitions and error handling
The ingest module now includes the proto-generated code and helper implementations for the new Ingest V2 API. This adds the \IngestV2Error\ type with specific variants for shard not found, timeouts, and rate limiting (including \RateLimitingCause\), along with gRPC status code mappings. It also provides utility methods on \FetchMessage\, \FetchPayload\, \IngesterStatus\, \OpenFetchStreamRequest\, \PersistSuccess\, and \TruncateShardsSubrequest\ to extract queue IDs, and adds iterator helpers to \DocBatchV2\ for accessing documents. The router sub-module includes byte-counting helpers for \IngestRequestV2\ and \IngestSubrequest\.
quickwit/quickwit-proto/src/ingest · high confidence
Introduce IngestSource v2 for document ingestion
Added a new \IngestSource\ implementation in the indexing pipeline that streams documents from shards via a \MultiFetchStream\ to the ingester pool. This source handles shard assignment, manages fetch retries with exponential backoff, and tracks indexing status (Active, Complete, Error, NotFound, ReachedEof) to ensure documents are correctly fetched, processed, and published with appropriate publish tokens.
quickwit/quickwit-indexing/src/source/ingest · high confidence
Introduce OpenTelemetry module with OTLP support
The \quickwit-opentelemetry\ crate is initialized with a new \lib.rs\ file that exposes the \otlp\ module, laying the groundwork for OpenTelemetry protocol integration within Quickwit.
quickwit/quickwit-opentelemetry/src · high confidence
Introduce Quickwit REST client library
Added a new \quickwit-rest-client\ crate that provides an asynchronous Rust client for interacting with the Quickwit REST API. The library includes a builder for configuring connection parameters such as timeouts (connect, general, search, ingest, commit), retry policies, and optional mTLS support (custom CA certificates and client identities). It exposes models for API responses, including a dedicated \SearchResponseRestClient\ for search results and detailed ingest response handling, along with utilities for batching document ingestion from files or stdin.
quickwit/quickwit-rest-client · high confidence
Introduce Quickwit codegen for gRPC service scaffolding
The \quickwit-codegen\ crate is now available to automatically generate Rust service traits, client adapters, and server implementations from \.proto\ files. Users can configure the code generation via a builder API, specifying the input proto files, output directory, and custom result/error types. The generated code supports Tower middlewares, distributed tracing (with configurable field recording), and includes utilities for mocking and testing. This simplifies the creation of gRPC services by handling the boilerplate for serialization, transport, and service definition.
quickwit/quickwit-codegen · high confidence
Introduce Terraform module for Quickwit ECS service deployment
This change adds a new Terraform module that provisions a Quickwit service on AWS ECS using Fargate. It configures the container with specific environment variables for cluster identity and data storage, exposes REST (7280), gRPC (7281), and gossip ports, and supports mounting volumes for data and secrets. The module allows for configurable IAM policies, including external Postgres metastore URIs via AWS Secrets Manager, and integrates with service discovery.
distribution/ecs/quickwit/service · high confidence
Introduce \`serde\_multikey\` procedural macro for complex serialization
Added the \quickwit-macros\ crate containing the \serde\_multikey\ attribute, which allows structs to define custom serialization and deserialization logic by generating a proxy struct. This enables users to map complex internal field structures to different external representations during serde operations, with support for both serialization and deserialization paths and integration with utoipa schema generation.
quickwit/quickwit-macros · high confidence
Introduce control-plane-managed ingest controller with automatic shard scaling
The control plane now includes a new \IngestController\ that manages the lifecycle of ingest shards, including creation, closing, and rebalancing across ingesters. This controller implements automatic shard scaling based on ingestion throughput, using both short-term and long-term metrics to decide when to add or remove shards, ensuring efficient resource usage. It also supports zonal-aware shard placement to optimize data locality when ingesters advertise availability zones, and handles shard rebalancing when ingester status changes or nodes are decommissioned.
quickwit/quickwit-control-plane/src/ingest · high confidence
Introduce cooperative indexing to limit concurrent indexing pipelines
The indexing service now supports cooperative indexing, a mechanism that staggers indexing pipelines so that only a limited number run concurrently. This reduces RAM usage and context switching by controlling the number of active IndexWriters. The feature is enabled via the \enable\_cooperative\_indexing\ configuration option and uses a semaphore to restrict concurrency, with pipelines taking turns based on a hashed target phase to distribute work uniformly over time.
quickwit/quickwit-indexing/src/actors · high confidence
Introduce dedicated Janitor service for index maintenance
Quickwit now includes a new Janitor service that centralizes index maintenance tasks. This service manages garbage collection of deleted splits, enforces retention policies by marking expired splits for deletion, and processes delete queries. It exposes health checks and metrics (such as GC runs and deleted bytes) to monitor these background operations, providing a unified component for keeping index data clean and compliant with configured policies.
quickwit/quickwit-janitor/src · high confidence
Introduce dedicated ingest API service with queue-based ingestion and memory/disk limits
The \quickwit-ingest\ crate now provides a new \IngestApiService\ that manages document ingestion via persistent queues backed by \mrecordlog\. Users can now ingest documents into named queues, with the service enforcing configurable memory and disk usage limits to prevent resource exhaustion. The service exposes gRPC endpoints for ingesting, fetching, and tailing records, and supports explicit commit control (auto, wait-for, or force) to manage when documents become searchable. A notification system ensures that clients waiting for commits are notified when records are committed, and the service tracks ingestion metrics such as total documents and bytes ingested.
quickwit/quickwit-ingest/src · high confidence
Introduce in-memory indexing mode for splits
The indexing pipeline now supports an in-memory indexing mode, activated via the \QW\_ENABLE\_IN\_MEMORY\_INDEXING\ environment variable. When enabled, \IndexedSplitBuilder\ uses a \RamDirectory\ instead of the default \MmapDirectory\ for the Tantivy index, allowing splits to be built entirely in RAM before being persisted to the scratch directory during finalization. This change is implemented in the \IndexedSplit\ model and its builder within the \quickwit-indexing/src/models\ directory.
quickwit/quickwit-indexing/src/models · high confidence
Introduce new Quickwit CLI with connectivity checklist and structured command groups
The \quickwit-cli\ crate now provides a restructured command-line interface organized into five main groups: \run\, \index\, \source\, \split\, and \tool\. This release adds a pre-execution connectivity checklist that validates the environment and reports errors with colored symbols (✔/✖) before running commands. The CLI now supports a \--no-color\ flag to disable ANSI terminal codes and includes a \--yes\ flag for non-interactive execution. New index management capabilities include \index clear\ to delete all splits and reset checkpoints, \index update\ to apply configuration changes, and enhanced \index ingest\ with \--wait\ and \--force\ options to control commit behavior. The interface also exposes jemalloc memory metrics and process I/O metrics on Linux.
quickwit/quickwit-cli · high confidence
Introduce new S3-compatible and Azure Blob storage backends
The object storage layer now includes dedicated implementations for S3-compatible services and Azure Blob Storage. The S3 backend (\S3CompatibleObjectStorage\) leverages the AWS SDK, supports custom endpoints, respects region and credentials from the storage config, and includes a semaphore to limit concurrent requests. The Azure backend (\AzureBlobStorage\) provides a factory-based resolution using the Azure SDK, supporting account names, access keys, and token credentials. Both backends are registered via their respective factories (\S3CompatibleObjectStorageFactory\ and \AzureBlobStorageFactory\) and share a common multipart policy configuration.
_quickwit/quickwit-storage/src/object\storage · high confidence
Introduce on-disk split cache for searchers
Quickwit now caches search splits on disk to reduce remote storage latency and costs. The new \SearchSplitCache\ component manages a local directory of split files, tracking their status (candidate, downloading, or on-disk) via an in-memory table. It automatically downloads splits reported by the search service, enforces configurable size and file-descriptor limits, and evicts older files when capacity is reached. A background task handles concurrent downloads, while the cache wraps the underlying storage to serve split reads from the local disk when available.
_quickwit/quickwit-storage/src/split\cache · high confidence
Introduce opt-in standalone compactor service
Quickwit now includes a new, opt-in compactor service that handles merge operations independently of the indexing pipeline. This change introduces a dedicated \CompactorService\ to execute merge tasks and a \CompactionPlanner\ to schedule them, decoupling compaction from indexers. The service supports graceful decommissioning, allowing in-flight merges to complete before shutdown, and exposes detailed metrics for monitoring compaction progress, failures, and available slots.
quickwit/quickwit-compaction · high confidence
Introduce routing expression DSL for document partitioning
The \quickwit-doc-mapper\ crate now includes a new \routing\_expression\ module that defines a Domain Specific Language (DSL) for specifying how documents are routed to partitions. This feature allows users to define routing logic using field names, composite expressions, and modulo operations on hash values, enabling deterministic partitioning based on document content. The implementation uses a consistent SipHash algorithm to ensure stable partition IDs regardless of minor formatting changes in the expression string.
_quickwit/quickwit-doc-mapper/src/routing\expression · high confidence
Introduces configurable in-memory storage caching with multiple eviction policies
Quickwit now supports an in-memory cache for storage reads, allowing users to improve performance for frequently accessed data (such as fast fields) by configuring cache policies (LRU, S3-FIFO, or TinyLFU) and capacity limits. The \StorageCache\ trait and \StorageWithCache\ wrapper enable this behavior, while the \QuickwitCache\ router directs requests to specific caches based on file suffixes (e.g., \.fast\). The implementation includes a \ByteRangeCache\ for efficient byte-range retrieval and merging, and exposes detailed metrics for monitoring cache hits, misses, and memory usage.
quickwit/quickwit-storage/src/cache · high confidence
Introduction of the quickwit-actors framework
This change introduces the \quickwit-actors\ crate, a new actor framework designed for Quickwit's indexing pipeline. It provides core components including the \Actor\ trait, \Universe\ for managing actor lifecycles, \Mailbox\ for message passing with priority support, and a \Supervisor\ for handling actor health and restarts. The framework includes a scheduler that supports time simulation for testing, a progress tracking system to detect stuck actors, and observability features like \ObservableState\ and health checks. The crate is licensed under the MIT license.
quickwit/quickwit-actors · high confidence
Jaeger v2 protocol support added to quickwit-proto
The \quickwit-proto\ crate now includes generated Rust code for the Jaeger v2 storage API (\jaeger.storage.v2.rs\) and the Jaeger v2 API definitions (\jaeger.api\v2.rs\), alongside OpenTelemetry protocol definitions (\opentelemetry.proto.\.rs\). This adds the necessary data structures and client stubs (such as \TraceReaderClient\) to support the newer Jaeger v2 interface, enabling future integration with Jaeger's v2 storage backend.
quickwit/quickwit-proto/src/codegen/jaeger · high confidence
New API client service with aggregation support
The UI now includes a dedicated HTTP client service (src/services/client.ts) that handles communication with the Quickwit backend, replacing previous ad-hoc fetch calls. This client introduces support for search aggregations, allowing users to request metric and histogram aggregations via the new 'aggs' parameter in the search body. It also standardizes search request construction, including proper handling of sort fields, timestamp ranges, and hit limits (defaulting to 0 for aggregation queries). A corresponding unit test suite validates the URL construction and request body serialization.
quickwit/quickwit-ui/src/services · high confidence
New ConstWriteAmplification merge policy and NopMergePolicy rename
The merge policy module now includes a new \ConstWriteAmplificationMergePolicy\ designed for partitioned indexes (e.g., by tenant) to limit write amplification by targeting a specific number of merge operations rather than a target document count. Additionally, the \NoMergePolicy\ has been renamed to \NopMergePolicy\ to follow Rust naming conventions, and the module exports this no-op policy which immediately marks all splits as mature since no merges occur.
_quickwit/quickwit-indexing/src/merge\policy · high confidence
New ECS example Terraform module for deploying Quickwit
Added a new example Terraform configuration in distribution/ecs/example that provisions a complete AWS environment for Quickwit on ECS. This includes a VPC with public and private subnets, an optional bastion host for secure access, and an ECR pull-through cache to mitigate Docker Hub rate limits. The module also provides examples for configuring sidecar containers, such as injecting Kafka SSL keys via AWS Secrets Manager, and supports external Postgres metastores and configurable IAM policies for indexers.
distribution/ecs/example · high confidence
New Elasticsearch-compatible API layer for Quickwit
This change introduces a new \elasticsearch\_api\ module that provides a compatibility layer for Elasticsearch endpoints. It includes handlers for bulk ingestion (supporting both legacy v1 and new v2 ingest protocols), search, multi-search, scroll, index management (create, delete, mapping), cluster health, and metadata operations (stats, field capabilities, resolve). The implementation uses the Warp framework for routing and includes filters for request validation and decompression, enabling clients to interact with Quickwit using standard Elasticsearch API calls.
_quickwit/quickwit-serve/src/elasticsearch\api · high confidence
New Jaeger REST API for Grafana tracing support
Quickwit now exposes a new set of REST endpoints under the \/jaeger/api\ path to support Grafana tracing integration. This change introduces handlers for listing services, retrieving service operations, searching for traces with filters (such as service name, operation, time range, tags, and duration), and fetching specific trace details by ID. The implementation includes model definitions for Jaeger-compatible JSON responses, duration parsing logic, and Swagger/OpenAPI documentation via utoipa.
_quickwit/quickwit-serve/src/jaeger\api · high confidence
New Kinesis indexing source implementation
Quickwit now supports ingesting data from Amazon Kinesis Data Streams. This change introduces a new \KinesisSource\ that manages shard consumers to poll records, handles checkpointing by sequence number, and supports backfill mode. It includes a connectivity check and uses the AWS SDK for Rust with configurable retry parameters.
quickwit/quickwit-indexing/src/source/kinesis · high confidence
New Query Editor with Aggregation Support and Monaco Integration
The QueryEditor component has been replaced with a new implementation built on the Monaco editor, providing syntax highlighting, custom language configuration, and field auto-completion (excluding the timestamp field). Additionally, a new AggregationEditor component allows users to configure metric types (count, average, sum, max, min) and aggregation kinds (histogram, term) directly within the UI, enabling visual construction of aggregation queries.
quickwit/quickwit-ui/src/components/QueryEditor · high confidence
New REST API endpoints for node info, health checks, and build metadata
The REST API now exposes several new endpoints to help users monitor and debug the Quickwit node. The \/version\ endpoint returns build metadata (commit hash, date, version) and runtime information (CPU count, thread configuration). The \/config\ endpoint exposes the current node configuration with sensitive credentials redacted. Health monitoring is now available via \/health/livez\ (liveness, checking indexer, janitor, compactor, and ingester status) and \/health/startupz\ (startup readiness, checking cluster node readiness). Additionally, the existing \/\ endpoint serves Prometheus metrics, and the \/health\ path has been standardized for these health checks.
quickwit/quickwit-serve/src · high confidence
New REST API for index, source, and split management
The \index\_api\ module now exposes a comprehensive set of REST endpoints for managing Quickwit resources. Users can create, update, clear, and delete indexes, as well as manage sources (create, update, toggle, delete, reset checkpoints) and splits (list with filtering, mark for deletion) via dedicated handlers. The API also includes utility endpoints for analyzing text with tokenizers and parsing query strings into ASTs. These changes consolidate index management operations into a structured REST interface, replacing or supplementing previous mechanisms.
_quickwit/quickwit-serve/src/index\api · high confidence
New REST API for managing delete tasks
This change introduces a new REST API endpoint for managing delete tasks, allowing users to create and list delete operations via HTTP. The API exposes \GET /{index\_id}/delete-tasks\ to retrieve existing delete tasks and \POST /{index\_id}/delete-tasks\ to submit new delete queries. The POST endpoint accepts a JSON body containing a query string, optional search fields, and optional timestamp ranges (\start\_timestamp\, \end\_timestamp\). Upon submission, the system validates the query against the index's document mapping and search settings before queuing the task for asynchronous execution.
_quickwit/quickwit-serve/src/delete\_task\api · high confidence
New REST API for managing index templates
This change introduces a new set of REST endpoints for managing index templates, allowing users to create, retrieve, update, and delete templates via the \/templates\ route. The implementation in \quickwit-serve/src/template\_api\ exposes handlers that parse configuration formats, validate template structures, and communicate with the metastore service to persist template definitions.
_quickwit/quickwit-serve/src/template\api · high confidence
New REST endpoint to retrieve cluster information
A new REST API endpoint has been added at the \/cluster\ path, allowing users to fetch the current cluster state via a GET request. The response returns a \ClusterSnapshot\ containing details about the nodes in the cluster, formatted according to the \format\ query parameter. This change introduces the \cluster\_api\ module within \quickwit-serve\, exposing the \ClusterApi\ for OpenAPI documentation and wiring the handler to return the cluster snapshot.
_quickwit/quickwit-serve/src/cluster\api · high confidence
New Terraform module for deploying Quickwit on AWS ECS
This change introduces a new Terraform module in \distribution/ecs/quickwit\ that enables users to deploy the full Quickwit architecture (control plane, indexer, searcher, janitor, and metastore) on Amazon ECS. The module provisions an ECS cluster, configures AWS Service Discovery for internal service communication, and manages IAM policies for S3 and ECR access. It supports an external Postgres metastore via SSM Parameter Store or Secrets Manager, or automatically provisions an internal RDS PostgreSQL 16 instance. Users can customize service sizing, networking (VPC, subnets, security groups), and logging, with the indexer service configured with a longer termination grace period to ensure data persistence.
distribution/ecs/quickwit · high confidence
New Tower middleware layers for resilience and observability
The \quickwit-common\ crate now provides a comprehensive suite of Tower middleware layers to enhance service reliability and monitoring. This includes a \CircuitBreakerLayer\ to reject requests when error thresholds are exceeded, a \LoadShedLayer\ to cap in-flight requests, and an \EventListenerLayer\ to publish successful request events. For observability, a \GrpcMetricsLayer\ tracks request counts, durations, and in-flight status, while an \EstimateRateLayer\ allows services to expose their processing capacity. Additional utilities like \DelayLayer\, \BufferLayer\, and \OneTaskPerCallLayer\ are also introduced to manage request timing, concurrency, and task lifecycle.
quickwit/quickwit-common/src/tower · high confidence
New common utilities and infrastructure modules
The \quickwit-common\ library now includes several new modules that provide foundational utilities for the rest of the system. This includes an allocation tracker and Jemalloc profiler for heap memory analysis, a \KillSwitch\ mechanism for coordinated process shutdown, and helpers for environment variable parsing with caching. It also adds utilities for CPU detection (supporting Kubernetes limits), random ID generation, and IO throughput limiting with metrics integration.
quickwit/quickwit-common/src · high confidence
New configuration infrastructure and document clustering support
This change introduces a new \ConfigValue\ type in \quickwit-config\ that standardizes how configuration fields are resolved, giving environment variables (prefixed with \QW\_\) strict precedence over config file values and defaults. It adds a new \DocsClusteringConfig\ module, allowing users to define fingerprint-based policies to group documents by structure and field values during indexing. Additionally, the \merge\_policy\_config\ module is updated to expose \ConstWriteAmplificationMergePolicyConfig\ and \StableLogMergePolicyConfig\ with explicit maturation periods and finalize options, while \qw\_env\_vars\ centralizes the definition of all Quickwit environment variable keys used across the system.
quickwit/quickwit-config/src · high confidence
New developer API endpoints for debug info, log levels, and profiling
The developer API now exposes several new endpoints under the \/api/developer\ path to aid in troubleshooting and performance analysis. Users can fetch cluster-wide debug information via the \/debug\ endpoint, which supports filtering by node ID and role, and automatically redacts sensitive configuration details like database credentials. Dynamic log level changes are now possible through the \/log-level\ endpoint. Additionally, CPU profiling is available via \/pprof/start\ and \/pprof/flamegraph\ (returning an SVG flamegraph), and heap profiling is supported via \/heap-prof/start\ and \/heap-prof/stop\ when the respective features are enabled.
_quickwit/quickwit-serve/src/developer\api · high confidence
New developer tooling scripts for license compliance, code quality, and split inspection
Added several new scripts to the \quickwit/scripts\ directory to support development workflows. The \inspect\_split.py\ script allows users to inspect Quickwit \.split\ bundle files, printing per-file sizes and metadata. The \check\_license\_headers.sh\ script validates that source files contain the correct license headers. The \check\_log\_format.sh\ script enforces logging style guidelines for Rust source files. Additionally, \about.hbs\ and \about.toml\ provide the template and configuration for generating third-party license reports via cargo-about, while \dep-tree.py\ generates a visual dependency graph for core Quickwit crates, and \fix\_if\_needed.py\ automates the application of clippy lint fixes.
quickwit/scripts · high confidence
New directory abstractions for split bundles, caching, and union views
The \quickwit-directories\ crate now provides several new directory implementations to enhance storage handling and performance. \BundleDirectory\ enables reading split bundles as a unified Tantivy directory, while \HotDirectory\ and \CachingDirectory\ introduce static and dynamic caching layers to reduce redundant I/O. \UnionDirectory\ allows stacking multiple directories with shadowing logic, and \DebugProxyDirectory\ instruments read operations for performance analysis. \StorageDirectory\ continues to bridge the \Storage\ trait with the Tantivy \Directory\ API.
quickwit/quickwit-directories · high confidence
New index management module for garbage collection and index lifecycle operations
A new \quickwit-index-management\ crate has been introduced, consolidating core index lifecycle logic. It provides the \IndexService\ for creating, updating, and deleting indexes, and implements the garbage collection (\run\_garbage\_collect\) logic to detect and remove dangling splits from storage and the metastore based on configurable grace periods. This module exposes metrics for deleted splits and bytes, and handles the coordination between the metastore and storage backends for split deletion.
quickwit/quickwit-index-management · high confidence
New indexing API endpoint to observe pipeline status
A new REST endpoint is available at \/indexing\ that allows users to observe the current status of indexing pipelines. This feature exposes \IndexingServiceCounters\ via a GET request, enabling monitoring of indexing activity through the Quickwit API.
_quickwit/quickwit-serve/src/indexing\api · high confidence
New janitor actors for delete tasks, garbage collection, and retention policies
The janitor service now includes dedicated actors to manage data lifecycle: \DeleteTaskService\ orchestrates pipelines that plan and execute document deletions on stale splits; \GarbageCollector\ periodically removes orphaned split files from storage; and \RetentionPolicyExecutor\ schedules and runs index retention policies. These components replace previous ad-hoc cleanup logic with a structured, supervised actor model.
quickwit/quickwit-janitor/src/actors · high confidence
New metastore proxy and replay utilities
Added two new command-line utilities in the metastore-utils crate: a proxy that intercepts and records gRPC calls to the Quickwit metastore into a JSON-lines file, and a replay tool that reads such a recorded file and re-sends the requests sequentially to a target metastore service. These tools enable users to capture metastore traffic for debugging or testing and to reproduce that traffic against different metastore configurations or versions.
quickwit/quickwit-metastore-utils/src/bin · high confidence
New queue-based file source with SQS support and exactly-once semantics
Quickwit now supports indexing files via queue notifications (specifically AWS SQS) using a new \QueueCoordinator\ implementation. This feature enables exactly-once processing by tracking each file as a shard in the metastore, managing message visibility timeouts to prevent duplicates, and handling shard ownership and garbage collection. The module includes an abstract \Queue\ trait, an SQS-specific implementation, and helper components for local state and shared metastore interactions, allowing users to configure file sources that react to S3 object creation events.
_quickwit/quickwit-indexing/src/source/queue\sources · high confidence
New quickwit-datetime crate for unified date parsing and formatting
A new \quickwit-datetime\ crate has been introduced to centralize date and time handling, providing configurable input and output formats for both parsing and serialization. Users can now parse datetime strings using ISO8601, RFC2822, RFC3339, Unix timestamps (including fractional seconds), or custom Strptime patterns, with support for leading/trailing whitespace. The crate also supports Java-style date format tokens and enforces strict range checks for Unix timestamps to prevent silent wrapping errors. This module is designed to be consumed by \quickwit-query\ and \quickwit-docmapper\ without introducing a dependency on \tantivy\ in \quickwit-common\.
quickwit/quickwit-datetime · high confidence
New search service client and cluster communication layer
The search module now includes a new \SearchServiceClient\ abstraction that manages connections to search nodes, supporting both local in-process service calls and remote gRPC communication with timeout and tracing interceptors. A \ClusterClient\ has been added to handle distributed search execution, providing retry logic for leaf searches and document fetches across nodes, as well as key-value replication for scroll contexts. The \LeafSearchCache\ has been introduced to memoize leaf search results per split, using a hashed cache key to reduce memory overhead and improve performance for repeated queries.
quickwit/quickwit-search/src · high confidence
New source implementations for file, Kafka, Pulsar, GCP PubSub, and Ingest API
Quickwit introduces several new data ingestion sources. The File source now supports reading from local paths and S3 (via SQS notifications), including handling of gzip-compressed files. New connectors are available for Kafka, Pulsar, and GCP PubSub, enabling ingestion from these streaming platforms. Additionally, the Ingest API source allows the indexing pipeline to consume documents directly from the local ingest queue, supporting both v1 and v2 ingest formats.
quickwit/quickwit-indexing/src/source · high confidence
New storage layer components for bundles, metrics, and concurrency control
The storage module introduces several new capabilities: BundleStorage enables reading split bundles by locating and parsing a footer trailer directly from object storage; CountingStorage provides a proxy wrapper to track per-request download bytes and request counts for observability; AsyncDebouncer and DebouncedStorage deduplicate concurrent read requests to the same data source to reduce redundant I/O; FileDescriptorCache manages local file handles with a configurable limit and semaphore-based concurrency control; and the error module defines structured error types including StorageErrorKind and BulkDeleteError to improve error handling and reporting.
quickwit/quickwit-storage/src · high confidence
New unified search API layer with gRPC and REST handlers
The search service now exposes a structured API layer in \quickwit-serve/src/search\_api\, introducing a gRPC adapter (\GrpcSearchAdapter\) that implements the \SearchService\ trait for distributed search operations (root/leaf search, scroll, list terms, list fields, etc.) and a REST handler module that defines the HTTP endpoints and request models (including query parsing, sorting DSL, and pagination). This change establishes the concrete wiring for search requests to flow through the gRPC stack and REST interface, supporting features like multi-index patterns, timestamp filtering, and sort-by fields as defined in the request structures.
_quickwit/quickwit-serve/src/search\api · high confidence
PostgreSQL metastore implementation with read-replica support
Quickwit now supports a PostgreSQL metastore backend, allowing users to store index metadata in a managed relational database instead of object storage. This implementation includes a factory for connection pooling, a migration system with deferred migration handling for multi-node deployments, and a read-only mode for read replicas. It also introduces specific error handling for PostgreSQL constraints (such as foreign key and unique violations) and exposes database connection pool metrics for monitoring.
quickwit/quickwit-metastore/src/metastore/postgres · high confidence
Redesigned query AST with new query types and predicate caching
The query parsing and execution engine has been redesigned, introducing a new \QueryAst\ enum that supports a wider variety of query types including \Bool\, \PhrasePrefix\, \FieldPresence\, \CalcField\ (calculated fields), and \Cache\ (predicate caching). This change adds support for boolean logic with \must\, \must\_not\, \should\, and \filter\ clauses, phrase prefix searches, and the ability to query for field existence. It also introduces a predicate cache mechanism to optimize repeated queries by caching results, and adds support for calculated field expressions using Tantivy's JIT expressions.
_quickwit/quickwit-query/src/query\ast · high confidence
Search results now display aggregations and handle timestamp formats correctly
The Quickwit UI now supports visualizing search aggregations alongside standard document results. When a search query includes aggregations, the interface renders them as interactive charts (line charts for histograms, bar charts for term aggregations) instead of a document table. For standard document results, the new table layout correctly extracts and displays the index's configured timestamp field, properly formatting Unix timestamps across seconds, milliseconds, microseconds, and nanoseconds. This change introduces new components (AggregationResult, ResultTable, Row) to handle these distinct display modes and ensures accurate time representation in search results.
quickwit/quickwit-ui/src/components/SearchResult · high confidence
API
New gRPC service definitions for cluster, control plane, and ingest components
This change introduces a new set of Protocol Buffers in the \quickwit-proto\ crate that define the internal gRPC contracts for Quickwit's distributed architecture. The new files establish the \ClusterService\ for fetching cluster state via Chitchat, the \ControlPlaneService\ for managing indexes, sources, and shard lifecycle, and the \IngesterService\ for document persistence and shard management. Additionally, it defines the \IngestRouterService\ for document ingestion, the \IndexingService\ for applying indexing plans, and the \MetastoreService\ for index and split metadata. Common types such as \IndexUid\, \ShardId\, and \Position\ are also standardized across these services to ensure consistent communication between the control plane, ingesters, and indexers.
quickwit/quickwit-proto/protos/quickwit · high confidence
Behavioural changes
19 commits (0 fixes) modifying quickwit/quickwit-query/src/tokenizers
A change to existing behaviour in quickwit/quickwit-query/src/tokenizers — 19 commits, 5 files.
quickwit/quickwit-query/src/tokenizers · medium confidence · unverified
Automated initialization of LocalStack resources for tests
A new startup script has been added to automatically configure the LocalStack environment before tests run. This ensures that the required S3 buckets (quickwit-dev and quickwit-integration-tests) and the Kinesis stream (quickwit-dev-stream) are present, reducing manual setup and improving the reliability of the test environment.
.localstack · high confidence
Cluster error handling and load shedding support
The cluster module now defines a \ClusterError\ enum that maps internal, timeout, too-many-requests, and unavailable states to specific service error codes. This enables consistent gRPC status code mapping and integrates with the load-shedding mechanism, where load-shed events are represented as \TooManyRequests\ errors. Internal errors are also rate-limited to prevent log flooding.
quickwit/quickwit-proto/src/cluster · high confidence
Cluster membership now uses gRPC gossip for state catch-up
The cluster module has been refactored to replace pure UDP gossip with a hybrid approach that uses gRPC to fetch and synchronize cluster state. This change introduces a new \ClusterService\ gRPC endpoint and a \grpc\_gossip\ mechanism that periodically pulls the full cluster state from peer nodes, ensuring faster and more reliable catch-up for new or lagging nodes. The \ClusterChangeStream\ now emits structured \Add\, \Update\, and \Remove\ events based on these synchronized states, and metrics for gossip traffic (bytes and messages sent/received) are now exposed.
quickwit/quickwit-cluster · high confidence
Control plane and developer service error handling standardized
The \quickwit-proto\ crate now defines explicit error types (\ControlPlaneError\ and \DeveloperError\) for the control plane and developer services. These types implement the \ServiceError\ and \GrpcServiceError\ traits, ensuring that internal errors, timeouts, rate-limiting (too many requests), and unavailability conditions are consistently mapped to gRPC status codes and error codes. This change provides a uniform error reporting mechanism for these specific service interfaces, replacing ad-hoc error handling with a structured approach that supports load shedding and standardized client-side error interpretation.
_quickwit/quickwit-proto/src/control\plane · high confidence
Control plane integration for index and source management
The metastore now includes a \ControlPlaneMetastore\ wrapper that proxies index and source lifecycle operations (create, update, delete, toggle) to the control plane service. This ensures the control plane maintains an accurate, real-time view of metastore state for these specific operations, while read-only and split-related operations continue to interact directly with the underlying metastore implementation.
quickwit/quickwit-metastore/src/metastore · high confidence
Doc mapper refactored into a new modular implementation
The document mapping logic in \quickwit-doc-mapper\ has been completely rewritten to replace the previous \DocMapper\ trait with a concrete \DocMapper\ struct and a \DocMapperBuilder\. This change introduces a new internal architecture where field mappings are represented by a \MappingNode\ tree and specific type options (such as \QuickwitDateTimeOptions\, \QuickwitNumericOptions\, and \QuickwitTextOptions\) are defined in dedicated modules. The refactoring also adds explicit field presence tracking via \field\_presence.rs\ to support existence queries and introduces a \WarmupInfo\ structure to optimize index warmup by identifying required terms and fast fields.
_quickwit/quickwit-doc-mapper/src/doc\mapper · high confidence
Example project demonstrates configurable code generation builder
The example project now includes a build script that utilizes the new Codegen builder pattern to generate Rust code from a protobuf definition. This change illustrates how users can configure the code generator by specifying input proto files, output directories, and custom type paths for results and errors, while also enabling the generation of extra service methods and RPC name implementations.
quickwit/quickwit-codegen/example · high confidence
File-backed metastore introduces shard management and serialization versioning
The file-backed metastore now manages shards per source, including opening, acquiring, and pruning them with publish-token-based conflict resolution to ensure correct ingestion state. This change introduces a new serialization format (version 0.9) for the file-backed index, maintaining backward compatibility with versions 0.7 and 0.8 by automatically migrating shard data and populating default document mapping UIDs during deserialization.
_quickwit/quickwit-metastore/src/metastore/file\_backed/file\_backed\index · high confidence
Generated code now supports configurable gRPC compression and message size limits
The code-generated service client and server adapters now explicitly configure gRPC transport settings, including support for Gzip and Zstd compression and configurable maximum message sizes. This allows users to optimize network performance and handle larger payloads when using the generated clients and servers, with compression applied via the \accept\_compressed\ and \send\_compressed\ methods on the tonic service builder.
quickwit/quickwit-codegen/example/src/codegen · high confidence
Improved AWS S3 reliability with DNS caching and refined retry logic
The AWS client library now uses a custom in-memory DNS resolver to cache address lookups, reducing latency and blocking calls when connecting to S3. Additionally, retry behavior has been refined: S3 dispatch failures are now retried when they involve transient or throttling errors, and the system respects the \x-amz-retry-after\ header to honor server-suggested backoff delays.
quickwit/quickwit-aws · high confidence
Ingest API now returns detailed per-document success and failure counts
The REST ingest API response structure has been updated to provide granular feedback on document ingestion. Users can now see the exact number of documents successfully ingested versus those rejected due to parsing errors. Additionally, when the \detailed\_response\ query parameter is enabled, the API returns a list of specific parse failures, including the problematic document content and the reason for rejection, which was previously unavailable in the ingest v1 path.
_quickwit/quickwit-serve/src/ingest\api · high confidence
Introduce compaction service error handling types
The compaction module now defines a \CompactionError\ enum and implements standard error traits (including \ServiceError\ and \GrpcServiceError\). This establishes the error contract for the new opt-in compactor service, allowing it to properly report timeouts, internal errors, and load-shedding conditions via gRPC status codes.
quickwit/quickwit-proto/src/compaction · high confidence
Introduce strongly-typed ULID-based identifiers for core entities
The \quickwit-proto\ types module now defines dedicated, strongly-typed identifier structs for key domain entities: \IndexUid\ (combining an index ID with a ULID incarnation ID to distinguish deleted/recreated indexes), \DocUid\ and \DocMappingUid\ (ULID-based unique identifiers for documents and their mappings), \PipelineUid\ (ULID-based identifier for indexing pipelines/tasks), \ShardId\ (globally unique shard identifier), \SplitId\ (opaque split identifier with optional random S3 prefixing), and \Position\ (offset/EOF tracking for sources). These types replace previous string-based or ambiguous ID representations, providing consistent serialization (JSON, Protobuf, PostgreSQL) and ensuring type safety across the indexing and search pipelines.
quickwit/quickwit-proto/src/types · high confidence
Introduce versioned Index Template configuration with automatic UID assignment
Users can now define reusable index templates that automatically generate unique document mapping UIDs when applied to new indices, ensuring isolation between instances. This change introduces a versioned configuration format (V0.8) for index templates, supporting glob-based index ID patterns, priority-based selection, and optional retention policies, while maintaining backward compatibility with previous template versions through serialization aliases.
_quickwit/quickwit-config/src/index\template · high confidence
Introduce versioned index metadata serialization with backward compatibility
The metastore now persists index metadata using a new versioned serialization format (version 0.9), which internally maps to the existing in-memory \IndexMetadata\ structure. This change ensures backward compatibility by allowing the system to read metadata stored in previous versions (0.7 and 0.8) seamlessly. For users, this means that existing index data remains accessible and valid during upgrades, while new metadata is written in the updated format to support future schema evolutions without breaking existing indices.
_quickwit/quickwit-metastore/src/metastore/index\metadata · high confidence
Introduces local indexing split cache to reduce redundant downloads
Quickwit now caches freshly indexed splits locally on the indexer node before they are merged. This \IndexingSplitCache\ stores splits in a local directory and serves them to the merger pipeline, preventing the need to re-download splits from remote storage for every merge operation. The cache is bounded by configurable quotas for the maximum number of splits and total disk size, and it automatically evicts older splits (older than 48 hours) to manage disk usage. This change significantly reduces disk I/O and network bandwidth consumption during the indexing and merging phases.
_quickwit/quickwit-indexing/src/split\store · high confidence
Introduction of cluster configuration struct with shard throughput and scaling settings
A new \ClusterConfig\ struct has been added to the \quickwit-config\ crate to define core cluster-level settings. This configuration includes the cluster identifier, a flag to enable automatic index creation, the default URI for index storage, a configurable shard throughput limit, and a shard scale-up factor. These parameters are now available for use in controlling indexing behavior and resource allocation within the cluster.
_quickwit/quickwit-config/src/cluster\config · high confidence
Introduction of code generation for the ingest service
The quickwit-ingest crate now uses a build script to automatically generate Rust code from the ingest service protocol buffer definition (src/ingest\_service.proto). This change replaces manual implementation with generated code, configuring output to the src/codegen/ directory and integrating with the project's existing error handling and result types.
quickwit/quickwit-ingest · high confidence
Introduction of gRPC request envelope for metastore operations
The metastore-utils crate now provides a unified \GrpcRequest\ enum and \GrpcCall\ wrapper to encapsulate metastore API calls. This change introduces a tagged union that aggregates all metastore request types (such as \CreateIndexRequest\, \StageSplitsRequest\, and \DeleteIndexRequest\) into a single serializable structure, facilitating consistent handling and serialization of gRPC interactions within the metastore proxy layer.
quickwit/quickwit-metastore-utils/src · high confidence
Introduction of generated ingest service API contracts
The ingest service now exposes a formally defined API contract via the generated \ingest\_service.rs\ file, which establishes the structure for queue management (create, drop, list), document ingestion with configurable commit types (Auto, WaitFor, Force), and record retrieval (fetch, tail). This change introduces the \IngestService\ trait and associated request/response types, providing a clear interface for clients to interact with the ingest pipeline while clarifying delivery semantics (at-least-once vs. at-most-once) and payload limits.
quickwit/quickwit-ingest/src/codegen · high confidence
Introduction of the Control Plane Model and Shard Table
The control plane now maintains an in-memory model (\ControlPlaneModel\) that stays synchronized with the metastore, replacing the previous stateless approach. This model tracks indexes, sources, and shards, loading its full state from the metastore on startup. A new \ShardTable\ component manages shard lifecycle and locations, enforcing specific rate limits for scaling operations (5 scale-ups and 1 scale-down per minute per source) and tracking ingestion rates to support auto-scaling decisions.
quickwit/quickwit-control-plane/src/model · high confidence
Metastore module refactored with new checkpointing and versioned split metadata
The metastore module has been restructured to introduce a new checkpointing system for tracking indexing progress per source and partition, and to version split metadata (v0.8) with backward compatibility for older formats. This includes new types like \PartitionId\, \SourceCheckpoint\, and \IndexCheckpoint\ to manage indexing state, and a \MetastoreResolver\ to handle backend configuration and resolution. The split metadata now includes additional fields like \doc\_mapping\_uid\ and \num\_merge\_ops\ for better merge control and tracking.
quickwit/quickwit-metastore/src · high confidence
Metastore protocol definitions and event types migrated to generated code
The metastore protocol definitions in \quickwit-proto/src/metastore\ have been restructured to use code-generated service definitions (via \include!\ for the generated Rust code and descriptor set). This change introduces a new \events.rs\ module defining specific event structs (\DeleteIndexEvent\, \AddSourceEvent\, \ToggleSourceEvent\, \DeleteSourceEvent\) and implements the \Event\ trait for request types. It also adds \SplitRecoveryMetadata\ serialization/deserialization logic with a custom container header for disaster recovery, and defines an \EntityKind\ enum to list metastore-managed object types. The \MetastoreError\ enum is also present in the new module structure.
quickwit/quickwit-proto/src/metastore · high confidence
Migrate OpenTelemetry Collector protocol codegen to quickwit-proto
The OpenTelemetry Collector protocol definitions (logs, metrics, and traces) have been moved into the \quickwit-proto\ crate. This change introduces generated Rust structs and gRPC client/server implementations for the OTLP collector endpoints, enabling Quickwit to natively receive telemetry data via the standard OpenTelemetry Collector protocol.
quickwit/quickwit-proto/src/codegen/opentelemetry · high confidence
Migrate Quickwit metrics to metrics-rs with configurable prefixes and global labels
The quickwit-metrics library has been rewritten to use the \metrics-rs\ ecosystem, introducing a new set of macros (\counter!\, \gauge!\, \histogram!\) and types (\LazyCounter\, \LazyGauge\, \LazyHistogram\) for declaring metrics. Users can now configure a custom system prefix and separator for metric names (e.g., changing \quickwit\_http\_requests\_total\ to \myapp.http.requests\_total\) and apply global labels via an environment variable, which are automatically appended to all metrics. The implementation includes a global deduplication cache using \DashMap\ and thread-local caching for performance, along with an example demonstrating Prometheus integration.
quickwit/quickwit-metrics · high confidence
Migrate metrics infrastructure to metrics-rs
Quickwit has replaced its previous metrics implementation with the \metrics-rs\ ecosystem. This change introduces a new \quickwit-metrics-inventory\ crate that uses a build script and linker flags to automatically discover and register all metric definitions across the workspace, and updates the Prometheus telemetry exporter to configure histogram buckets and manage the metrics recorder using the new standard library. Users benefit from a more robust and standardized metrics collection system that ensures all metrics are properly exposed via the Prometheus endpoint.
quickwit/quickwit-metrics-inventory, quickwit/quickwit-telemetry-exporters/src/prometheus · high confidence
Migrate telemetry exporters to OpenTelemetry and metrics-rs
The telemetry exporters module has been rewritten to use the OpenTelemetry SDK for traces, logs, and metrics, replacing the previous implementation. This change introduces a new \TelemetryHandle\ for managing provider lifecycle and initializes a global metrics recorder via the \metrics-rs\ crate, which fans out data to both Prometheus and OTLP exporters when configured. Additionally, the logging layer now supports a new Datadog-specific JSON format (\ddg\) that promotes event fields to top-level attributes, and metrics initialization now respects a global labels environment variable.
quickwit/quickwit-telemetry-exporters/src · high confidence
New OTLP logs and traces index configurations (v0.9)
The OpenTelemetry module now defines the default index configurations for the \otel-logs-v0\_9\ and \otel-traces-v0\_9\ indices. The logs index maps fields such as \timestamp\_nanos\, \service\_name\, \severity\_number\, and \body\ (as JSON), while the traces index maps \trace\_id\, \span\_id\, \span\_name\, \span\_start\_timestamp\_nanos\, and \span\_status\. Both configurations use version 0.8 of the index format and set a 5-second commit timeout.
quickwit/quickwit-opentelemetry/src/otlp · high confidence
New codegen build script for gRPC services
The \quickwit-proto\ crate now includes a \build.rs\ script that automatically generates Rust code from \.proto\ definitions for the cluster, compaction, control plane, developer, indexing, metastore, and ingest services. This change introduces specific serialization behaviors, such as zstd compression for index metadata responses and custom serde aliases for delete queries, ensuring the generated code aligns with the current API contract.
quickwit/quickwit-proto · high confidence
New document mapping configuration and query building architecture
The \quickwit-doc-mapper\ crate has been restructured to introduce a new \DocMapping\ configuration model that explicitly defines how unmapped fields are handled via \ModeType\ (Lenient, Strict, or Dynamic) and includes new options to record field presence for \exists\ queries and document size for fast-field lookups. This change replaces the previous implicit mapping logic with a structured schema that supports dynamic field capture, custom tokenizers, and partitioning keys, while the query builder now utilizes a visitor pattern to accurately collect required fast fields and term dictionaries for split warmup, improving query execution efficiency and error handling for document parsing.
quickwit/quickwit-doc-mapper/src · high confidence
New gRPC error serialization and standardized accessor methods
The \quickwit-proto\ crate now includes a new error handling module that serializes service errors into a dedicated gRPC header (\qw-error-bin\) for transparent propagation between clients and servers, replacing the previous limitation to standard status codes and messages. Additionally, a new \getters\ module provides standardized, macro-generated accessor methods for key fields (such as \index\_uid\, \doc\_mapping\_uid\, and \pipeline\_uid\) across control plane, indexing, ingest, and metastore API messages, ensuring consistent access to required fields.
quickwit/quickwit-proto/src · high confidence
New index configuration module with v0.9 serialization and ingestion controls
The \quickwit-config\ crate now includes a dedicated \index\_config\ module that centralizes index configuration structures and serialization logic. This introduces a new configuration format version (v0.9) while maintaining backward compatibility with v0.8 and v0.7. For users, this brings explicit configuration options for ingestion, including a new \min\_shards\ parameter to control the minimum number of shards and a \validate\_docs\ flag (defaulting to true) to toggle document validation against the doc mapping during ingestion. The module also handles the serialization of \IndexConfig\ objects, ensuring that updates validate that immutable fields like \index\_id\ and \index\_uri\ remain unchanged.
_quickwit/quickwit-config/src/index\config · high confidence
New indexing error handling and pipeline identification models
The indexing module now defines a dedicated \IndexingError\ enum with specific variants for internal errors, metastore issues, timeouts, and rate limiting, implementing standard gRPC service error interfaces to ensure consistent error reporting. Additionally, new \IndexingPipelineId\ and \MergePipelineId\ structs are introduced to uniquely identify indexing and merge pipelines by node, index, source, and pipeline UID, providing a structured way to track pipeline lifecycle and metrics.
quickwit/quickwit-proto/src/indexing · high confidence
New indexing scheduler with locality-aware scheduling and variable shard load
The indexing scheduler has been replaced with a new implementation that supports locality-aware scheduling (placing shards in the same availability zone as their data when enabled via QW\_ENABLE\_LOCALITY\_AWARE\_SCHEDULING) and variable shard load (controlled by QW\_ENABLE\_VARIABLE\_SHARD\_LOAD). The new scheduler also includes a change tracker for rebuild notifications and integrates with the indexer pool to manage shard assignments more efficiently.
_quickwit/quickwit-control-plane/src/indexing\scheduler · high confidence
New indexing scheduling logic with stability and optimization
The indexing scheduler now uses a new heuristic-based scheduling algorithm to assign shards to indexers, documented in the new \scheduling/README.md\. The logic prioritizes stability by avoiding unnecessary task movement, balancing load across nodes, and respecting availability zone locality to minimize cross-AZ traffic. It includes a four-phase assignment process (removing extraneous shards, enforcing capacity limits, greedy assignment with locality/affinity preferences, and optimization) and a separate optimization pass that improves pipeline density and locality over time, gated by plan stability and a cooldown period to prevent disruptive pipeline resets.
_quickwit/quickwit-control-plane/src/indexing\scheduler/scheduling · high confidence
New optimized list fields implementation with caching and field pattern filtering
The list fields search capability has been replaced with a new, optimized implementation located in \quickwit-search/src/list\fields\. This change introduces a dedicated caching layer (\ListFieldsCache\) to store serialized field metadata, reducing redundant storage reads. It adds support for filtering fields using wildcard patterns (e.g., \prefix\\ or \\*suffix\) via the \FieldPatterns\ module. The new logic enforces a default limit of 10,000 fields to prevent excessive response sizes, retaining the most frequently occurring fields when the limit is exceeded. The implementation splits the operation into root and leaf stages, handling distributed request routing and local field metadata merging with bounded concurrency.
_quickwit/quickwit-search/src/list\fields · high confidence
New quickwit-query crate for Elasticsearch-compatible query parsing and aggregation results
The \quickwit-query\ crate has been introduced to handle query parsing and aggregation result serialization, providing a layer partially compatible with the Elasticsearch/OpenSearch Query DSL. This change adds support for composite aggregations alongside existing bucket and metric types (such as range, histogram, terms, and multi-terms) in the aggregation results. It also introduces stricter validation for floating-point values by rejecting NaN in boost fields via the \NotNaNf32\ type, and enhances user input interpretation to support base16 (hex) decoding for byte fields in addition to base64.
quickwit/quickwit-query/src · high confidence
New source configuration model with versioned serialization and input format support
The source configuration system has been refactored to use a new \SourceConfig\ struct with explicit versioned serialization (supporting config versions 0.7 and 0.9, with 0.8 as an alias). This change introduces support for multiple input formats, including JSON, OTLP logs (JSON and Protobuf), and OTLP traces, allowing users to ingest structured telemetry data directly. The configuration now enforces stricter validation, such as restricting multiple indexing pipelines to only Kafka and GCP PubSub sources, and disabling VRL transforms for OTLP input formats. Additionally, reserved source IDs are defined for CLI ingestion, the ingest API, and native ingest v2, ensuring internal consistency.
_quickwit/quickwit-config/src/source\config · high confidence
Node configuration restructured into dedicated service and protocol config sections
The node configuration schema has been reorganized to improve clarity and modularity. Configuration options are now grouped into specific structs: \RestConfig\ for HTTP/REST settings (including CORS, extra headers, and TLS), \GrpcConfig\ for gRPC settings (including message size limits, TLS, keep-alive, and connection age), \HealthConfig\ for the dedicated health-check server, and \TlsConfig\ for certificate paths and hot-reload intervals. This change introduces new configuration keys under these sections (e.g., \rest.\\, \grpc.\\, \health.\*\) and deprecates or moves previously flat node-level settings into their respective domains.
_quickwit/quickwit-config/src/node\config · high confidence
OTLP telemetry exporters now use a default retry policy and support configurable protocols
The OTLP telemetry exporters in the \quickwit-telemetry-exporters\ crate have been restructured to include a common retry policy (5 retries, exponential backoff up to 30 seconds) for logs, metrics, and traces, improving resilience against transient network failures. Additionally, the exporters now support configurable OTLP protocols (gRPC, HTTP/Protobuf, HTTP/JSON) via environment variables, allowing users to select the transport protocol for each signal type independently.
quickwit/quickwit-telemetry-exporters/src/otlp · high confidence
Optimized compaction planner performance via deferred index creation
This change introduces a new deferred PostgreSQL migration (migration 29) that creates a partial index on the \splits\ table to support the compaction planner. The index, \splits\_maturity\_timestamp\_idx\, is optimized for the planner's specific query pattern—scanning for 'Published' splits that are not yet mature—by using a partial predicate and a composite key on \(maturity\_timestamp, split\_id)\. This allows the database to satisfy the filter and ordering requirements without an extra sort step, improving the efficiency of the opt-in compactor service's merge operations. The migration uses \CREATE INDEX CONCURRENTLY\ to avoid blocking writes during index creation and is executed in a background task after the service is ready, as per the deferred migration strategy.
_quickwit/quickwit-metastore/migrations/postgresql\deferred · high confidence
PostgreSQL metastore schema evolution and metrics support
The PostgreSQL metastore database schema has been updated with migrations 1 through 28 to support new indexing capabilities and metrics-specific data storage. Key changes include expanding \index\_uid\ and \index\_id\ column lengths to 282 and 255 characters respectively, adding a \shards\ table with a \SHARD\_STATE\ enum, and introducing \index\_templates\ for auto-creating indices. The schema now supports split maturity filtering via a \maturity\_timestamp\ column and tracks split size with a generated \split\_size\_bytes\ column. New tables \metrics\_splits\ and \sketch\_splits\ have been added to store low-cardinality tag data and DDSketch metrics with optimized GIN indexes for efficient pruning. Additionally, compaction metadata columns (e.g., \window\_start\, \sort\_fields\) were added to \metrics\_splits\, and various triggers for automatic timestamp updates were removed in favor of helper functions or explicit application logic.
quickwit/quickwit-metastore/migrations/postgresql · high confidence
Quickwit UI interface overhaul with new components and aggregation support
The Quickwit UI has been completely rewritten to provide a modern interface for managing indexes and running queries. This update introduces a new sidebar for navigation (Discover, Admin, API Playground), an index selection autocomplete, and a detailed index summary view that now displays uncompressed document sizes. The query editor now features a dedicated action bar with tabs to switch between Search and Aggregation modes, alongside a new TimeRangeSelect component for filtering by time. Additional UI improvements include an API URL footer for easy copying, a JSON viewer for documents, and better error handling for missing search nodes.
quickwit/quickwit-ui/src/components · high confidence
Redesigned query handling and added code tokenizer
The query processing pipeline has been redesigned to use a schema-agnostic \QueryAST\ (Query Abstract Syntax Tree) that normalizes inputs from the Elasticsearch-compatible API, Quickwit API, and search stream API before applying them to splits. This change introduces a \UserInputQuery\ node that is resolved against the current DocMapper at the root search level to validate field usage (such as range queries on fast fields) before being dispatched to leaf searches, ensuring better error reporting and handling of schema changes across legacy splits. Additionally, a new \CodeTokenizer\ has been added to improve tokenization of code-like text, accompanied by benchmarks comparing its performance against the standard regex tokenizer.
quickwit/quickwit-query · high confidence
Search thread pool now prioritizes result merging over split searches
The thread pool implementation in \quickwit-common\ has been updated to support task prioritization, allowing the search system to ensure that latency-sensitive operations like final result merging are executed before less urgent background work such as split searches. This change introduces a \ThreadPoolWithPriority\ executor that queues tasks and schedules high-priority items ahead of normal-priority ones, improving search responsiveness under load.
_quickwit/quickwit-common/src/thread\pool · high confidence
Standardize build tooling and license compliance configuration
The Quickwit project now enforces standardized Rust formatting and linting rules via new \rustfmt.toml\ and \clippy.toml\ configurations, including disallowing specific \Option\ methods and \Path::exists\. It introduces automated license compliance checks using \cargo-deny\ (configured in \deny.toml\) and \cargo-about\ (generating \dependency-licenses.html\), alongside a \NOTICE\ file and license header template. Build infrastructure is updated with a \Cross.toml\ for cross-compilation support, a \Makefile\ for common tasks, and the Rust toolchain is set to version 1.96.
quickwit · high confidence
Updated cross-compilation Docker images for AArch64 and x86\_64 targets
The build system now uses updated Docker images for cross-compiling to AArch64 and x86\_64 architectures. For GNU targets, the base images have been upgraded to Ubuntu 20.04 (focal) to provide libclang-10, which satisfies the requirements of bindgen \>= 0.72 used by zstd-sys. The toolchains now explicitly use GCC 10 to avoid compiler bugs in GCC 9.4 that affect aws-lc. Additionally, the AArch64 musl image has been updated to build static OpenSSL and zlib, ensuring consistent static linking for musl-based releases.
build · high confidence
Test coverage
Added REST API test suite with YAML-based scenario definitions; Added actor message throughput benchmarks; Added benchmark data for JSON parsing and routing expression evaluation; Added benchmark datasets for indexing performance testing; Added benchmarks for MRecord v1 protobuf encoding; Added end-to-end tests for Quickwit UI navigation; Added failpoint instrumentation for indexing pipeline resilience testing; Added integration tests for index update scenarios; Added mock implementations for testing external UI libraries; Added test assets for TLS certificate hot-reload; Added test infrastructure for GCS TLS certificate regeneration; Expanded metastore test coverage for core APIs; Integration tests for Azure, GCS, and S3 storage backends; New backward compatibility test framework for metastore resources; New cluster sandbox test utilities for integration testing; New integration test crate for Quickwit; New integration test suite for Quickwit cluster services.
Dependencies
Workspace dependency and build configuration overhaul
The Quickwit Rust workspace has been restructured to use a centralized dependency management strategy, with all crate versions defined in the root \Cargo.toml\ and resolved via \Cargo.lock\. This update includes a major version bump of the Rust edition to 2024, sets the workspace version to 0.9.1, and introduces significant dependency upgrades such as \clap\ to v4.6, \hyper\ to v1.9, \tokio\ to v1.40, and \chitchat\ to v0.13.0. Additionally, CI workflows now utilize a pinned \requirements.txt\ for repeatable Python builds, and the \quickwit-cli\ tests have been updated to use a \Pipfile\ for managing AWS CLI local dependencies.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 59 → 60 (+1.6)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.
Lenses
- Code Health 87 → 88 (+0.6)
- Architecture 99 → 93 (-6.0)
- Maturity 91 → 78 (-13.3)
- Readiness 63 → 67 (+3.9)
- Security 42 → 52 (+10.3)
- Domain Modelling 89 → 86 (-2.4)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 71 → 71 (-0.2)
- Performance 60 (new)
Resolved (206)
- ArrowMetricsBatchBuilder::finish (cognitive 21) (quickwit/quickwit-opentelemetry/src/otlp/arrow_metrics.rs)
- ArrowSketchBatchBuilder::finish (cognitive 18) (quickwit/quickwit-parquet-engine/src/ingest/arrow_sketches.rs)
- Change coupling: mod.rs ↔ scheduling_logic_model.rs (quickwit/quickwit-control-plane/src/indexing_scheduler/mod.rs)
- CompactionModel::actions (cognitive 47) (quickwit/quickwit-dst/src/models/time_windowed_compaction.rs)
- CompactionModel::actions (cyclomatic 21) (quickwit/quickwit-dst/src/models/time_windowed_compaction.rs)
- DataModelModel::actions (cognitive 21) (quickwit/quickwit-dst/src/models/parquet_data_model.rs)
- Documentation: no installation or build instructions (README.md)
- Documentation: no project overview (README.md)
- Documentation: written for insiders (docs/internals/adr/gaps/README.md)
- Duplicated block (10 lines × 2) (quickwit/quickwit-dst/src/models/time_windowed_compaction.rs)
- Duplicated block (10 lines × 2) (quickwit/quickwit-indexing/src/actors/indexing_pipeline.rs)
- Duplicated block (10 lines × 2) (quickwit/quickwit-indexing/src/actors/merge_planner.rs)
- Duplicated block (10 lines × 2) (quickwit/quickwit-opentelemetry/src/otlp/logs.rs)
- Duplicated block (10 lines × 2) (quickwit/quickwit-parquet-engine/src/sort_fields/parser.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-doc-mapper/src/query_builder.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-indexing/src/actors/doc_processor.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-indexing/src/actors/indexing_pipeline.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-indexing/src/actors/merge_planner.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-indexing/src/merge_policy/const_write_amplification.rs)
- Duplicated block (11 lines × 2) (quickwit/quickwit-janitor/src/actors/garbage_collector.rs)
- …and 186 more
New (50)
- Coverage not measured — JavaScript/TypeScript suite
- Documentation: contradicts the code (quickwit/quickwit-metastore/migrations/postgresql_deferred/README.md)
- Duplicate intent: Same as above, Mailbox exposes both ask and ask_for_res with identical signatures. This inconsistency propagates from ActorContext.
- Duplicate intent: ask and ask_for_res have identical signatures. The suffix _for_res suggests a specific return type or behavior (perhaps returning a Result directly vs wrapping it), but the signature Result is generic enough to cover both. This creates ambiguity for the caller.
- Duplicate intent: kill and quit appear to perform the same action (terminating the actor) with identical signatures and return types. In actor models, 'kill' usually implies forceful termination while 'quit' might be graceful, but without distinct behavioral documentation or signature differences (e.g., returning a specific error for kill vs success for quit), they are confusingly redundant.
- Duplicate intent: search_index and search_index_cli have identical signatures and likely perform the same CLI execution logic. The _cli suffix is redundant if both are in the CLI module.
- Duplicated block (19 lines × 2) (quickwit/quickwit-indexing/src/actors/indexing_pipeline.rs)
- Duplicated block (6 lines × 2) (quickwit/quickwit-indexing/src/source/kafka_source.rs)
- Duplicated block (8 lines × 2) (quickwit/quickwit-query/src/query_ast/visitor.rs)
- FileTooLong: indexing_scheduler/mod.rs (quickwit/quickwit-control-plane/src/indexing_scheduler/mod.rs)
- FileTooLong: scheduling/mod.rs (quickwit/quickwit-control-plane/src/indexing_scheduler/scheduling/mod.rs)
- High CVE: [GHSA redacted] (quickwit/quickwit-ui/yarn.lock)
- High CVE: [GHSA redacted] (quickwit/quickwit-ui/yarn.lock)
- High CVE: [GHSA redacted] (quickwit/quickwit-ui/yarn.lock)
- Hotspot: quickwit/quickwit-datetime/src/java_date_time_format.rs (quickwit/quickwit-datetime/src/java_date_time_format.rs)
- Inconsistent naming and return types for observation: ActorContext.observe returns ObservableState, while ActorHandle.observe returns Observation. Universe.observe returns ActorObservation. These types likely contain overlapping data (state, type, etc.), but the naming (observe vs observe vs observe) and return types vary by context, making it unclear which method to use for a given level of detail.
- Low CVE: [GHSA redacted] (quickwit/quickwit-ui/yarn.lock)
- Medium vulnerability: RUSTSEC-2026-0285 (quickwit/Cargo.lock)
- Medium vulnerability: RUSTSEC-2026-0310 (quickwit/Cargo.lock)
- Medium: security finding (details withheld)
- …and 30 more
Changes since last survey
- 19 commits — 15 feature/other, 4 fixes
By area
- quickwit/quickwit-control-plane — 3 commits
- quickwit/quickwit-indexing — 3 commits
- quickwit/quickwit-datetime — 2 commits
- quickwit/quickwit-ingest — 2 commits
- quickwit/quickwit-query — 2 commits
- .github/workflows — 1 commit
- quickwit/Cargo.lock — 1 commit
- quickwit/quickwit-common — 1 commit
- quickwit/quickwit-compaction — 1 commit
- quickwit/quickwit-jaeger — 1 commit
- quickwit/quickwit-parquet-engine — 1 commit
- quickwit/quickwit-storage — 1 commit
Notable commits
- fix: fix(Security): Apply patch update 0.9.1 to main (#6821)
- fix: fix(datetime): accept an eight-digit subsecond java date format token (#6804)
- fix: fix(datetime): reject a signed fractional part in a timestamp string (#6767)
- fix: fix(indexing): align sequencer capacity with upload concurrency (#6790)
- change: (Calculated fields) Add calculated-field predicates to QueryAst (#6777)
- change: AZ and decommissioning-aware indexing planning, plus optimizations (#6694)
- change: Add indexers AZ ready gate to indexer candidate pool (#6812)
- change: In memory indexing (#6807)
- change: Remove Parquet code (#6809)
- change: Remove ingest observation stream (#6822)
- change: Rework readiness/liveness; exit on server failures (#6673)
- change: Use generation ID for routing table entries, and react to the ingester pool (#6791)
- change: Use predicate cache for all non-timestamp predicates (#6760)
- change: Write split on source EOF (#6808)
- change: Zonally aware ingest controller (#6795)
- change: chore(CI): Run full tests in the merge queue (#6824)
- change: chore: update Tantivy to latest main (#6815)
- change: improvements to our gcs storage (#6802)
- change: use search priority for cpu scheduling (#6798)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
quickwit-oss/quickwit was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 7b256dd338cc5b9cf850c3c88b46c0bb22d25974 — the exact code this score is about.
- Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-70910855e4b4.