SQLite support
August 14, 2026 · View on GitHub
sabiql supports browsing, editing, and ad-hoc SQL on existing, regular SQLite database files. It requires sqlite3 version 3.41.1 or later.
Opening a database
Pass a database file path or a sqlite:// DSN:
sabiql /path/to/app.db
sabiql /path/to/History
sabiql sqlite:///path/to/app.db
The sqlite:// form treats everything after the prefix as a raw path and does not percent-decode URI escapes.
Limitations
- Existing file paths only — In-memory databases (
:memory:) and SQLite URI filenames (file:...) are not supported. Opening a path that does not exist does not create a database. - Main database only — Attached and temporary databases are not browsed as separate namespaces.
- Session state is per operation — sabiql starts a new
sqlite3process for each operation. Statements in one SQL modal submission share that process, butTEMPtables/views and connection-localPRAGMAsettings do not carry over to the next SQL execution. Persistent changes to the main database remain available. - Grid editing requires a declared primary key — Regular tables with a declared
PRIMARY KEYsupport grid editing. Tables without a declared primary key, views, and virtual tables remain browsable but are read-only targets in the grid. - Query plans — SQLite shows
EXPLAIN QUERY PLANin the Plan tab. Plan comparison andEXPLAIN ANALYZEare PostgreSQL-only. - No ER diagrams — Graphviz export requires PostgreSQL metadata.
- No JSON tree view — Structured JSON editing is PostgreSQL-only.
Query safety
sabiql accepts SQL-only input in the SQL modal. sqlite3 dot commands are rejected instead of being passed to the underlying client.
Every sqlite3 command runs in safe mode, preventing SQL from accessing files, extensions, or databases outside the selected database file. Operations such as ATTACH and VACUUM are unavailable because they require capabilities disabled by safe mode.
sabiql wraps transactional writes, including persistent PRAGMAs such as user_version, unless the input contains transaction control or a session-side-effect or transaction-incompatible statement such as PRAGMA journal_mode, PRAGMA foreign_keys, or PRAGMA synchronous.