Open-source, cross-platform desktop database client
Browse, query, and manage your databases from one native application.
Features • Installation • Development • Architecture
Most database GUIs are either bloated, expensive, or locked to a single engine. Tablio is a free, lightweight, native desktop application that connects to PostgreSQL, MySQL, MariaDB, SQL Server, CockroachDB, TiDB, SQLite, and Cassandra/ScyllaDB through a single unified interface. Built with Rust and React for speed and reliability.
Connect to PostgreSQL, MySQL, MariaDB, SQL Server, CockroachDB, TiDB, SQLite, and Cassandra/ScyllaDB from one application. Each database has a dedicated driver with engine-specific optimizations. Save, organize, and color-code your connections. Supports SSL/TLS with configurable certificate validation and SSH tunnels with password / identity-file / agent auth, host-key fingerprint confirmation, persistent known-hosts, and ~/.ssh/config import.
- Paginated, sortable, and filterable data grid powered by AG Grid
- Edit cells inline with change tracking and single-transaction commits
- In-grid search with match navigation between results
- Show, hide, and reorder columns with persisted preferences
- Row detail view for tables with many columns
- Primary key and foreign key badges on column headers
- Monaco-powered editor with syntax highlighting and table/column autocompletion
- Execute queries and view results in a resizable split pane
- Built-in SQL formatter, query history with pinning, and saved queries
- Visual query execution plan viewer
- Chart mode for visualizing query results as bar, line, pie, or scatter charts
- Lazy-loaded object tree: databases, schemas, tables, views, and functions
- Create and alter tables through dialogs
- View DDL for any database object
- Drop and truncate with confirmation
- Table structure and storage statistics
- Live activity dashboard with active sessions, locks, and server configuration
- Per-query performance statistics for PostgreSQL (
pg_stat_statements), MySQL/MariaDB (performance_schema), SQL Server (sys.dm_exec_query_stats), and TiDB (INFORMATION_SCHEMA.STATEMENTS_SUMMARY), with engine-specific setup guidance when the source view is unavailable - Role management: create, alter, and drop database roles
- Application resource usage in the status bar
- Export to CSV, JSON, SQL INSERT statements, or Excel (
.xlsx) with native type fidelity (numbers, booleans, and ISO-8601 datetimes round-trip) - Import from CSV and Excel (
.xlsx,.xls) with multi-sheet picker, per-column type inference, and column mapping - Backup and restore databases with cross-connection support
- Uses native tools (pg_dump, mysqldump) when available
- Entity-relationship diagram viewer with pan, zoom, and search
- Chart view for turning SELECT results into visualizations
- JSON column viewer and editor with structured tree navigation
- Light and dark themes with zoom control
- Tabbed interface for working with multiple tables and queries side by side
curl -fsSL https://tablio.dasunnimantha.com/install.sh | bashAutomatically detects your distro and installs via APT (Debian/Ubuntu), RPM (Fedora/RHEL/SUSE), or AppImage (other).
Grab the latest build from Releases:
| Platform | Formats |
|---|---|
| Linux | .deb, .rpm, .AppImage |
| macOS | .dmg (Intel and Apple Silicon) |
| Windows | .msi, .exe |
# Import the signing key
curl -fsSL https://dasunnimantha.github.io/tablio/apt/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/tablio.gpg
# Add the repository
echo "deb [signed-by=/usr/share/keyrings/tablio.gpg] https://dasunnimantha.github.io/tablio/apt stable main" \
| sudo tee /etc/apt/sources.list.d/tablio.list
# Install
sudo apt update && sudo apt install tablioUpdates are delivered through apt upgrade with each new release.
# Import the signing key
sudo rpm --import https://dasunnimantha.github.io/tablio/rpm/key.gpg
# Add the repository
sudo curl -fsSL -o /etc/yum.repos.d/tablio.repo https://dasunnimantha.github.io/tablio/rpm/tablio.repo
# Install
sudo dnf install tablioUpdates are delivered through dnf upgrade tablio with each new release.
Prerequisites:
sudo apt install libwebkit2gtk-4.1-dev libsoup-3.0-dev \
libjavascriptcoregtk-4.1-dev librsvg2-devgit clone --single-branch --branch master https://github.com/dasunNimantha/tablio.git
cd tablio
npm install
npm run tauri buildNote: Always clone (or fork) with
--single-branch --branch master. Thegh-pagesbranch hosts the APT/RPM repositories and contains every released.deband.rpmbinary, so a default full clone pulls hundreds of megabytes of package history that you don't need to build the app.
npm install
npm run tauri devStarts both the Vite dev server and the Tauri Rust backend with hot-reload.
# Frontend
npm test
# Backend (SQLite tests run locally; others need running instances)
cd src-tauri && cargo test
# With real databases
TEST_POSTGRES_URL="postgres://user:pass@localhost/testdb" \
TEST_MYSQL_URL="mysql://user:pass@localhost/testdb" \
TEST_MARIADB_URL="mysql://user:pass@localhost:3307/testdb" \
TEST_COCKROACHDB_URL="postgres://root@localhost:26257/testdb?sslmode=disable" \
TEST_TIDB_URL="mysql://root@localhost:4000/testdb" \
TEST_MSSQL_URL="mssql://sa:Password@localhost:1433/testdb" \
TEST_CASSANDRA_HOST="127.0.0.1" TEST_CASSANDRA_PORT="9042" \
cargo testtablio/
├── src/ # React + TypeScript frontend
│ ├── components/ # DataGrid, QueryConsole, ERD, Sidebar
│ ├── stores/ # Zustand state (tabs, connections)
│ └── lib/ # Themes, Tauri IPC bridge, utilities
├── src-tauri/
│ ├── src/
│ │ ├── db/ # DatabaseDriver trait + dedicated drivers per engine
│ │ │ ├── postgres.rs, cockroachdb.rs, pg_common.rs
│ │ │ ├── mysql.rs, mariadb.rs, tidb.rs, mysql_common.rs
│ │ │ ├── mssql.rs
│ │ │ ├── cassandra.rs
│ │ │ └── sqlite.rs
│ │ ├── commands/ # Tauri IPC command handlers
│ │ └── lib.rs # Command registration
│ └── tests/ # Integration tests per database engine
└── .github/workflows/ # CI and release pipeline
| Layer | Stack |
|---|---|
| Backend | Rust, sqlx, tiberius, scylla, russh, rust_xlsxwriter, calamine, Tokio, Tauri 2 |
| Frontend | React, TypeScript, AG Grid, Monaco Editor, Chart.js |
| State | Zustand with localStorage persistence |
| IPC | Tauri invoke commands |
| Build | Vite, cargo, GitHub Actions |
Tablio uses sqlx connection pools for PostgreSQL, CockroachDB, MySQL, MariaDB, TiDB, and SQLite. MSSQL uses a single tiberius client connection.
| Setting | Value | Rationale |
|---|---|---|
| Max connections | 4 | Sufficient for a single-user desktop app running queries, browsing data, and fetching metadata concurrently |
| Min connections | 0 | No connections are kept alive when idle; the pool scales down to zero |
| Idle timeout | 30 minutes | Idle connections are closed after 30 minutes of inactivity, matching DBeaver's production connection type default |
PostgreSQL and CockroachDB support connecting to multiple databases on the same server. Tablio creates a separate connection pool per database, stored in a RwLock<HashMap<String, Pool>>. When the user switches to a different database in the sidebar, a new pool is created on demand and cached for reuse.
The database field is optional when creating a connection. When no database is specified:
- PostgreSQL defaults to the
postgresmaintenance database - CockroachDB defaults to
defaultdb(implicit server behavior) - MySQL/MariaDB/TiDB connect to the server without selecting a database; the user can browse and select one from the sidebar
- SQL Server connects to the default database configured for the login
This allows users to connect to a server first and then explore available databases, similar to pgAdmin's workflow.
When a query is executed in the SQL console, Tablio detects if the result is editable:
- The SQL is parsed to check if it targets a single table (no JOINs, UNIONs, subqueries, or CTEs)
- If a single table is detected, column metadata is fetched to find primary key columns
- If all PK columns are present in the SELECT result, the grid becomes editable with Save writing changes back to the database via UPDATE/INSERT/DELETE statements
- Otherwise the grid is read-only (cells are non-editable, Add Row/Delete/Save buttons are hidden)
A badge in the result toolbar shows "Editable" or "Read-only" with a tooltip explaining why.
