Databases · Updated 2026-06-06

SQLite vs DuckDB

Both are in-process, zero-config, single-file databases — the difference is the workload. SQLite is a row store tuned for transactional, point-read/write OLTP: app state, mobile, edge, embedded. DuckDB is a columnar, vectorized engine tuned for analytical OLAP: scans, aggregations, joins over large tables, and querying Parquet/CSV in place. They are complements, not rivals: SQLite stores your app’s rows; DuckDB crunches your analytics.

SQLite
The world’s most deployed embedded row-store database.
Since
2000
By
D. Richard Hipp
License
Public domain
www.sqlite.org ↗
DuckDB
An embedded columnar database for analytics ("SQLite for OLAP").
Since
2019
By
CWI / DuckDB Labs
License
MIT
duckdb.org ↗

Same "just a library, just a file" ergonomics, opposite storage models. SQLite reads and writes individual rows fast and is everywhere. DuckDB stores columns and vectorizes execution, so it flies through aggregations and can query data lakes (Parquet) directly. Pick by whether your queries touch a few rows or scan millions.

Quick takes

If you're…

  • You need app/local state with frequent small writes SQLite A row store handles point reads/writes and transactions well.
  • You run heavy aggregations over large tables DuckDB Columnar + vectorized execution dominates analytical scans.
  • You want to query Parquet/CSV files in place DuckDB DuckDB reads Parquet/CSV directly without loading them in.
  • You are on mobile, edge, or embedding in an app SQLite SQLite is the ubiquitous, rock-solid embedded OLTP choice.
  • You want a local analytics engine in a notebook DuckDB DuckDB pairs perfectly with pandas/Polars and notebooks.
Decision wizard

A few questions, a verdict.

Q1

What shape are your queries?

Q2

Where does the data live?

Q3

Context?

At a glance

The scorecard.

Dimension
SQLite
DuckDB
Edge
Row store
Columnar
depends
Transactional
Analytical
depends
Execution features
Row-at-a-time
Vectorized
depends
In-DB only
Reads files in place
DuckDB
Everywhere
Fast-rising
SQLite
OLTP-grade writes
Bulk-load oriented
SQLite
In depth

Dimension by dimension.

core

Storage model

depends
SQLite

Row store (B-tree pages).

DuckDB

Columnar storage with compression.

core

Workload fit

depends
SQLite

OLTP: small reads/writes, transactions.

DuckDB

OLAP: scans, aggregations, joins over big tables.

features

Execution

depends
SQLite

Row-at-a-time; great for point access.

DuckDB

Vectorized, multi-threaded; great for bulk.

features

Querying files

edge: DuckDB
SQLite

Data must live in the SQLite file.

DuckDB

Queries Parquet/CSV/Arrow in place.

ecosystem

Ubiquity & maturity

edge: SQLite
SQLite

Most-deployed database on earth; battle-tested.

DuckDB

Young but rapidly adopted in data tooling.

ops

Write concurrency

edge: SQLite
SQLite

Single-writer; WAL helps concurrent readers.

DuckDB

Analytical focus; not built for many concurrent writers.

When to pick neither

A different shape of problem.

  • You need a full multi-user server database
  • ClickHouse
    You need columnar analytics at server/cluster scale
  • Polars
    You want a fast DataFrame engine rather than SQL
Situational picks

For specific cases.

App, mobile, or edge state

SQLite

SQLite is the proven embedded OLTP store.

Crunching analytics in a notebook or pipeline

DuckDB

DuckDB’s columnar engine makes aggregations fly.

Querying a folder of Parquet files locally

DuckDB

DuckDB reads them in place — no load step.

You need both transactional state and local analytics

Either

Use SQLite for app state and DuckDB for analysis; they coexist happily.

Sources

Primary material.

Found this useful?