Install
Download the installer for your platform from the latest GitHub release and run it. Builds are available for macOS (Apple Silicon & Intel), Windows (x64 & arm64), and Linux (x64 & arm64).
The app ships with no database drivers — those live in plugins. After installing, add at least one plugin (see Plugins) before the connection form will show any options.
First connection
- Click + in the sidebar to create a connection. Pick a plugin (PostgreSQL, MySQL, SQL Server, Snowflake, MongoDB, RabbitMQ, SSH, SFTP, S3, or HTTP) — the form is generated from that plugin's declared config schema.
- Click Test to validate the config, then Save. Profiles persist across restarts.
- Select a saved connection to connect. The workspace that opens depends on the plugin's kind.
Plugins
The host loads plugins at runtime from the plugins directory ($RDB_PLUGINS_DIR if set, otherwise <app-data>/plugins). Each plugin is a standalone executable plus a generated <id>.plugin.json manifest.
Install from GitHub (in-app)
Click ⤓ Install plugin in the sidebar, enter a repo (owner/name) and optionally a release tag, then Fetch release. The app selects the asset matching your OS/arch target triple, shows the published SHA-256, and — on confirmation — downloads, verifies the checksum, runs the binary's --describe to generate its manifest, and registers it live. The plugin appears in the New-connection form immediately, no rebuild required.
Bundled plugins
| Plugin | Kind | Talks to |
|---|---|---|
| PostgreSQL | rdbms | PostgreSQL 12+ (via sqlx) |
| MySQL | rdbms | MySQL & MariaDB |
| SQL Server | rdbms | Microsoft SQL Server (via Tiberius) |
| Snowflake | rdbms | Snowflake warehouses |
| MongoDB | document | MongoDB & Atlas clusters |
| RabbitMQ | rabbitmq | Brokers via the HTTP Management API |
| SSH | cli | Remote hosts via a PTY terminal |
| SFTP | filemanager | File transfer over SFTP |
| Amazon S3 | filemanager | S3 & S3-compatible buckets |
| HTTP client | http | REST APIs (collections + curl import) |
RabbitMQ requires the broker's rabbitmq_management plugin to be enabled.
Workspaces
The workspace rendered for a connection depends on its plugin kind:
- RDBMS — schema/table tree, SQL editor, results grid, structured + raw filters and sorts, CSV export, and inline cell editing with staged Save/Cancel that commits atomically in one transaction.
- Document — browse databases and collections and run find queries.
- RabbitMQ — browse the broker overview, queues, exchanges, and connections; declare queues and publish / get / purge messages.
- CLI — a PTY terminal to a remote host, with saved shell scripts per connection.
- File manager — an SFTP / S3 file browser: upload, download, rename, delete, and mkdir.
- HTTP — a REST client with collections, environment variables, auth presets, and curl import/export.
Saved connections
Profiles persist per-plugin at <app_data_dir>/connections/<plugin_id>/connections.json as human-readable JSON (the base path is OS-specific). Profiles whose owning plugin is no longer installed are skipped on load but left on disk.
Themes
rdb ships with 10 built-in themes — 7 dark, 3 light. The default is Catppuccin Mocha.
Catppuccin Mocha · Dracula · Nord · Tokyo Night · Gruvbox Dark · Monokai · Solarized Dark · Solarized Light · Catppuccin Latte · GitHub Light.
Building from source
Prerequisites
- Rust (stable) and Cargo — rustup.rs
- Node.js 18+ and npm
- Tauri 2 system dependencies — see the Tauri prerequisites guide
Run in development
Plugins are out-of-process executables discovered at runtime, so build them first and point the host at the same directory:
npm install
npm run plugins:dev # builds the 10 bundled plugins + manifests
RDB_PLUGINS_DIR=$PWD/dev-plugins npm run tauri dev
Without any plugins installed the connection form will be empty.
Build a release bundle
npm run tauri build # → src-tauri/target/release/bundle/
| Command | Description |
|---|---|
| npm run dev | Frontend-only Vite dev server (:1420) |
| npm run build | Type-check (tsc) and build the frontend |
| cargo build | Build the full Rust workspace |
| cargo test | Run Rust tests across the workspace |
| npm run plugins:dev | Build bundled plugins into dev-plugins/ |
Architecture
The single most important idea: the Tauri host knows nothing about SQL, documents, or queues. It ships with only the rdb-core crate (no DB drivers) and acts as a transport between the frontend and out-of-process plugin executables.
React frontend
│ @tauri-apps/api invoke() (8 generic commands)
▼
Tauri host (src-tauri) — no DB drivers
│ line-delimited JSON-RPC over stdio
▼
Plugin sidecars — postgres / mysql / mssql / snowflake / mongodb / rabbitmq / ssh / sftp / s3 / http
Three boundaries
- Frontend → host: 8 generic Tauri commands. Every capability funnels through a single plugin_call command with an opaque op string (e.g. "rdbms.execute") plus JSON params, passed through untouched.
- Host → plugin: line-delimited JSON-RPC over stdio. One Request {id, method, params} per line in, one Response {id, ok|err} per line out. A monotonic id multiplexes concurrent calls; PROTOCOL_VERSION is checked at discovery/install.
- Plugin internals: the rdb-plugin-runtime SDK turns an in-process Plugin into a sidecar and routes call ops via a Dispatcher.
Live connection handles (PgPool, mongodb::Client, the RabbitMQ HTTP client) never cross any boundary — they stay inside the plugin process, keyed by a ConnectionId (UUID).
See the full design doc: plugin-architecture.md.
Authoring a plugin
The shared traits make new backends small to add. For a relational backend:
- Create a binary crate under crates/plugins/<name> depending on rdb-core, rdb-plugin-runtime, and (for relational backends) rdb-rdbms-common. Add it to the workspace members in Cargo.toml.
- Implement rdb_core::Plugin — return a PluginInfo with the right kind and a config_schema describing the connection form, plus a connect returning an Arc<dyn Connection>.
- For relational backends, also implement RdbmsPlugin (list_schemas, list_tables, describe_table, execute, and optionally apply_changes for editing).
- In main.rs, call rdb_plugin_runtime::run(plugin, dispatcher) — for RDBMS use RdbmsDispatcher(plugin). There is no central registry to edit.
- To run it in dev, add the crate to the PLUGINS/CRATES arrays in scripts/dev-plugins.sh.
Non-relational backends pick a different PluginKind (Document, Rabbitmq, or Other) and the frontend renders the matching workspace component.
Publishing a plugin
For a plugin repo to be installable in-app, each GitHub Release must include:
- One binary per platform whose asset name contains the Rust target triple, e.g. rdb-plugin-mysql-aarch64-apple-darwin (…-x86_64-pc-windows-msvc.exe on Windows).
- A checksums asset: SHA256SUMS (or checksums.txt) with <sha256> <asset-name> lines, or a per-asset <asset-name>.sha256.
No manifest is shipped — the host generates it by running the verified binary's --describe at install time.