SQLite is a self-contained, serverless database engine that stores data in a single file on your system. Unlike MySQL or PostgreSQL, it requires no separate server process, so applications read and write directly to the database file. This guide covers two ways to install SQLite on Debian: through APT for stability or compiled from source for the latest features. Common use cases include storing browser history and bookmarks, caching data in Android and iOS apps, and rapid prototyping during development when a full database server would be overkill. By the end of this guide, you will have SQLite installed and verified with a working test database.
Choose Your SQLite Installation Method
SQLite is available through Debian’s official repositories or compiled directly from source. The table below compares both methods:
| Method | Channel | Version | Updates | Best For |
|---|---|---|---|---|
| APT Package Manager | Debian Repos | Distribution default | Automatic via apt upgrade | Most users who want stable, tested packages |
| Source Compilation | Upstream | Latest release | Manual recompilation | Developers needing newest features |
For most users, the APT method is recommended because it provides automatic security updates and requires no maintenance. Only compile from source if you specifically need SQLite features unavailable in the repository version.
Install SQLite via APT
Update System Packages
Before installing new software, update your package lists and upgrade existing packages to ensure you have the latest security patches:
sudo apt update && sudo apt upgrade
Install SQLite from Debian Repository
Install SQLite using APT (Advanced Package Tool), Debian’s package manager:
sudo apt install sqlite3
Next, verify the installation by checking the SQLite version:
sqlite3 --version
Expected output (version varies by Debian release):
3.40.1 2022-12-28 14:03:47 ...
SQLite versions differ across Debian releases: specifically, Debian 11 includes version 3.34.1, Debian 12 includes 3.40.1, and Debian 13 includes 3.46.1. However, all versions are stable and receive security updates through your distribution.
Install SQLite from Source
Compiling from source provides access to the latest SQLite release with the newest features. However, this method requires additional build tools and manual updates when new versions are released.
Install Build Dependencies
First, install the required build tools, development libraries, curl for fetching version information, and wget for downloading source files:
sudo apt install build-essential libreadline-dev zlib1g-dev curl wget
The
libreadline-devpackage provides command-line editing (arrow keys, history) in the sqlite3 shell, whilezlib1g-devenables compressed database support. Without these packages, SQLite still compiles successfully, but the shell loses important usability features.
Download SQLite Source Code
Next, download the latest SQLite autoconf source archive directly from the official download page:
cd /tmp
curl -s https://www.sqlite.org/download.html | grep -oP '\d{4}/sqlite-autoconf-\d+\.tar\.gz' | head -1 | xargs -I {} wget https://www.sqlite.org/{}
This command automatically fetches the latest version. Here is how it works:
curl -s: Silently fetches the SQLite download page HTMLgrep -oP: Extracts the year and tarball filename using regexhead -1: Takes the first match (latest version)wget: Downloads the tarball using the extracted path
SQLite encodes version numbers in filenames: for example, version 3.51.1 becomes
sqlite-autoconf-3510100.tar.gz(major, minor padded to 2 digits, patch padded to 2 digits, then 00). The automated command always fetches the latest version. If it fails, visit the SQLite download page to get the current filename manually.
Extract and Configure SQLite
Once downloaded, extract the archive and navigate into the source directory:
tar -xzf sqlite-autoconf-*.tar.gz
cd sqlite-autoconf-*/
After that, run the configure script to prepare the build environment:
./configure --prefix=/usr/local
Compile and Install SQLite
Now, compile SQLite using all available CPU cores for faster build times:
make -j$(nproc)
Finally, install SQLite to /usr/local:
sudo make install
Additionally, update the shared library cache so applications can find the new SQLite libraries:
sudo ldconfig
Verify Source Installation
Confirm the source-compiled version is installed:
/usr/local/bin/sqlite3 --version
Expected output:
3.51.1 2025-11-28 17:28:25 ...
The source-compiled version installs to
/usr/local/bin/sqlite3, which typically takes precedence over the APT version at/usr/bin/sqlite3in your PATH. As a result, runningsqlite3 --versionwithout the full path should show the newer version.
Test the SQLite Installation
To verify SQLite works correctly, create a test database, insert data, and run a query. This process confirms both the sqlite3 command-line tool and the database engine function properly.
Create a Test Database and Table
First, open the SQLite shell and create a new database file:
sqlite3 testdb.db
This command opens the SQLite shell and creates testdb.db in your current directory. Next, create a sample table:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
Insert and Query Data
Now, add sample records to the table:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
Afterward, query the data to verify it was stored correctly:
SELECT * FROM users;
1|Alice|alice@example.com 2|Bob|bob@example.com
Finally, exit the SQLite shell:
.exit
Note that SQLite dot-commands like .exit, .tables, and .schema are internal shell commands, not SQL statements. The test database file remains in your current directory, so delete it with rm testdb.db when finished testing.
Update Source-Compiled SQLite
Unlike APT installations that update automatically, source-compiled SQLite requires manual upgrades. To simplify this process, the following script automates the download, compilation, and installation steps.
Create the Update Script
Start by creating a dedicated directory for the script and SQLite source files:
sudo mkdir -p /opt/sqlite-build
sudo chown $USER:$USER /opt/sqlite-build
Then, open a new file for the update script:
nano /opt/sqlite-build/update-sqlite.sh
Add the Script Content
Paste the following script, which checks for build tools, fetches the latest version, compares it to your installed version, and compiles only when an update is available:
#!/bin/bash
set -e
# Configuration
INSTALL_PREFIX="/usr/local"
BUILD_DIR="/opt/sqlite-build"
LOG_FILE="$BUILD_DIR/sqlite-update.log"
# Check for required build tools
for cmd in gcc make curl wget; do
if ! command -v $cmd &> /dev/null; then
echo "Error: $cmd is required but not installed."
exit 1
fi
done
# Get current installed version
CURRENT_VERSION=$($INSTALL_PREFIX/bin/sqlite3 --version 2>/dev/null | awk '{print $1}' || echo "none")
# Fetch latest version from sqlite.org
LATEST_TARBALL=$(curl -s https://www.sqlite.org/download.html | grep -oP '\d{4}/sqlite-autoconf-\d+\.tar\.gz' | head -1)
if [ -z "$LATEST_TARBALL" ]; then
echo "Error: Could not determine latest SQLite version."
exit 1
fi
# Parse version from filename (SQLite uses XYYZZPP format)
VERSION_NUM=$(echo "$LATEST_TARBALL" | grep -oP 'autoconf-\K\d+')
MAJOR=${VERSION_NUM:0:1}
MINOR=$((10#${VERSION_NUM:1:2}))
PATCH=$((10#${VERSION_NUM:3:2}))
LATEST_VERSION="$MAJOR.$MINOR.$PATCH"
echo "Current version: $CURRENT_VERSION"
echo "Latest version: $LATEST_VERSION"
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "SQLite is already up to date."
exit 0
fi
echo "Updating SQLite from $CURRENT_VERSION to $LATEST_VERSION..."
echo "$(date): Starting SQLite update to $LATEST_VERSION" >> "$LOG_FILE"
cd "$BUILD_DIR"
# Clean up previous builds
rm -rf sqlite-autoconf-*/
# Download and extract
wget -q "https://www.sqlite.org/$LATEST_TARBALL"
tar -xzf sqlite-autoconf-*.tar.gz
rm sqlite-autoconf-*.tar.gz
cd sqlite-autoconf-*/
# Configure, compile, and install
./configure --prefix="$INSTALL_PREFIX"
make -j$(nproc)
sudo make install
sudo ldconfig
# Verify installation
NEW_VERSION=$($INSTALL_PREFIX/bin/sqlite3 --version | awk '{print $1}')
echo "$(date): Successfully updated to $NEW_VERSION" >> "$LOG_FILE"
echo "SQLite successfully updated to $NEW_VERSION"
After pasting the script, save the file and make it executable:
chmod +x /opt/sqlite-build/update-sqlite.sh
Run the Update Script
When a new SQLite version is released, run the script to upgrade:
/opt/sqlite-build/update-sqlite.sh
Expected output when already up to date:
Current version: 3.51.1 Latest version: 3.51.1 SQLite is already up to date.
Avoid automating this with cron. Compilation can fail due to missing dependencies, failed tests, or network issues. Therefore, always run the script manually so you can monitor the output and address any problems before they affect your system.
Troubleshoot Common SQLite Issues
Command Not Found After Source Installation
If running sqlite3 after compiling from source produces this error:
bash: sqlite3: command not found
This means your shell cannot locate the binary in /usr/local/bin. To diagnose, first check whether /usr/local/bin is in your PATH:
echo $PATH | tr ':' '\n' | grep local
If nothing appears, you need to add it to your shell configuration:
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
After applying the fix, verify it by checking the sqlite3 location:
which sqlite3
/usr/local/bin/sqlite3
Finally, confirm the version:
sqlite3 --version
Wrong Version Appears After Source Install
If sqlite3 --version shows an older version after compiling from source, this indicates the APT version at /usr/bin/sqlite3 takes precedence over /usr/local/bin/sqlite3.
To diagnose this issue, check which binary runs:
which sqlite3
/usr/bin/sqlite3
If the output shows /usr/bin/sqlite3, this confirms the APT version runs first. To resolve this, either use the full path /usr/local/bin/sqlite3 or ensure /usr/local/bin appears before /usr/bin in your PATH:
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
which sqlite3
/usr/local/bin/sqlite3
Remove SQLite from Debian
If you need to remove SQLite, follow the instructions below that match your installation method.
Remove APT-Installed SQLite
To remove SQLite installed via APT, run these commands to delete the package and any unused dependencies:
sudo apt remove sqlite3
sudo apt autoremove
Next, refresh the package cache and verify removal:
sudo apt update
apt-cache policy sqlite3
sqlite3:
Installed: (none)
Candidate: 3.40.1-2+deb12u2
Version table:
3.40.1-2+deb12u2 500
The Installed: (none) line confirms SQLite is uninstalled. However, the package remains available for reinstallation if needed.
Remove Source-Compiled SQLite
Warning: The following commands permanently delete the source-compiled SQLite installation from
/usr/local. Your database files (.db) in other directories are not affected.
Remove the manually installed SQLite files:
sudo rm -f /usr/local/bin/sqlite3
sudo rm -f /usr/local/lib/libsqlite3*
sudo rm -f /usr/local/include/sqlite3.h /usr/local/include/sqlite3ext.h
sudo rm -f /usr/local/lib/pkgconfig/sqlite3.pc
sudo rm -f /usr/local/share/man/man1/sqlite3.1
sudo ldconfig
If you used the update script, delete the build directory:
rm -rf /opt/sqlite-build
Finally, verify the source-compiled binary is removed:
which sqlite3
If no output appears, then both the APT and source versions are removed. Alternatively, if you still have the APT version installed, you will see:
/usr/bin/sqlite3
This confirms only the source-compiled version at /usr/local/bin/sqlite3 was removed, while the APT-managed version remains.
Conclusion
You now have SQLite installed on Debian with automated version detection for source builds, test database verification, and a reusable update script. As a lightweight database, SQLite integrates directly with applications in Python, PHP, and C without requiring a separate server process. For related database guides, see how to install MariaDB on Debian for a full SQL server, or explore installing Git on Debian for version control in your development projects.