SQLite viewer: open .db and .sqlite files in your browser
Drop a SQLite database to see every table with its row count, the CREATE statement behind it, the rows in a grid you can scroll and sort, and a SQL box that can only read. It runs real SQLite (3.49.1, compiled to WebAssembly by sql.js 1.14.2) inside this tab.
The database is opened on your device. It is never uploaded.
What it shows
- Every table and view, each with its exact row count from
SELECT COUNT(*). - The schema: the CREATE statement exactly as SQLite stored it in
sqlite_schema, followed by that table's indexes and triggers. - The rows, loaded 100 at a time as you scroll, so a table with millions of rows opens as fast as a small one. Click a column name to sort (NULLs go last). Click a cell to see its full value. BLOBs show their size in bytes.
- File facts: page size and count, text encoding,
user_version(apps use it for their schema version) and journal mode.
The SQL box can only read
The database is opened with PRAGMA query_only = ON, so SQLite itself refuses any write. On top of that, the box accepts one statement at a time and only SELECT, WITH … SELECT, VALUES, EXPLAIN and reading PRAGMAs such as table_info and integrity_check. The engine works on a copy in memory anyway, so nothing typed here could change the file on your disk.
Queries worth knowing:
SELECT type, name FROM sqlite_schema ORDER BY type, namelists everything, including indexes and triggers.PRAGMA integrity_checkanswers "is this file damaged?". A healthy database saysok.SELECT * FROM pragma_foreign_key_list('books')shows what a table points to.
Files that are SQLite inside
viewhack goes by the file's first 16 bytes, not its extension, so these open too:
- Browser data: Firefox
places.sqlite(history and bookmarks) and Chrome'sHistoryfile, which has no extension. Close the browser first or open a copy: a running browser holds the file open and may not have written its latest changes into it yet. - Photo and study apps: Lightroom Classic catalogs (
.lrcat) and Anki collections (.anki2). - Maps: GeoPackage (
.gpkg) and MBTiles (.mbtiles). Geometry and tile images appear as BLOBs. - Phone app databases pulled from backups or with developer tools. These are often plain SQLite, but check the section below for encrypted ones.
What it cannot open
- Encrypted databases (SQLCipher, used by Signal, and WhatsApp's
.crypt14backups) have no readable header. They show up as unrecognised data, and nothing can open them without the key. - Changes still in a -wal file. If an app was running or crashed, recent writes may sit in
name-walnext to the database. viewhack reads only the one file you choose, so those changes are missing. Closing the app normally folds them in. - FTS5 full-text and R*Tree tables show their schema but not their rows. This SQLite build includes FTS3/FTS4 but not those two extensions.
- Other databases: SQLite 2 files, Microsoft Access (.mdb/.accdb), and MySQL or Postgres dumps, which are SQL text rather than database files.
- Integers above 9,007,199,254,740,991 (253 − 1) are shown rounded, because sql.js hands numbers to JavaScript as doubles. IDs from Twitter-style snowflake generators hit this.
Size limit
Unlike the CSV and Parquet viewers, which read the file piece by piece, SQLite here needs the whole database in memory. The file is read into the tab, then copied into a WebAssembly heap that cannot grow past 2 GB. The page warns above 300 MB. Databases of a few hundred MB usually open on a desktop. On a phone, 100 to 200 MB can already fail. If yours is bigger, the sqlite3 command-line tool opens it without loading it all.