TL;DR
SQLite has been written in standard C since its debut in 2000 and the project maintains that C remains the best fit for a compact, embeddable database library. The maintainers cite performance, cross-language compatibility, minimal runtime dependencies and the long-term stability of C as core reasons, while saying a Rust rewrite remains a theoretical possibility only if several preconditions are met.
What happened
Since its inception on 2000-05-29, SQLite has been implemented in generic C and the project currently has no plans to replace that implementation with another language. The maintainers argue C delivers the performance characteristics needed by a heavily used low-level library, describing it as close to hardware yet portable. They also point to near-universal language and platform ability to call C libraries, and to SQLite’s intentionally small set of runtime requirements — limited standard C routines and, in fuller builds, malloc/free and OS file interfaces. Sections addressing object-oriented languages and newer "safe" languages such as Rust and Go were added after community feedback; the project says object-oriented design can be done in C and that recoding in modern safe languages could introduce more bugs and potential performance and recovery trade-offs. The page was last updated on 2025-05-09.
Why it matters
- C’s wide interoperability lets SQLite be used from almost any programming language and on many platforms.
- A minimal runtime footprint helps SQLite run on constrained and embedded systems where large language runtimes would be impractical.
- Performance and the ability to finely control low-level behavior matter for a heavily used embedded database.
- Long-term language stability reduces the maintenance risk of a critical dependency changing beneath the codebase.
Key facts
- SQLite has been written in generic C since 2000-05-29.
- Primary reasons for using C: performance, compatibility, low dependency footprint and stability.
- In minimal form SQLite relies only on a handful of C library routines (memcmp, memcpy, memmove, memset, strcmp, strlen, strncmp).
- More complete builds also use malloc/free and operating-system file I/O interfaces.
- Object-oriented design is treated as a pattern that can be implemented in C; the project notes cross-language use is harder with C++ or Java libraries.
- Authors argue that newer 'safe' languages (Rust, Go) can add runtime branches, affect branch testing and may abort on out-of-memory conditions, complicating SQLite’s current error-recovery model.
- The maintainers say recoding in Go is unlikely; Rust is identified as a theoretical possibility if multiple conditions are satisfied.
- Sections on object-oriented and safe-language considerations were added in response to Hacker News and Reddit comments.
- The page was last updated on 2025-05-09 15:56:17Z.
What to watch next
- Whether Rust matures further on stability, tooling, cross-language callable libraries, embedded-target support, 100% branch coverage testing and OOM-recovery mechanisms — the project lists these as preconditions for a possible Rust rewrite.
- Developer engagement: the SQLite team invites private discussion from proponents who believe Rust already meets the listed preconditions.
- The project states recoding to Go is unlikely due to language characteristics; future changes to Go would be required for reconsideration — not confirmed in the source.
Quick glossary
- C: A long-established systems programming language known for low-level control, portability and a small runtime footprint.
- SQLite: An embedded SQL database engine designed to be lightweight, self-contained and callable from many programming languages.
- Runtime dependency: External libraries or runtimes that must be present for a program to execute, such as large language runtimes or OS services.
- Object-oriented: A programming design paradigm that models software as interacting objects; it is a pattern that can be implemented in multiple languages.
- Out-of-memory (OOM): A condition where a program cannot allocate required memory; recovery policies vary by language and runtime.
Reader FAQ
Why did SQLite choose C originally?
The project chose C for speed, portability across platforms, minimal runtime dependencies and the language’s long-term stability.
Why not write SQLite in Java or C++?
The maintainers note cross-language and cross-platform compatibility is stronger for C libraries, and when SQLite began those languages were less stable or created portability issues.
Will SQLite be rewritten in a "safe" language like Rust or Go?
Not currently; the team says a Rust recode is a possibility only if several preconditions are met, while a rewrite in Go is deemed unlikely.
Does SQLite require a large runtime to operate?
No — in its minimal build it depends only on a few standard C routines; fuller builds add memory allocation and OS file I/O calls.
Why Is SQLite Coded In C Table Of Contents 1. C Is Best Note: Sections 2.0 and 3.0 of this article were added in response to comments on Hacker News…
Sources
- C Is Best
- Why Is SQLite Coded In C
- SQLite: A Simple Database with Serious Engineering Inside
- SQLite: Past, Present, and Future
Related posts
- Congress reverses most proposed NASA science cuts, leaves Shuttle plan unresolved
- macOS Tahoe icons follow old Apple rule designers were warned against
- How to Feed Birds This Winter: Expert Tips to Attract More Species Safely