SQLite Admin is a lightweight, self-hosted PHP interface for browsing and maintaining SQLite databases from a web browser.
Version 1.1.4 fixes insert-row handling, clarifies database filename/path setup, and restores compatibility across PHP 7.0 through PHP 8.3 while retaining the 1.1 security and routing improvements.
SQLite Admin is a powerful database tool. Do not expose it publicly without HTTPS and additional server-level access controls.
- Browse tables and read-only SQLite views
- Insert, edit, and delete rows
- Preserve
NULL, empty strings, numeric values, and BLOB fields correctly - Search all columns and apply per-column filters
- Choose 25, 50, 100, 250, or 500 rows per page
- Bulk delete selected rows
- Undo the five most recent visual-editor actions
- Create, rename, and drop tables
- Add and rename columns
- Run manual SQL queries
- Import tables from CSV or JSON
- Preserve
NULLand BLOB data across SQLite Admin CSV/JSON round trips - Export tables as CSV, JSON, or SQL
- Import, switch, export, and safely remove SQLite database files
- Full-database exports using SQLite's backup API when available, with compatible fallbacks for older PHP versions
- Light and dark themes
- Resizable desktop sidebar
- Responsive browser interface
-
PHP 7.0 through 8.3
PHP 8.x is recommended for production because older PHP 7 releases no longer receive security updates.
-
PHP SQLite3 extension
-
A web server such as Apache or Nginx
-
Write access to the selected database directory
-
HTTPS for any non-local installation
Font Awesome icons are loaded from the cdnjs CDN. Database contents and database operations remain on your server.
- Upload the repository files to your server.
- Open
install.phpin a browser. - Enter the SQLite database filename or server filesystem path, an administrator username, and a password of at least 12 characters.
- Complete the installer, then open
admin.phpand sign in.
The database filename/path field intentionally has no default. Enter a filename such as catalog.sqlite when the database is stored with SQLite Admin, a relative path such as data/catalog.sqlite, or an absolute server filesystem path. Relative paths are resolved from the application directory. The installer creates the directory and database when necessary, verifies SQLite integrity, and writes config.php only after the database is usable.
The installer does not overwrite an existing database. Enter the filename or path to an existing .sqlite, .sqlite3, or .db file to manage it.
SQLite Admin lists other supported database files in the same directory and lets the signed-in administrator switch between them.
SQLite Admin intentionally allows destructive database operations and arbitrary SQL. Treat it like a server administration panel.
- Use HTTPS.
- Place the application behind an IP allowlist, VPN, HTTP authentication, or another access-control layer when possible.
- Keep
config.phpout of source control. - Prefer storing databases outside the public web root.
- If databases remain under the web root, configure the server to deny direct downloads.
- Remove or restrict
install.phpafter installation if your hosting environment allows it. - Back up databases before major changes.
Apache protection files are included. Nginx users should add an equivalent rule, for example:
location ~* /(?:config\.php|data/.*\.(?:sqlite|sqlite3|db)(?:-(?:wal|shm))?)$ {
deny all;
return 404;
}See SECURITY.md for reporting and deployment guidance.
config.php is generated by the installer and ignored by Git. A documented example is available in config.example.php.
Important values:
$dbFile = ''; // Required: SQLite database filesystem path
$username = 'admin';
$passwordHash = '...';
$installed = true;
$debug = false;
$sessionName = 'sqlite_admin';Generate a password hash manually with:
php -r "echo password_hash('replace-this-password', PASSWORD_DEFAULT), PHP_EOL;"php -S 127.0.0.1:8000Then open:
http://127.0.0.1:8000/install.php
The PHP process must have permission to create and modify the configured database directory.
- Back up
config.phpand your database files. - Replace the application files with the new release.
- Keep your existing
config.phpand database directory. - Review
CHANGELOG.mdfor version-specific notes.
No database schema migration is required for SQLite Admin itself.
SQLite Admin uses two explicit conventions when exporting and re-importing table data:
- SQL
NULLis written as\Nin CSV exports. - BLOB values are written as
base64:<encoded data>in CSV and JSON exports.
These conventions are decoded automatically when importing into a column declared as BLOB. A literal text value of \N is escaped in SQLite Admin-generated CSV files.
- The visual editor supports one declared primary-key column. Tables without one use SQLite
rowidwhen available. WITHOUT ROWIDtables without a single primary key are browse-only in the visual editor.- Views are intentionally browse-only; update their underlying tables or use the SQL screen.
- BLOB values are displayed by size and are preserved during visual edits, but binary file editing is not provided.
- The undo history is session-based and limited to five supported visual actions. It is not a substitute for backups.
admin.php Main application
install.php One-time installer
config.example.php Manual configuration example
README.md GitHub documentation
readme.html Browser-friendly documentation
SECURITY.md Security policy and deployment guidance
CHANGELOG.md Release history
LICENSE MIT License
.htaccess Apache protection for sensitive files
data/.htaccess Apache protection for the default data directory
Bug reports and pull requests are welcome. Please avoid including real databases, credentials, or private data in issues and test fixtures.
SQLite Admin is released under the MIT License.
Developed by Abilene Tech Guy.
Report reproducible bugs and request improvements at github.com/abilenetechguy/sqlite-admin. Do not post credentials, private database contents, or exploitable security details in a public issue.
After installation, open admin.php directly, for example:
https://example.com/admin/admin.php
SQLite Admin intentionally does not set a DirectoryIndex. This avoids conflicts with site-level clean-URL rewrite rules that can turn /admin/ into /admin/admin. You may add your own directory-index rule when your hosting configuration supports it.