Download the PHP package er-dhruvmishra/laravel-sqlite-ffi without Composer
On this page you can find all versions of the php package er-dhruvmishra/laravel-sqlite-ffi. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download er-dhruvmishra/laravel-sqlite-ffi
More information about er-dhruvmishra/laravel-sqlite-ffi
Files in er-dhruvmishra/laravel-sqlite-ffi
Package laravel-sqlite-ffi
Short Description Drop-in SQLite driver for Laravel using PHP FFI — no pdo_sqlite or sqlite3 extension required. Zero code changes needed.
License MIT
Homepage https://github.com/erdhruvmishra/laravel-sqlite-ffi
Informations about the package laravel-sqlite-ffi
Laravel SQLite FFI
A drop-in replacement for Laravel's SQLite database driver with a 3-tier fallback chain. Works even when pdo_sqlite and FFI are both unavailable.
Zero code changes needed — install via Composer and your existing 'driver' => 'sqlite' configuration works immediately.
Why?
Some hosting environments or custom PHP builds don't include the pdo_sqlite extension. This package provides the same SQLite functionality through multiple backends:
| Tier | Backend | Speed | Requires |
|---|---|---|---|
| 1 | Native pdo_sqlite |
Fastest | PHP extension |
| 2 | FFI (libsqlite3) |
Near-native | ext-ffi + ffi.enable=true |
| 3 | sqlite3 CLI binary |
Slower (IPC) | Binary on system or auto-downloaded |
The package auto-detects the best available backend. The CLI tier auto-downloads sqlite3 from sqlite.org on first use if not found on the system.
- Works with Laravel 10, 11, and 12
- Supports migrations, Eloquent, Query Builder, Schema Builder, transactions, cursors
- Cross-platform: Linux, macOS, Windows
- Same behavior as the native driver — your application code doesn't change
Requirements
| Requirement | Details |
|---|---|
| PHP | >= 8.1 |
| Laravel | 10.x / 11.x / 12.x |
| At least one of: | |
| pdo_sqlite | PHP extension (Tier 1, best performance) |
| ext-ffi + libsqlite3 | FFI extension with ffi.enable=true (Tier 2) |
| sqlite3 binary | System binary or auto-downloaded (Tier 3) |
Installation
1. Install the package
Laravel auto-discovers the service provider. No manual registration needed.
2. Use it
No changes to your code or config. The standard Laravel SQLite configuration works as-is:
The package automatically picks the best available backend.
3. Optional: Enable specific backends
For FFI (Tier 2):
For CLI (Tier 3):
How It Works
Backend Priority Configuration
By default, the fallback order is: native → ffi → cli
You can customize this in three ways:
Force a specific backend
In config/database.php:
Or via environment variable:
Custom fallback order
In config/database.php:
Or via environment variable:
Set default priority in code
Check which backend is active
TNTSearch Compatibility
If you use teamtnt/tntsearch, it calls new PDO('sqlite:...') directly which fails without pdo_sqlite. This package includes a drop-in engine replacement:
The TntSearchEngine uses the same 3-tier fallback as the main driver.
Configuration Options
All standard Laravel SQLite config options are supported, plus:
Environment variables
| Variable | Description | Example |
|---|---|---|
SQLITE_BACKEND |
Force a specific backend | ffi |
SQLITE_PRIORITY |
Custom fallback order (comma-separated) | cli,ffi,native |
SQLITE_FFI_LIBRARY_PATH |
Custom path to libsqlite3.so |
/opt/lib/libsqlite3.so |
SQLITE3_BINARY_PATH |
Custom path to sqlite3 binary |
/opt/bin/sqlite3 |
Supported Features
- CRUD — SELECT, INSERT, UPDATE, DELETE with parameter binding
- Transactions — BEGIN, COMMIT, ROLLBACK, savepoints
- Migrations —
php artisan migrateworks normally - Schema Builder — create/alter/drop tables, indexes, foreign keys
- Eloquent ORM — models, relationships, eager loading
- Query Builder — where, join, aggregate, pagination
- Cursors — memory-efficient iteration via generators
- NULL handling — proper NULL value support
- BLOB support — binary data storage
- Foreign key constraints — via
foreign_key_constraintsconfig - WAL mode — via
journal_modeconfig - Busy timeout — via
busy_timeoutconfig
Compatibility
| Feature | Native | FFI | CLI |
|---|---|---|---|
DB::connection('sqlite') |
Yes | Yes | Yes |
Schema::create() / drop() |
Yes | Yes | Yes |
| Query Builder CRUD | Yes | Yes | Yes |
| Eloquent models | Yes | Yes | Yes |
| Transactions + rollback | Yes | Yes | Yes |
php artisan migrate |
Yes | Yes | Yes |
| Multiple connections | Yes | Yes | Yes |
In-memory (:memory:) |
Yes | Yes | Yes |
lastInsertId() |
Yes | Yes | Yes |
| Server-side prepared statements | Yes | Yes | No* |
| TNTSearch indexing | Yes | Yes | Yes |
* CLI tier uses client-side parameter escaping (safe, but slightly different execution model).
Troubleshooting
"No SQLite backend available"
At least one backend must be available. Check:
"FFI API is restricted by ffi.enable"
FFI is loaded but ffi.enable is set to preload (default) instead of true:
Restart PHP-FPM after changing:
"libsqlite3 shared library not found"
Install the SQLite3 library:
"sqlite3 binary not found"
For CLI tier, install sqlite3 or let the package auto-download it:
The package will also auto-download from sqlite.org on first use if the bin/ directory is writable.
License
MIT License. See LICENSE for details.
All versions of laravel-sqlite-ffi with dependencies
illuminate/database Version ^10.0|^11.0|^12.0
illuminate/support Version ^10.0|^11.0|^12.0