Exciting SQLite Improvements Since 2020

We are Airsequel, a platform that hosts SQLite databases and automatically generates a GraphQL API, a spreadsheet UI, an SQL workbench, and a dashboard builder for each database. While working extensively with SQLite, we discovered that many of its great features were added only recently.
Despite its widespread usage, there is a common misconception that SQLite is a stagnant or outdated technology. Often overshadowed by newer and flashier database management systems, many overlook the continued innovation and evolution of SQLite. Granted, SQLite has been around for more than 20 years, but this just shows what a robust and valuable database it is. And as you can see in following chart, the development velocity hasnโt slowed down a bit:
(Check out my blog post for a tutorial on how to create this bar chart.)
So let's take a look at some of the exciting improvements and refinements that SQLite has seen since 2020. This list focuses on changes related to the supported SQL instructions and the CLI.
- Version 3.31 (2020-01-22)
- Added support for generated columns.
- Added the
#-Narray notation for JSON function path arguments. - New flags
SQLITE_INNOCUOUSandSQLITE_DIRECTONLYfor application-defined SQL functions. - Added the uuid.c extension for processing UUIDs.
- Version 3.32 (2020-05-22)
- Added the
iif() SQL function. - Added options to the
.importcommand:--csv,--ascii,--skip.
- Added the
- Version 3.33 (2020-08-14)
- Support for
UPDATE FROM. - Increase the maximum size of database files to 281 TB.
- Added the decimal extension
to the CLI for doing arbitrary-precision decimal arithmetic. - Added four new output modes:
box,json,markdown, andtable
- Support for
- Version 3.34 (2020-12-01)
- Added options
--data-onlyand--nosysto the.dumpdot-command. - Added the
generate_series(START,END,STEP)function to the CLI. - Added the
--tabscommand-line option that sets.mode tabs.
- Added options
- Version 3.35 (2021-03-12)
- Added built-in SQL math functions().
- Support for
ALTER TABLE DROP COLUMN. - Support
RETURNINGclause onDELETE,INSERT, andUPDATEstatements. MATERIALIZEDandNOT MATERIALIZEDhints for common table expressions (CTEs).
- Version 3.36 (2021-06-18)
REGEXPextension is now included in CLI
- Version 3.37 (2021-11-27)
STRICTtables- Added
PRAGMA table_liststatement .connectioncommand, allowing the CLI to keep multiple database connections open.- CLI option
--safedisables dot-commands and SQL statements that might cause side-effects.
- Version 3.38 (2022-02-22)
- Full JSON support via built-in functions
->and->>operators
- Added the unixepoch() function.
- Added the auto modifier and the julianday modifier.
- Full JSON support via built-in functions
- Version 3.39 (2022-06-25)
- Support for
RIGHTandFULL OUTER JOIN.
- Support for
- Version 3.40 (2022-11-16)
- Support for compiling SQLite to WASM and running it in web browsers.
- Added the recovery extension to recover content from corrupt databases.
- Version 3.41 (2023-02-21)
Added function
unhex()Added
base64()andbase85()functions in the CLIEnhancements to
PRAGMA integrity_check
There were also tons of improvements made to the query planner to enhance performance and robustness. However, these improvements are beyond the scope of this post.
For a full list of all changes, please check out the official release history page.
This list should make it clear that SQLite is still as relevant as ever. Personally, it's now my database of choice for most projects. While it may not have all the bells and whistles of, for example, Postgres, the truth is that I mostly don't need them anyway. The ease of deployment, the ability to copy, move, and edit it like any other file, and the high performance more than make up for it.