Est. 2000 Beginner

SQLite

A small, fast, self-contained, serverless SQL database engine embedded directly into applications — the most widely deployed database in the world

Created by D. Richard Hipp

Paradigm Declarative; embedded relational database engine with a SQL dialect
Typing Dynamic (flexible/manifest typing via type affinity); values constrained loosely by column affinity rather than strict declared types
First Appeared 2000
Latest Version SQLite 3.53.3 (June 2026)

SQLite is a small, fast, self-contained SQL database engine that runs inside the application that uses it rather than as a separate server process. There is no daemon to install, no network connection to open, no user accounts to configure: a program links the SQLite library, opens an ordinary file on disk, and reads and writes it with standard SQL. That file is the database — tables, indexes, triggers, and views all live together in a single cross-platform file. This “serverless” design, combined with a public-domain license and an obsessive commitment to reliability, has made SQLite the most widely deployed database in the world, running quietly inside web browsers, phones, aircraft, and countless applications that most people never think of as using a database at all.

It is important to be precise about what SQLite is and is not. It is not a rival to client-server systems like PostgreSQL, MySQL, or Oracle for large, high-concurrency, networked workloads. Its own authors describe it not as a replacement for those systems but as a replacement for fopen() — a better way for a single program to store structured data in a file. Understood that way, SQLite has few peers.

History & Origins

SQLite was created by D. Richard Hipp. He designed it in the spring of 2000 while working for General Dynamics on a contract with the United States Navy, developing a damage-control system destined for a guided-missile destroyer. The existing software relied on an Informix database running on a separate server, and that dependency was a liability: when the database server was unavailable, the program stopped working. Hipp wanted a database the program could talk to directly, with no server to start, stop, or administer, that would keep functioning as long as the disk did.

The result was a compact C library that implemented enough of SQL to be genuinely useful while storing everything in a single file. The first public release, SQLite 1.0, appeared on August 17, 2000. From the very beginning Hipp placed the code in the public domain — not merely open source, but explicitly free of copyright — so that anyone could use, modify, or embed it for any purpose without a license or attribution requirement. That decision removed nearly every barrier to adoption and is a large part of why the engine spread so far.

Design Philosophy

SQLite’s design is a study in doing a great deal with very little. A handful of principles run through the whole project:

  • Serverless and zero-configuration. There is no separate server process and no setup step. Applications embed the library and open a file; that is the entire installation and administration story.
  • Self-contained. The library has minimal external dependencies and a small footprint (well under a megabyte with all features enabled), which is why it fits comfortably on phones and embedded devices.
  • A single-file, stable format. An entire database is one file that can be copied, emailed, or moved between 32-bit and 64-bit machines of different byte orders without conversion. The file format is documented and designed for decades of forward and backward compatibility.
  • Transactional and durable. SQLite provides full ACID transactions, so changes either complete entirely or not at all, and committed data survives crashes and power loss.
  • Reliability above features. The project is famous for its test suite, which achieves 100% branch test coverage and includes extensive fault-injection testing that simulates out-of-memory conditions, disk I/O errors, and power failures at every step.

Type System: Manifest Typing

One way SQLite deliberately departs from most SQL databases is its approach to data types. Traditional relational databases use rigid typing: a column declared INTEGER may only ever hold integers. SQLite instead uses manifest typing with type affinity. A value’s type travels with the value itself, and a column has only a preferred type (its affinity) rather than a strict one. In practice this means SQLite will, by default, let you store a string in a column declared INTEGER, converting when it reasonably can and otherwise storing the value as given.

This flexibility is convenient for dynamic and scripting use, though it surprises developers coming from stricter systems. Later versions added STRICT tables (an opt-in mode) for those who want conventional, enforced column types, giving users a choice between flexibility and rigor.

Key Features

Despite its size, SQLite supports a large and modern subset of SQL:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-- A whole database is just this file: app.db
CREATE TABLE tasks (
  id        INTEGER PRIMARY KEY,
  title     TEXT NOT NULL,
  done      INTEGER DEFAULT 0,
  created   TEXT DEFAULT (datetime('now'))
);

INSERT INTO tasks (title) VALUES ('Write SQLite page'), ('Verify the facts');

-- Window functions, available since 3.25.0
SELECT title,
       ROW_NUMBER() OVER (ORDER BY created) AS seq
FROM   tasks
WHERE  done = 0;

Notable capabilities include:

  • Transactions with WAL mode — Write-Ahead Logging (added in 3.7.0) lets multiple readers run concurrently with a single writer, improving throughput for many workloads.
  • Common table expressions and recursive queries — including recursive CTEs for hierarchical and graph-shaped data.
  • Window functions — analytical queries such as ranking and running totals (since 3.25.0).
  • Full-text search — the FTS5 extension provides fast text indexing and search.
  • JSON support — built-in JSON functions for querying and generating JSON, useful for semi-structured data.
  • Generated columns, partial indexes, and triggers — features that let a fair amount of logic live in the database itself.

