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.
Passwords are stored in the operating system credential store (Keychain on macOS, Credential Manager on Windows, and Secret Service on Linux). The JSON files contain only a reference. On Linux, a Secret Service provider must be available to the app.
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.