QuestDB is a free, open source databases project written in Java and released under Apache-2.0. It has 17,326 GitHub stars, 1,647 forks and 952 open issues, and was last pushed 6 hours ago. On this registry it ranks #35 of 81 tracked projects in Databases, with 5 head-to-head comparisons available. It gained 7 stars over the last 6 tracked days.

QuestDB — High-performance time-series database for massive data scale

What is QuestDB?

What it is

QuestDB open-source time-series database. Java, Apache-2.0, category Infrastructure & Operations / Databases. Lives in open-source database ecosystem for massive data scale, low-latency, real-time analytics.

Project solves problem of ingesting, computing, retaining, querying huge event streams while keeping years history online. It ingests millions events per second, computes on live data in milliseconds, keeps complete record queryable. One SQL engine spans ingestion, stream processing, tiered storage. Topics show fit for capital-markets, market-data, quantitative-finance, historian, kdb, robotics, Apache Arrow, Parquet.

Key capabilities

  • Ingest millions ordered and out-of-order events per second without pre-aggregation. Peak 19M rows/sec per instance over QuestDB Wire Protocol, holds from one thousand to one million series.
  • Compute on live data. Transform, enrich, aggregate events as they arrive. Materialized views aggregate by time slice, many rows in and one row out. Live views run window functions, one row in and one row out, on in-memory tier.
  • Query time-series SQL across live and historical data. SQL uses SAMPLE BY, LATEST ON, ASOF JOIN, WINDOW JOIN, HORIZON JOIN, materialized views, live views, n-dimensional arrays.
  • Store data in memory-mapped, time-partitioned columns. Engine is zero-GC Java with C++ and Rust on hot paths. Queries run across all cores with SIMD and JIT-compiled filters. No third-party dependencies on data path.
  • Stream query results as Apache Arrow over QWP. Measured on QuestDB 10.0: 220M rows/sec with eight readers, first Arrow batch after 32 ms, 500M rows streamed in 2.3 s, client memory flat however large result.
  • Tier storage with parallel write-ahead log, native columnar partitions, Apache Parquet. Open source converts partitions to Parquet with ALTER TABLE, or creates table in Parquet directly. Enterprise converts cold partitions automatically and tiers them to object storage.
  • Keep data open with Parquet, Apache Iceberg, Apache Arrow.

Who uses it and how

  • Capital-markets, market-data, quantitative-finance, historian, and kdb topics indicate time-series workloads needing low-latency ingestion and query.
  • Robotics topics indicate event-stream workloads needing ordered and out-of-order correction, deduplication, live analytics.
  • Users capture events without pre-aggregation, compute live, query historical and live data through one SQL engine.
  • Users retain complete record online in native storage and Parquet, then stream results to Arrow clients.
  • Users start with Docker or Homebrew, or review live demo and quick start guide.

Getting started

Typical start is Docker with image questdb/questdb and ports 9000 and 8812. macOS Apple Silicon users can install with Homebrew, start with brew services start questdb, or use questdb start and questdb stop; Intel Mac users use Docker image.

When to use it — and when not to

Use QuestDB when low-latency time-series SQL, high ingestion, open columnar formats, and Arrow result streaming matter. Avoid it when automatic cold-partition tiering to object storage is required without QuestDB Enterprise, because open source needs manual ALTER TABLE conversion. Use caution on Intel Mac for native libraries, since bundled native libraries are for Apple Silicon only; Docker is mentioned for Intel Mac.

project readme (upstream, from github) — read inline

QuestDB Logo

 

Apache 2.0 license Latest release Docker pulls QuestDB community Slack QuestDB open source contributors

English | 简体中文


QuestDB is the open-source, low-latency time-series database on open formats. It ingests millions of events per second, computes on live data in milliseconds, and keeps years of history queryable. One SQL engine spans ingestion, stream processing, and tiered storage.

The engine is zero-GC Java with C++ and Rust on the hot paths. Data lives in memory-mapped, time-partitioned columns. Queries run across all cores with SIMD and JIT-compiled filters. There are no third-party dependencies on the data path.

Storage is tiered: a parallel write-ahead log, native columnar partitions, and Apache Parquet. In open source you convert partitions to Parquet with ALTER TABLE, or create a table in Parquet directly. QuestDB Enterprise converts cold partitions automatically and tiers them to object storage. Parquet, Apache Iceberg, and Apache Arrow keep the data open to any tool.

Measured on QuestDB 10.0 over QWP:

Source
Peak ingestion per instance 19M rows/sec QWP vs ILP ingestion benchmark
Query results streamed to Arrow 220M rows/sec Streaming 500 million rows into Arrow
500M rows streamed 2.3 s same post
First Arrow batch 32 ms same post

