TableAtom
TableAtom is a database workspace built for Visual Studio Code. It brings the
core TablePro workflow into the editor: saved connections, schema navigation,
SQL editing, safe query execution, history, and a fast tabular result viewer.
This repository is an independent VS Code implementation. It does not bundle
TablePro source code, native libraries, plugins, services, or artwork.
Features
- PostgreSQL, MySQL, MariaDB, and SQLite connections
- Passwords stored only in VS Code SecretStorage
- Activity Bar schema explorer for schemas, tables, views, and columns
- SQL execution from the current statement, selection, or full editor
- Query cancellation and configurable connection/network-query timeouts
- Confirmation for destructive statements and unqualified updates/deletes
- SQL formatting and schema-aware completion
- Sortable, filterable, paginated result grid with a full-value inspector
- Copy cell, row, or filtered results as TSV
- Export results as CSV or JSON
- Local query history with duration, result count, and error state; credential-bearing
entries are stored as non-runnable redacted previews
- Active connection and running-query status bar controls
Quick start
- Run
npm install and press F5 to launch the Extension Development Host.
- Open the TableAtom icon in the Activity Bar.
- Choose Add Connection or Import Connection URL.
- Expand the connected database to browse its schema.
- Open a SQL file or choose New Query.
- Press
Ctrl+Enter (Cmd+Enter on macOS) to run the selection or current
statement.
Clicking a table opens its first configured row-limit results. The active
connection can be changed from the TableAtom status bar item.
Supported connections
| Database |
Driver |
Notes |
| PostgreSQL |
pg |
Also works with many PostgreSQL wire-compatible services |
| MySQL |
mysql2 |
TLS and self-signed-certificate modes are available |
| MariaDB |
mysql2 |
Uses the MySQL-compatible protocol |
| SQLite |
sql.js |
Pure WebAssembly; supports existing, new, read-only, and in-memory databases; see the SQLite limitations below |
Connection URLs may use postgres://, postgresql://, mysql://,
mariadb://, sqlite://, or file://. An absolute filesystem path is treated
as SQLite. URL passwords are separated immediately and saved through
SecretStorage; they are never written into the connection profile.
Commands and shortcuts
| Action |
Command |
Windows/Linux |
macOS |
| Run selection/current statement |
TableAtom: Run Query |
Ctrl+Enter |
Cmd+Enter |
| Run the full SQL editor |
TableAtom: Run All Queries |
Ctrl+Shift+Enter |
Cmd+Shift+Enter |
| Cancel active query |
TableAtom: Cancel Query |
Ctrl+Alt+Backspace |
Cmd+Alt+Backspace |
| Explain current query |
TableAtom: Explain Query |
— |
— |
| Format SQL |
TableAtom: Format SQL |
— |
— |
Connection, explorer, and history commands are also available from context
menus and the Command Palette.
Settings
tableatom.query.rowLimit: maximum retained result rows (default 500)
tableatom.query.pageSize: rows per result-grid page (default 100)
tableatom.query.timeoutSeconds: connection and network-query timeout (default 30)
tableatom.query.confirmDestructive: destructive-query confirmation
tableatom.history.maxEntries: locally stored history size (default 500)
tableatom.results.nullLabel: label used for SQL null values
Security and data handling
- Passwords use VS Code SecretStorage and never enter webview state.
- Connection metadata and query history use extension global state.
- SQL text is redacted before history persistence when TableAtom recognizes a
password, token, secret, API key, or credential-bearing URL. Such previews
cannot be rerun from history.
- Result webviews use a restrictive Content Security Policy and render database
values with DOM text nodes rather than HTML.
- Identifiers generated by explorer actions are quoted by the active driver.
- TableAtom sends no telemetry and contacts no TablePro service.
- Workspace Trust is required because the extension opens files and connects to
database servers.
When used through Remote SSH, WSL, or a dev container, TableAtom runs on the
workspace extension host. Network reachability and SQLite paths therefore refer
to that host rather than the local UI machine.
Development
npm install
npm run check
npm run test:integration
npm run package
Useful scripts:
npm run watch bundles the extension on source changes.
npm test runs unit and SQLite integration tests.
npm run test:integration launches VS Code and verifies activation, commands,
formatting, and the bundled SQL.js runtime.
npm run typecheck checks strict TypeScript types.
npm run lint checks the extension and tests.
npm run package creates an installable .vsix.
The extension is bundled into dist/extension.js; the SQL.js WebAssembly file
is copied into dist/ during the build.
Known limitations
- File-backed SQLite uses whole-file SQL.js snapshots, not native SQLite file
locking. Give TableAtom exclusive access to the file and keep backups. It
opens a main-file snapshot read-only when WAL or journal sidecars already
exist, and refuses to overwrite a file changed by another process or one
that gains sidecars while connected. Sidecar changes are not included in
the snapshot.
- SQL.js executes synchronously, so a long-running SQLite statement cannot be
interrupted mid-execution. Cancellation and timeout can stop network-driver
work and connection attempts; cancelling PostgreSQL or MySQL work closes that
connection and TableAtom reconnects on the next query.
- MySQL/MariaDB client-side
DELIMITER directives and multi-statement stored
routine bodies are not parsed as one statement. Select and run compatible
server statements individually.
- Results are materialized in memory. TableAtom applies its configured row cap
to supported result-producing statements, but it is not a streaming client.
- Destructive-query detection is a guardrail, not a SQL security boundary.
Stored procedures, dynamic SQL, and complex predicates can evade heuristics;
review SQL and use least-privilege database accounts.
Scope
TableAtom 0.1 focuses on the everyday database workflow. Native TablePro
features such as SSH tunnels, inline row editing, additional NoSQL drivers,
CloudKit sync, Swift .tableplugin bundles, AI/MCP, ER diagrams, and server
administration are not claimed as compatible and are not included in this
milestone.
Acknowledgement
The product workflow is inspired by
TablePro, an AGPL-3.0 native database
client. See NOTICE.md for the clean implementation boundary.
TableAtom itself is licensed under the MIT License in LICENSE.
Bundled dependency licenses are reproduced in THIRD_PARTY_NOTICES.md.