kdb+
A columnar time-series database that is also an interpreter for q, an array language, used for market data across trading and risk.
- What it is
- Time-series databases
- Type
- Commercial product
- Made by
- KX (KX Software Limited, majority owned by TA Associates)
- License
- Proprietary, licence key required (free KDB-X Community Edition within limits); the KDB-X Python wrapper is Apache 2.0 apart from its bundled
q.so - Facts checked
- 6 October 2026
What it is
kdb+ is one small binary, about 800 KB, that is both a database and the interpreter for q, an array language descended from APL. A table is a set of columns held as arrays in memory, and q applies each operation to a whole column at once, so analytics run inside the database instead of in a separate stored-procedure language. On disk a table is splayed: a directory with one file per column, mapped into memory rather than loaded, so a query reads only the columns it names. Large tables are also partitioned, usually one splayed directory per day. The classic setup, kdb+tick, is a handful of q processes talking over q’s own IPC protocol: a tickerplant receives the feed, can log it to a file for recovery and publishes it to subscribers; a real-time database (RDB) keeps today’s rows in RAM; and a historical database (HDB) serves past days from disk. Built-in as-of joins (aj) match each trade with the quote in force at that moment.
KX now sells kdb+ as KDB-X, generally available since November 2025: the same engine, backward compatible, plus Python (KDB-X Python, formerly PyKX), SQL, a Parquet module, reads from object storage and a PostgreSQL wire-protocol proxy. Every copy needs a licence key from KX. The Community Edition is free for personal and commercial use with no expiry, within limits: 16 GB of RAM for q, one physical or virtual instance, 4 secondary threads and 16 connections per q process. Above that, KDB-X is priced by memory: on 2026-10-06 the list price was $1,822.92 a month for 32 GiB and $5,468.25 for 64 GiB, with quotes above 128 GiB. KX became majority owned by the private equity firm TA Associates in July 2025 and merged with OneTick, a market data and surveillance vendor, that September.
Why teams pick it
- Fast scans, aggregations and time joins over columns of tick data: as-of joins, bucketing with
xbarand nanosecond timestamps are part of the language - Data and logic live in one process, so calculations run where the data is instead of shipping rows to an application
- A plain on-disk layout: each column is a file, each day a directory, and the only stored metadata besides names is a
.dfile listing column order - Three decades of production use in capital markets, where the tickerplant, RDB and HDB pattern is widely known
- KDB-X Community is free for commercial use within its limits, and Python and SQL interfaces let people start without learning q
Watch out for
- Closed source and licence-keyed: every install needs a key from KX, and use beyond Community limits (16 GB RAM, one instance, 4 threads, 16 connections per process) is priced per GiB of memory, about $1,823 a month for 32 GiB at list price
- q is a terse APL-family language that few developers know; Python and SQL interfaces help, but tuning and the tick processes are still written in q
- Not a self-managing cluster: scaling out means designing and running your own set of tickerplants, RDBs, HDBs and gateways
- The older free licence, kdb+ on demand Personal Edition, is non-commercial only, must reach KX’s servers about once a minute, times out after six months and forbids publishing benchmark results
- The product line is in flux: new features now ship in KDB-X, and the company changed hands in 2025 and merged with OneTick
Alternatives
What all time-series databases have in common →
Amazon TimestreamAWSAWS’s time-series databases: a serverless engine now closed to new customers, and managed InfluxDB 2 and 3.Apache IoTDBOpen sourceAn Apache time-series database for industrial IoT that stores everything in its own open file format, TsFile, and lets you model devices as a tree of paths or as SQL tables.+1 TimechoDBArcOpen sourceA young single-binary time-series database in Go that writes incoming data as Parquet files and queries them with DuckDB SQL.
QuestDBOpen sourceA columnar time-series database in Java, C++ and Rust that ingests millions of rows a second and answers time-series SQL, with old partitions kept as Parquet.
TDengineOpen sourceA clustered time-series database for IoT and industrial data that gives every device its own table, grouped under “supertables” with tags.How it fits with other technologies
Ticks, an as-of join and a date partition through KDB-X Python (PyKX) · python
import pykx as kx # pip install pykx; running q code needs a licence (Community is free)
# two in-memory tables, one array per column
kx.q('trade:([] time:09:30:00.000+asc 1000?23400000; sym:1000?`AAPL`MSFT; price:100+1000?10f; size:100*1+1000?10)')
kx.q('quote:([] time:09:30:00.000+asc 5000?23400000; sym:5000?`AAPL`MSFT; bid:100+5000?10f; ask:100+5000?10f)')
# as-of join: the quote in force when each trade happened
tq = kx.q('aj[`sym`time; trade; quote]')
print(tq.pd().head())
# volume-weighted average price per symbol in 5-minute buckets (qSQL)
vwap = kx.q('select vwap:size wavg price by sym, 5 xbar time.minute from trade')
# write today's trades as a splayed table in a date partition: /data/hdb/2026.10.06/trade/
kx.q('.Q.dpft[`:/data/hdb; 2026.10.06; `sym; `trade]')Editions and licences#
All three run the same engine; they differ in who may use them and how much hardware they may use. Prices are list prices checked on 2026-10-06.
| KDB-X Community | KDB-X commercial | kdb+ on demand Personal (older free licence) | |
|---|---|---|---|
| Price | Free | Priced per GiB of memory: $1,822.92 a month for 32 GiB, $5,468.25 for 64 GiB, quote above 128 GiB | Free |
| Commercial use | Yes | Yes | No: personal, non-commercial use only |
| Hardware limits | 16 GB RAM for q, 4 secondary threads and 16 connections per q process, 24 CPU cores in total | As licensed | 2 computers, up to 24 cores each |
| Where it may run | One physical or virtual instance, on premises or in the cloud | As licensed | Your own computers only, not on a cloud provider |
| Internet and expiry | Works offline; no expiry date | Per contract | Contacts KX about once a minute and exits if it can’t; times out after six months unless extended |
- KX’s licensing page now points free users to KDB-X Community. Splitting work across several Community licences to get around the limits is not allowed.
- The Personal Edition licence also forbids sharing performance reports or benchmarks.
The processes in a kdb+tick system#
A typical deployment is several q processes, each with one job. They call functions on each other over q’s IPC protocol.
Feed handler
Converts an exchange or vendor feed into q messages. Usually written in C, C++, Java or C#.
Tickerplant
Receives the messages, can write them to a log file for recovery, and publishes them to subscribed processes, immediately or in small batches.
Real-time database (RDB)
today, in RAMHolds the current day’s data in memory for sub-millisecond queries. KX’s tick guide suggests RAM of at least four times the expected daily data.
Intraday database (IDB)
optionalWhen memory runs short, recent data is written to disk in small time partitions so the RDB can stay lean.
Historical database (HDB)
past days, on diskDate-partitioned, splayed tables on disk, memory-mapped when queried. At end of day the day’s data is sorted by instrument and then time before it is written.
See it in a real stack
No architecture uses kdb+ yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from1993–2025
Arthur Whitney began building trading systems at Morgan Stanley in 1988, around a terabyte of market data and a pairs-trading desk, using his own version of APL. In 1993 he and Janet Lustgarten founded Kx Systems to sell K, a smaller successor language. He kept rewriting K every few years, and kept storing data by column, which he had done since the 1970s: when you want time, price and size for one stock on one day, you read just those columns.
In 2003 Kx released q and the kdb+ database together. q is K with about 50 table operations added and English keywords instead of symbols, so a database query looks a little like SQL. Banks adopted it for tick data, where a day of trades and quotes fits in memory and years of history sit on disk.
First Derivatives, a Northern Irish firm, took control of Kx in 2014 and agreed in 2018 to buy out the founders’ remaining shares. In July 2025 TA Associates acquired FD Technologies, and KX relaunched kdb+ as KDB-X with Python, SQL and a free commercial Community Edition.
Why it’s built this way
- Store every table by column
- Market data queries touch a few fields across many rows. Whitney said that to get one stock’s activity for a day you need only four columns, so a column store needs four seeks and a few megabytes of reading.
- Keep today in memory, history on disk
- Whitney’s rule was to set things up so “the hot stuff is in memory”. During the day data stays sorted by time; at end of day it is sorted by instrument and then time and written to disk sequentially.
- Make the database and the language one thing
- kdb+ tables are q objects written to the file system and mapped back into memory, so there is no separate stored-procedure language to learn or to move data into.
- English words instead of APL symbols
- q sits on the 2000 implementation of K but adds named table operations and SQL-like
selectexpressions, which made it approachable for database work.
Timeline
- 1993
Arthur Whitney and Janet Lustgarten found Kx Systems to sell K
- 2003
Kx releases q and the kdb+ database
- 2014
First Derivatives takes a controlling stake in Kx
- 2020
kdb+ 4.0 adds multithreaded primitives and data-at-rest encryption
- 2025
TA Associates buys KX in July; KDB-X reaches GA in November
- ACM Queue: A conversation with Arthur Whitney (2009) · archived copy, original
- Q for Mortals: Overview (q and kdb+ released by Kx in 2003, APL lineage)
- Wikipedia: KX Systems (founding in 1993; supplementary)
- FD Technologies: FD to buy out minority Kx Systems shareholders (2018)
- kdb+ 4.0 release notes (production release 2020.03.17)
- TA Associates: KX announces acquisition by TA Associates (July 2025)
Sources20 · facts checked 6 October 2026
- KX: kdb+ product page (binary under 1 MB, RDB, IDB and HDB tiers, memory mapping)
- KX blog: What makes time-series database kdb+ so fast? (~800 KB binary, as-of joins)
- Q for Mortals: Introduction to kdb+ (splayed and partitioned tables)
- KDB-X docs: Realtime database (tickerplant, RDB, log file, RAM sizing)
- KX: KDB-X product page (Community Edition, personal or commercial use)
- KX: Pricing (KDB-X price per GiB, checked 2026-10-06)
- KX: Trial options (Community free indefinitely within licence limits)
- KX: Product usage restrictions (KDB-X Community Edition limits)
- KX docs: Licensing kdb+ (licence key required for all use)
- KX: Kdb+ on demand Personal Edition licence agreement
- KX blog: KDB-X is now generally available (November 2025)
- KX blog: KDB-X GA, built for developers (Community free for commercial and offline use, no expiry)
- KDB-X docs: Object Storage module
- KDB-X docs: Parquet support
- KDB-X docs: pgwire (PostgreSQL wire protocol proxy)
- GitHub: KDB-X Python (PyKX) README and licence
- GitHub: KxSystems/kafka adapter
- GitHub: KxSystems/arrowkdb (Arrow and Parquet integration)
- TA Associates: KX and OneTick merge (September 2025)
- TA Associates: all-cash offer for FD Technologies (May 2025)