Get started

Use Docker to start quickly:

docker run -p 9000:9000 -p 8812:8812 questdb/questdb

Or macOS users on Apple Silicon can use Homebrew:

brew install questdb
brew services start questdb
questdb start
questdb stop

QuestDB bundles native libraries for Apple Silicon only. On an Intel Mac, use the Docker image above.

For the full walkthrough, start with the quick start guide.

 

QuestDB Web Console - click to launch demo

 

New in QuestDB 10.0: the QuestDB Wire Protocol (QWP), one binary columnar protocol for writes and for Arrow reads, plus native arrays and live views in beta. Release notes.

Ingress and egress over QWP

QWP is a binary columnar protocol over WebSocket. The same connection writes rows in and streams query results back out as columns. The Python client returns those columns as Apache Arrow by default, and Rust and C/C++ can enable it with a flag.

On the way in, the QWP vs ILP ingestion benchmark measures 19M rows/sec over the network, and that peak holds from one thousand to one million series. On the way out, Streaming 500 million rows into Arrow measures 220M rows/sec with eight readers, with the first batch after 32 ms and client memory flat however large the result. The QWP overview covers the protocol design.

What QuestDB does

One engine covers the full lifecycle of the data:

  • Capture. Ingest millions of ordered and out-of-order events per second without pre-aggregation. Deduplication and out-of-order correction are built in.
  • Compute. Transform, enrich, and aggregate events as they arrive. Materialized views aggregate by time slice, many rows in and one row out. Live views run window functions such as indicators, one row in and one row out, on an in-memory tier.
  • Query. Run time-series SQL across live and historical data with predictable low latency.
  • Retain. Keep the complete record online in native storage and Parquet, queried through the same SQL. Enterprise tiers cold partitions to object storage automatically.

The SQL is standard, extended where time series needs it: SAMPLE BY, LATEST ON, ASOF JOIN, WINDOW JOIN, HORIZON JOIN, materialized views, live views, and n-dimensional arrays.

Both queries run on the live demo:

-- 15-minute OHLCV bars for EURUSD, today
SELECT timestamp, symbol,
  first(price) AS open,
  max(price) AS high,
  min(price) AS low,
  last(price) AS close,
  sum(quantity) AS total_volume
FROM fx_trades
WHERE symbol = 'EURUSD'
  AND timestamp IN '$today'
SAMPLE BY 15m;

-- Match each trade to the most recent quote by timestamp
SELECT t.timestamp, t.symbol, t.price, q.bid_price, q.ask_price
FROM fx_trades t
ASOF JOIN core_price q ON (symbol)
WHERE t.timestamp IN '$today';

Where it runs:

A time-series engine takes care of what a general database leaves to you: out-of-order data, deduplication and exactly-once semantics, continuous ingest under concurrent queries, bursty load, and schema changes while streaming.

Try QuestDB, demo and dashboards

The live, public demo runs the latest QuestDB release on sample datasets. Scan more than 2 billion rows in milliseconds:

  • Trades: live crypto trades with 30M+ rows per month (OKX exchange)
  • FX order book: live charts with orderbook FX pairs.
  • Trips: 10 years of NYC taxi trips with 1.6 billion rows

We also have some public, real-time demo dashboards using our Grafana-native plugin:

QuestDB performance vs. other databases

TSBS ingestion at 100,000 hosts with 32 workers on one AWS r8a.8xlarge (32 vCPU, 256 GB RAM). Competitors benchmarked August 2026, QuestDB 9.3.3 on the same instance.

Engine Version Ingestion rate
QuestDB 9.3.3 8.59M rows/sec
ClickHouse 26.7.5.10 1.75M rows/sec
TimescaleDB 2.29.1 1.08M rows/sec
InfluxDB 1.12.4 541K rows/sec

The full comparisons, ingestion and queries:

As always, we encourage you to run your own benchmarks.

AI coding agents

QuestDB works with Claude Code, Codex, Cursor, and any MCP client. There are two ways in.

Run SQL against the database from your agent. Install the QuestDB skill. It teaches the agent QuestDB's SQL dialect and how to inspect a schema. The agent then executes SQL through the [REST API](https://questdb.com/docs/conne

readme truncated — read the full docs on github

Frequently asked questions

Is QuestDB free to use?

QuestDB is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does QuestDB do?

High-performance time-series database for massive data scale

What is QuestDB written in?

QuestDB is primarily written in Java. Its source is publicly available at https://github.com/questdb/questdb, and it has 17,326 GitHub stars.