Set one up
1
Choose the transport
Create or edit a SQLite connection, open the Network tab, and set Connect via to Remote Database File.
2
Name the server
Fill in SSH Host, SSH Port, and SSH User, then pick an authentication method. Password, private key, SSH agent, keyboard-interactive, jump hosts, and one-time codes all work the way they do for a tunnel, and a saved SSH profile supplies all of it at once.
3
Name the file
Put the database’s path on the server in Path. An absolute path is taken as written. A relative path, or one starting
~, resolves against the SSH account’s home directory.4
Choose how it opens
Set Open to On the Server for live reads and writes, or As a Read-Only Copy to browse a snapshot on this Mac. New connections start on the server.
The connection list shows the origin as
deploy@prod-1:/srv/app.db instead of a local path, so a remote database never reads like one of your own.On the Server
Your statements run on the host, so the sidebar, the grid, the SQL editor and every structure edit act on the live database, alongside whatever else is writing it. Nothing is copied and nothing is installed: TablePro sends a small Python program over the SSH connection, and that program opens the file with the server’s own SQLite. The server needspython3, version 3.6 or newer, with its standard library. Ubuntu, Debian and RHEL cloud images ship it; a stripped container may not. When it is missing, the connection fails with a message that says so, and As a Read-Only Copy is the fallback.
The server’s SQLite is the one that runs the query, so its version sets what the editor and the structure tools can do. A DROP COLUMN needs 3.35, and editing a CHECK constraint through ALTER TABLE needs 3.53; on an older server the statement is refused with the server’s own error. SELECT version() in the editor reports what the server runs.
As a Read-Only Copy
The database is fetched over SFTP, opened from the copy on this Mac, and the original on the server is never written to. The connection runs at Safe Mode Read-Only: editing a cell, running anINSERT, and altering a table are all refused, because an edit would land in the copy and disappear the next time the file was fetched.
Where the server carries sqlite3 3.27 or newer, it is asked for a VACUUM INTO snapshot and that is what comes down. This is the case worth having: the snapshot is taken while other programs keep writing and is still internally consistent. Measured against a database taking 22,518 committed transactions during the copy, the snapshot passed PRAGMA integrity_check.
Otherwise the file is copied directly, along with any -wal or -journal beside it. Those are not optional. A database in WAL mode keeps committed rows in -wal until a checkpoint moves them, so the main file alone is short of the most recent work.
What arrives is checked before anything opens it: the byte count has to match what the server reported, the file has to start like a SQLite database, and it has to pass integrity_check. A transfer cut short by a dropped session leaves an intact header and a plausible prefix, and sqlite3_open on that reports success and shows an empty database.
Reconnecting
Closing a connection ends the server session, or leaves the copy on disk. Opening it again reconnects, or compares the file on the server against what was fetched and reuses the copy when neither its size, its modification time, nor its write-ahead log has moved. The health check watches a live server session and reconnects it after a dropped connection, the same way an SSH tunnel recovers.Limitations
No remote file browser. Type the path. SQLite only. DuckDB and libSQL open local files too, but their recovery-log naming and their local-versus-remote modes need handling this does not yet have. Two connections naming one remote file each open their own session or copy. Two copies of TablePro on two Macs cannot see each other; the server’s own locking keeps their writes apart.Related
- SSH Tunneling for reaching a database server rather than a file
- SSH Profiles for reusing one bastion across connections
- SQLite

