Inspect SQLite 3 files in read-only mode
Select one standard SQLite 3 Main DB and inspect Tables, Schema, and Rows in Browser Memory. DB Binaries and displayed content are not sent to or stored on the DevelopTools Server.
Open SQLite DB files in the browserConclusion: Determine file format and tool support before opening it
Load one copy of the original file and inspect the SQLite 3 header, table count, view count, schema, and rows. Supported files are standard SQLite 3; this is not a tool for opening every `.db` file or server-type DB.
WAL Sidecar, SQLCipher, and corruption repair are unsupported. Only information available from the Main DB alone is displayed.
Check with a minimal example
example.db
SQLite format 3\0
├─ users
├─ orders
└─ user_summary (view)
After the header matches, read the table and view list, select the target object, and proceed to schema and rows.
Fastest steps to open a SQLite DB
- Prepare a copy for investigation
- Select or drop a file
- Check successful loading and the number of tables and views.
- View column definitions in the Schema Tab.
- Search, sort, and paginate in the Data tab
Check the SQLite 3 file header rather than the extension
Offset 0, 16 bytes
SQLite format 3\0
Hex
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00
`.db` is a generic extension. The current viewer checks the first 16 bytes rather than the file name and passes only files matching the standard SQLite 3 header to sql.js. It does not open 0-byte files, text files renamed to `.db`, or encrypted files whose headers are not plaintext as standard SQLite.
| File | judgment | Next check |
|---|---|---|
| SQLite format 3 Header present | Standard SQLite 3 candidates | Open with the engine and read the schema |
| No header | Possibilities such as non-SQLite format, encryption, or corruption | Check the source, format, and encryption |
| dump.sql | SQL Text Script | Check as Text with SQL Formatter or similar tools. |
| MySQL/PostgreSQL Backup | A format other than SQLite | Use the tool for the supported database product |
Check Table, Schema, and Rows in sequence
- After loading a file, check the file name, file size, number of tables, and number of views.
- Select a table or view on the left, then first use the Schema tab to inspect column names, declared types, NOT NULL, defaults, primary keys, and CREATE SQL.
- Use full-column search, column-header sorting, and paging from 25 to 200 rows in the Data tab, displaying only the rows needed.
- To examine indexes and foreign keys, individually run PRAGMA index_list(table), PRAGMA index_info(index), and PRAGMA foreign_key_list(table) in the read-only SQL field.
- To examine indexes, triggers, and views together, SELECT from sqlite_schema. Do not state that a dedicated object tree exists.
SELECT type, name, tbl_name, sql
FROM sqlite_schema
WHERE type IN ('table', 'index', 'view', 'trigger')
ORDER BY type, name;
Table names, column names, and values are rendered as Text on the screen. Even if `<script>` is included as a Database Value, it is not executed as HTML.
Consider the WAL Mode Main DB, -wal, and -shm separately
In WAL Mode, uncheckpointed changes may remain in `app.db-wal`. `-wal` may be part of the Database State, not an old Backup. `-shm` is the Shared-memory File for the WAL Index. Copying only the Main DB from a running Application may make the latest Rows unavailable or result in an inconsistent Snapshot.
app.db Main database
app.db-wal Write-ahead log
app.db-shm Shared-memory / WAL index
- The current viewer loads only one main DB and does not apply -wal or -shm.
- The viewer does not restore missing rows or merge -wal into the main DB.
- Safely stop the source application, or create a consistent copy using SQLite's backup mechanism.
- We do not provide instructions for deleting -wal alone. Preserve the original file and verify the originating system's operation.
Do not confuse declared types, storage classes, and BLOBs
| Storage Class | meaning | How it appears in the current viewer |
|---|---|---|
| NULL | value does not exist | Explicitly indicate NULL. |
| INTEGER | Signed Integer | Display as a numeric string |
| REAL | Floating-point Number | Display as a numeric string |
| TEXT | Text in database encoding | Display as Text |
| BLOB | Input binary data | Display only the length as [BLOB n bytes]. |
| Value state | SQL example | How it appears in the current viewer |
|---|---|---|
| NULL | NULL | Explicitly indicate NULL. No value exists. |
| Empty string | '' | An empty TEXT cell. This is different from NULL. |
| 0byte BLOB | X'' | [BLOB 0 bytes]. This is different from NULL. |
| BLOB with contents | X'89504E47' | [BLOB 4 bytes]. Display only the binary length. |
The “type” in the Schema Tab is the Declared Type. The current Viewer does not display `typeof(value)` or Affinity for each Value, so explicitly use `typeof(column)` in Read-only SQL when the Actual Storage Class is needed. Empty strings, NULL, and 0-byte BLOBs are not the same kind of “empty.” There are also no dedicated Boolean or Date Storage Classes; interpret values such as 0/1, TEXT, Unix Timestamp, and Julian Day from the Schema and Application specification.
SELECT
value,
typeof(value) AS storage_class,
length(value) AS value_length,
quote(value) AS sql_literal
FROM sample
LIMIT 100;
Do not conclude a BLOB is garbled TEXT. The current viewer shows only byte length and does not identify images, generate hex dumps, or download data.
What you can check with the current SQL DB file viewer
| Category | Features | Current boundary |
|---|---|---|
| Input | Select one .db, .sqlite, or .sqlite3 file, or drag and drop it. | SQL Scripts, server-type DBs, multiple Files, and URL retrieval are not supported. |
| Format detection | Check for SQLite format 3\0 in the first 16 bytes | Header fields such as Page Size and Text Encoding are not displayed separately. |
| Engine | Load into Memory using sql.js and WebAssembly placed within the site. | SQLCipher, DuckDB, Access, and MySQL/PostgreSQL Data Files are not supported. |
| Object | List and search User Tables and Views by name | There is no dedicated list for indexes and triggers. If needed, inspect sqlite_schema with read-only SQL |
| Schema | Column names, Declared Type, NOT NULL, Default, Primary Key from PRAGMA table_info, and CREATE SQL | There are no dedicated Tabs for Type Affinity, Actual Storage Class, or Foreign Key / Index |
| Rows | Search all columns, database-side sorting, pagination of 25, 50, 100, or 200 rows, and column width adjustment | Column filtering, virtual scrolling, and export are not supported |
| Values | Display NULL as NULL, empty strings as blank, and BLOBs as [BLOB n bytes] with their Byte Length. | Hex, image preview, BLOB download, and actual typeof display are unsupported |
| SQL | SELECT, WITH, EXPLAIN, permitted Read-only PRAGMA, and a maximum of 1,000 result rows | INSERT, UPDATE, DELETE, DROP, ALTER, quick_check, and integrity_check cannot be executed |
| Sidecar | Load only the main SQLite file | Simultaneous loading or merging of -wal and -shm is not supported. |
Do not conclusively identify causes based on features absent from the screen. The current viewer cannot apply WAL, decrypt data, repair corruption, preview BLOBs, or perform integrity checks.
Boundaries of Read-only, Browser processing, and Privacy
File binary, file names, tables, columns, rows, BLOBs, search terms, and SQL queries are processed in browser memory, and the viewer itself has no fetch, sendBeacon, or localStorage persistence. sql.js JavaScript and WASM are also loaded from the same origin within the site. Database content is not restored after reloading the page.
Set `PRAGMA query_only = ON` immediately after opening a database, and allow only SELECT, WITH, EXPLAIN, and limited PRAGMA statements in the UI. However, avoid claiming that there is absolutely no network traffic, including browser, extension, site-wide advertising or analytics, and organizational networks. Databases may contain tokens, sessions, and personal information, so prioritize organizational policy.
The Viewer does not repair, update, or Export the original File. Use a Copy for investigation and preserve the original File.
For large databases, measure file loading, queries, and DOM rendering separately
sql.js loads a Database File as a Uint8Array into Browser Memory and also handles it in WebAssembly. Screen Paging adds LIMIT/OFFSET to SELECT to limit DOM rows, but it does not stream-read the entire File. Even without a fixed File Size limit in the UI, Browser, device Memory, and WASM have practical limits.
- Open copies of the original file starting with small sizes such as 1 MB and 10 MB, and measure load time and memory.
- First inspect only tables and schemas, then page data in 25–200 rows.
- Searching all columns casts each column to TEXT and uses LIKE, which can be costly for large tables.
- Column sorting and read-only SQL are executed by SQLite. Check the indexes, query plan, and data types.
- Do not state that files of several GB or millions of rows will always open comfortably.
Troubleshooting when it cannot be opened or appears corrupted
| Symptom | Main candidates | What the current viewer can do |
|---|---|---|
| Not SQLite 3 format | Different format, encryption, 0-byte file, or damaged header | Up to rejection by magic header |
| file is not a database | Different format, SQLCipher, wrong file, or corruption | Check the source and header. Do not decrypt it |
| database disk image is malformed | Corruption of pages, B-trees, or similar structures | Do not repair automatically. Inspect the copy in an external SQLite environment |
| The latest row is missing | WAL not applied, inconsistent Copy, different File | Display only the contents of the main database |
| database is locked | Running processes, transactions, and retrieval methods | The Memory Copy viewer itself does not operate the original file lock |
| Appears blank | Empty string, NULL, and 0-byte BLOB | Display NULL and BLOB explicitly, and distinguish them from empty strings. |
| Cannot read BLOB | Binary Data | Display byte length |
The current UI does not allow `PRAGMA quick_check` or `PRAGMA integrity_check`. If corruption is suspected, do not write to the original file; make a copy and inspect it in a managed environment such as the official SQLite CLI. Output repair results to a separate file and retain the original.
Proceed to the next check in DevelopTools
- Check tables exported to CSV with the CSV / TSV Viewer
- Format CREATE TABLE and SELECT with SQL Formatter
- Check INTEGER dates with the Unix Timestamp Converter
- Verify hash equality for DB files
- Compare Schema SQL as text differences.
Viewing CSV data, formatting SQL text, converting Unix time, comparing binary equality, and diffing schema text serve different purposes. This does not claim to compare SQLite database contents or perform backup or repair.
Check primary SQLite, sql.js, and SQLCipher sources.
- SQLite: Database File Format
- SQLite: The Schema Table
- SQLite: Datatypes In SQLite
- SQLite: Date And Time Functions
- SQLite: Write-Ahead Logging
- SQLite: PRAGMA Statements
- SQLite: How To Corrupt An SQLite Database File
- sql.js: SQLite compiled to JavaScript
- Zetetic: About SQLCipher
Prioritize official SQLite documentation for database headers, schema tables, storage classes, WAL, and PRAGMA; official sql.js documentation for the browser engine actually in use; and the SQLCipher provider's documentation for encrypted databases. Use community articles only to supplement search intent and practical examples.
Summary
- Check the SQLite format 3 Header.
- Review in the order of Table, Schema, and Rows
- Treat it as read-only in browser memory without changing the original file
Check file signature, schema, rows, sidecars, and storage classes in order, and treat standard SQLite viewing, encryption, corruption, backup, and repair as separate tasks to avoid speculative file operations.
Example: Check how to open an SQLite .db file and view its contents
Without overwriting the original file, create an investigation copy and inspect: "example.db / SQLite format 3\0 / ├─ users / ├─ orders / └─ user_summary (view)".
After the header matches, read the table and view list, select the target object, and proceed to schema and rows. Compare the viewer result with the source application and the official SQLite specification to determine the cause.
- Record the source, File name, File Size, acquisition date and time, and whether same-named -wal and -shm files exist.
- Preserve the original File and load one Copy of the standard SQLite 3 Main DB.
- First check the Table/View count, Schema, CREATE SQL, NULL, and BLOB.
- Open data with a small page size first, then use search, sorting, and read-only SQL only as needed.
- Separate encryption, corruption, WAL, and large-capacity issues from unsupported viewer scenarios before deciding the next work.
Do not perform Repair or deletion based only on Viewer results. Preserve the original File and Sidecar, and perform changes on a separate Copy in a managed SQLite environment.
Frequently asked questions
- Can all .db files be opened?
- Cannot open. The current Viewer supports only standard SQLite 3 files with a SQLite format 3 header at the beginning. SQLCipher, Access, DuckDB, MySQL/PostgreSQL data files, and proprietary Formats are not supported.
- Can -wal and -shm also be loaded together?
- It cannot be loaded. Only one Main DB is handled. For a Database in WAL Mode, safely stop the source or prepare a consistent Snapshot using SQLite's Backup mechanism.
- Can the database be repaired or BLOBs saved as images?
- No. quick_check, integrity_check, automatic Repair, and BLOB Preview, Hex, and Download are unsupported. BLOBs display only Byte Length.