Update, June 21 2026. This post went up at 0.2.1. Since then 0.3.0 and 0.4.0 have shipped, and one claim below is already out of date: result streaming, which I describe as the next thing on the list, now exists. Set PDO::DUCKDB_ATTR_UNBUFFERED and a large SELECT streams row by row instead of buffering. Also new since publication: DuckDB config options on the DSN or through PDO::DUCKDB_ATTR_CONFIG, real per-column types from getColumnMeta(), an appender that accepts PHP arrays for nested columns like LIST, STRUCT, and MAP, GEOMETRY decoding, and duckdbTableNames() / duckdbLastProfile() for query introspection. The walkthrough below is otherwise current. Full list in the changelog. DuckDB is the closest thing the analytics world has to SQLite. It runs in-process, needs no server, reads and writes a single file, and chews through columnar aggregate queries that would make a row-store sweat. PHP has shipped PDO_SQLite in core for twenty years. Until now it had no equivalent for Du...