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 installand pressF5to 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+Enteron 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 (default500)tableatom.query.pageSize: rows per result-grid page (default100)tableatom.query.timeoutSeconds: connection and network-query timeout (default30)tableatom.query.confirmDestructive: destructive-query confirmationtableatom.history.maxEntries: locally stored history size (default500)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 watchbundles the extension on source changes.npm testruns unit and SQLite integration tests.npm run test:integrationlaunches VS Code and verifies activation, commands, formatting, and the bundled SQL.js runtime.npm run typecheckchecks strict TypeScript types.npm run lintchecks the extension and tests.npm run packagecreates 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
DELIMITERdirectives 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.