NDXSQLite
Professional SQLite Library for Free Pascal/Lazarus
Overview
NDXSQLite is a modern, thread-safe SQLite wrapper for Free Pascal and Lazarus. It provides a clean, object-oriented API for database operations with support for advanced features like connection pooling, schema migrations, and transparent encryption via SQLCipher.
Key Features
- Native SQLite API - Direct bindings without SQLDB dependency
- Thread-Safe - Full thread safety with connection pooling
- SQLCipher Support - Transparent AES-256 database encryption
- Schema Migrations - Version-controlled database schema evolution
- Cross-Platform - Linux, Windows, and macOS support
- TDataSet Compatible - Works with Lazarus DB-aware controls
- Comprehensive - 148 working exโฆ
NDXSQLite
Professional SQLite Library for Free Pascal/Lazarus
Overview
NDXSQLite is a modern, thread-safe SQLite wrapper for Free Pascal and Lazarus. It provides a clean, object-oriented API for database operations with support for advanced features like connection pooling, schema migrations, and transparent encryption via SQLCipher.
Key Features
- Native SQLite API - Direct bindings without SQLDB dependency
- Thread-Safe - Full thread safety with connection pooling
- SQLCipher Support - Transparent AES-256 database encryption
- Schema Migrations - Version-controlled database schema evolution
- Cross-Platform - Linux, Windows, and macOS support
- TDataSet Compatible - Works with Lazarus DB-aware controls
- Comprehensive - 148 working examples covering all features
Quick Start
Installation
- Clone or download the repository
- Add the source paths to your project:
-Fu/path/to/src-NDXSQLite/src
-Fu/path/to/src-NDXSQLite/src/core
-Fu/path/to/src-NDXSQLite/src/api
Basic Usage
program QuickDemo;
{$mode objfpc}{$H+}
uses
ndxsqliteconnection, ndxsqliteconnectionoptions;
var
Options: TNDXSQLiteConnectionOptions;
Conn: TNDXSQLiteConnection;
begin
Options := TNDXSQLiteConnectionOptions.Create;
try
Options.DatabasePath := 'myapp.db';
Options.JournalMode := jmWAL;
Conn := TNDXSQLiteConnection.Create(Options);
try
Conn.Open;
// Create table
Conn.ExecuteNonQuery(
'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)');
// Insert with parameters
Conn.ExecuteNonQuery(
'INSERT INTO users (name) VALUES (?)', ['Alice']);
// Query
WriteLn('Total: ', Conn.ExecuteScalar('SELECT COUNT(*) FROM users'));
Conn.Close;
finally
Conn.Free;
end;
finally
Options.Free;
end;
end.
With Encryption (SQLCipher)
Options.DatabasePath := 'secure.db';
Options.EncryptionKey := 'my-secret-key'; // AES-256 encryption
Features
Core
| Feature | Description |
|---|---|
| Connection Management | Auto-close timeout, connection states, action logging |
| Transactions | Deferred, Immediate, Exclusive modes with savepoints |
| Query Execution | ExecuteNonQuery, ExecuteScalar, ExecuteQuery with parameters |
| PRAGMA Support | Journal mode, sync mode, cache size, foreign keys, etc. |
Advanced
| Feature | Description |
|---|---|
| Connection Pool | Thread-safe pooling with statistics |
| Schema Migrations | Version tracking, up/down migrations |
| Online Backup | Progress reporting, integrity verification |
| Incremental BLOB I/O | Stream-based large binary handling |
| Full-Text Search | FTS5 helper functions |
| JSON Support | JSON extraction and manipulation |
| Virtual Tables | Custom virtual table framework |
Platform Support
| Platform | Architecture | Status |
|---|---|---|
| Linux | x86_64, aarch64 | Supported |
| Windows | x86, x64 | Supported |
| macOS | Intel, Apple Silicon | Supported |
| Snap | x86_64 | Supported |
| Flatpak | x86_64 | Supported |
Documentation
| Document | Description |
|---|---|
| Quick Start Guide | Installation and first program |
| API Reference | Complete class and method documentation |
| Changelog | Version history |
| Building | Compilation instructions |
| Table of Contents | Full documentation index |
Examples
The examples/console/ directory contains 148 working examples:
01_BasicConnection - Simple connection and queries
02_Transactions - Transaction handling
08_ConnectionPool - Thread-safe connection pooling
11_BackupRestore - Online database backup
14_Migrations - Schema version control
43_EncryptedDatabase - SQLCipher encryption
148_SQLCipherEncryption - Advanced encryption scenarios
Run an example:
cd examples/console/01_BasicConnection
fpc -Fu../../../src BasicConnection.lpr
./BasicConnection
Requirements
- Compiler: Free Pascal 3.2.0 or later
- IDE: Lazarus 2.0+ (optional)
- SQLite: Automatically detected from system paths
- SQLCipher: Optional, for encryption support
Project Structure
src-NDXSQLite/
โโโ src/ # Source code
โ โโโ core/ # Connection, options, types
โ โโโ api/ # SQLite3 API bindings
โ โโโ advanced/ # Backup, migrations, BLOB, etc.
โ โโโ pool/ # Connection pooling
โ โโโ ...
โโโ tests/ # Test suites
โโโ examples/ # Working examples
โโโ docs/ # Documentation
โโโ .github/workflows/ # CI/CD configuration
Contributing
Contributions are welcome. Please ensure:
- Code compiles without warnings
- Tests pass
- Examples work correctly
- Documentation is updated
License
MIT License - See LICENSE for details.
Author
Nicolas DEOUX
- ๐ง NDXDev@gmail.com
- ๐ผ LinkedIn
- ๐ GitHub
Last updated: January 2026 | SQLite 3.45.0+