Evolution

SQLite has evolved through three major generations. Version 1.0 (2000) used the gdbm library for storage. Version 2.0 (2001) replaced that with a custom B-tree engine written for the project. Version 3.0 (2004) introduced a redesigned, more compact file format — with BLOB support, UTF-16 text, 64-bit row identifiers, and better concurrency — and that 3.x format has remained stable and backward-compatible ever since, an unusually long run for any file format.

Within the 3.x line, the engine has grown steadily more capable while preserving compatibility: WAL mode in 3.7.0 (2010), the JSON1 extension and FTS5 full-text search in 3.9.0 (2015), and SQL window functions in 3.25.0 (2018), among many smaller refinements. Development continues at a brisk pace, with the 3.53.x series current as of 2026.

Current Relevance

It is difficult to overstate how ubiquitous SQLite has become. It is embedded in every major web browser, in Android and iOS, in countless desktop and mobile applications, and in embedded systems ranging from cars to consumer electronics. Its combination of a permissive public-domain license, a stable single-file format, and rigorous testing has made it a default choice wherever a program needs to store structured data locally.

That trust has institutional recognition too: the United States Library of Congress lists the SQLite file format among its Recommended Storage Formats for datasets, valuing it for long-term digital preservation. The project’s authors have publicly committed to supporting the format through at least the year 2050, a promise aimed squarely at the archival and embedded users who need multi-decade stability.

Why It Matters

SQLite demonstrated that “a database” does not have to mean a server, a network connection, and an administrator. By collapsing an entire relational engine into a single embeddable library and a single portable file — and by giving that library away with no strings attached — it turned SQL from something you connect to into something you simply include. That reframing quietly changed how enormous numbers of applications store their data. Few pieces of software from the year 2000 are as widely used today, and fewer still are as invisible: SQLite succeeds precisely by being the small, reliable component that billions of devices depend on without anyone noticing.

Timeline

2000
D. Richard Hipp designs SQLite in the spring of 2000 while working for General Dynamics on a contract with the United States Navy, building a damage-control system for a guided-missile destroyer that needed a database engine with no separate server to administer
2000
The first public release, SQLite 1.0, appears on August 17, 2000; the code is dedicated to the public domain from the outset
2001
SQLite 2.0.0 is released on September 28, 2001, replacing the original gdbm backend with a custom B-tree storage layer written specifically for the project
2004
SQLite 3.0.0 is released on June 18, 2004, introducing a new, more compact file format with support for BLOBs, 64-bit ROWIDs, UTF-16 text, manifest typing, and improved concurrency — the foundation of every 3.x release since
2010
SQLite 3.7.0 (July 21, 2010) adds Write-Ahead Logging (WAL) mode, allowing readers and a writer to operate concurrently without blocking each other
2015
SQLite 3.9.0 (October 14, 2015) ships the JSON1 extension for querying JSON data and the FTS5 full-text search module
2018
SQLite 3.25.0 (September 15, 2018) adds SQL window functions, bringing analytical queries such as ROW_NUMBER() and running totals to the embedded engine
2018
The United States Library of Congress lists the SQLite file format among its Recommended Storage Formats for datasets, endorsing it for the long-term preservation of digital content
2026
SQLite 3.53.3 (June 26, 2026) is released as part of the actively maintained 3.x line; the developers have publicly pledged to support the format through at least the year 2050

Notable Uses & Legacy

Web browsers

Google Chrome, Mozilla Firefox, and Apple Safari all use SQLite internally to store browsing history, bookmarks, cookies, and other local state

Mobile operating systems

Both Android and iOS ship SQLite as a core component, and it is the default local data store for apps built on those platforms

Application file formats

Many desktop and mobile applications use a single SQLite database file as their on-disk document format, taking advantage of transactional writes instead of hand-rolled binary formats

Programming language standard libraries

Python bundles SQLite through its built-in sqlite3 module, and many other languages (PHP, Ruby, and others) provide first-class bindings, making it a common zero-setup database for scripts, tests, and small applications

Embedded and IoT devices

Its tiny footprint, lack of a server process, and reliability under power loss make SQLite a popular choice for phones, set-top boxes, cars, appliances, and other embedded systems where administration is impractical

Archival and data interchange

Because a whole database lives in one portable, well-documented file, SQLite is used as a container for datasets and as a Library of Congress recommended format for long-term data preservation

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull keinos/sqlite3:latest

Example usage:

docker run --rm -it keinos/sqlite3:latest sqlite3 :memory: "SELECT sqlite_version();"
Last updated: