The complete guide from installation to advanced usage: connect databases, query and edit data, work with AI, visualize results, automate with Workflows, monitor with dashboards, and keep your data safe.
DataZen is a free, open-source (GPLv3) cross-platform desktop database client built with Tauri v2 + Rust. No account required.
| Platform | Package |
|---|---|
| macOS Apple Silicon / Intel | .dmg |
| Windows x64 | .exe / .msi |
| Linux x86_64 | .deb / .rpm / .AppImage |
xattr -cr /Applications/DataZen.app, or right-click the
app and choose Open once.
Main workspace: connection tree + tabs + AI sidebar
PostgreSQL, MySQL / MariaDB, SQLite and Redis ship by default; MongoDB, ClickHouse, DuckDB, SQL Server and more are compile-time optional drivers. See the databases page for the full list.
ER diagram with PNG / SVG export
In Settings β AI Assistant pick a provider (OpenAI / DeepSeek / Ollama / custom
endpoint), protocol (OpenAI Chat Completions / OpenAI Responses / Anthropic Messages),
model and API key, then Validate and Save. The config is encrypted locally as
ai_config.enc and never logged. Until configured, the sidebar links you
to the settings page.
Natural language β SQL with live schema context
@ to attach context β tables from the
active connection, or files from your AI Context directory (recent picks are
remembered). SQL blocks in replies can be inserted into the editor; streaming and
thinking output are supported and generation can be stopped.
Workflows chain queries, AI analysis, conditions and loops into reusable YAML flows, runnable from the UI, the AI sidebar, or MCP.
variables (string / number / connection) as runtime inputs with
defaults and required flags.
id: daily-report
name: Daily report
description: Count today's orders and summarize with AI
variables:
- name: date
type: string
required: true
steps:
- type: query
id: get_orders
sql: "SELECT count(*) AS total FROM orders WHERE order_date = '{{date}}'"
- type: ai
id: summary
prompt: "Today is {{current_date}}, orders: {{steps.get_orders.rows.0.total}}. Write a one-line report."
output:
template: "{{steps.summary.result}}"
query (SQL with
{{...}} templates), ai, condition (if / then
/ else), foreach (loops, capped at 100 iterations by default).
abort (default) /
skip / fallback, with step-level overrides and a global
timeout (300 s default).
Cross-database flow: PostgreSQL orders + MySQL logistics + AI summary
Full syntax (template rules, condition expressions, troubleshooting) lives in the Workflow guide.
The Ops Dashboard is a dedicated monitoring window: chart widgets bound to SQL are refreshed automatically by a background MonitorEngine, with threshold alerts pushed to desktop notifications or a webhook.
Three dedicated sub-windows β opened from File (Tools menu on macOS) or the connection / database context menu. Pick by scenario:
Structure mismatch / no PK / target table missing / cross-dialect β Schema Diff and/or Data Transfer
Structure aligned + same PK + same dialect family β Data Sync
When a target connection is read-only, every write path is disabled.
Data Sync β same-family row diff
Row-level sync within the same dialect family (MySQLβMySQL, PGβPG) when table structure and primary keys match exactly.
Flow: Select source/target + database β Compare β Review & check diffs β Preview SQL β Execute (DELETE off by default; enabling it requires double confirmation).
Data Transfer β cross-dialect migration
One-way copy between heterogeneous databases (e.g. MySQL β PostgreSQL), or when structure differs / the target table must be created.
Flow: Six-step wizard β Endpoints β Setup (mode + write options) β Objects β Mapping β Preview (editable DDL) β Result.
direct / ir / unsupported
pairing paths.
Schema Diff β structure compare & deploy
Treat the source structure as the desired state and deploy controlled DDL to the target (no row data copy).
Flow: Five-step wizard β Endpoints β Objects (pick tables) β Compare
β Plan β Deploy. Additive-only by default; destructive statements require a checkbox
plus typing DEPLOY.
mixed.
The connection form supports database index selection and TLS; the deep operations are provided by the built-in Redis driver.
| Section | Contents |
|---|---|
| General | Language, theme, updates, default page size, pool size, monitoring, history cleanup |
| Appearance | Theme cards contributed by plugins |
| Data Browsing | Page size, SELECT result limit, auto chart switch, max returned rows |
| Editor | Font size and family |
| Behavior | Confirm on delete, auto commit, Safe Mode |
| Logging | Log level and path, view logs (restart required after changes) |
| AI Assistant | Provider / protocol / model / key / validation |
| Prompt Management | Per-driver or global prompt overrides, reset to default |
| MCP Server | Enable MCP, tool toggles, permission mode (read-only / safe write / high-risk write), allowlist, ready-to-paste Cursor & Claude Desktop configs |
| External MCP Servers | Add external MCP servers (name / command / args) for use in AI Chat |
| Extensions | Settings exposed by built-in plugin extensions |
.key file).
ai_config.enc); requests go
only to the provider you configure β no DataZen cloud in between.
| Shortcut | Action |
|---|---|
| β/Ctrl + N | New query tab |
| β/Ctrl + W | Close active tab |
| β/Ctrl + Enter | Execute SQL (selection only if text selected) |
| Enter / Shift + Enter | Send / newline in AI input |
| Space | Toggle row detail panel |
| Delete | Delete selected rows (confirmed, PK required) |
| @ | Open AI context picker (Esc closes) |
| Symptom | Fix |
|---|---|
| macOS says the app is damaged / unverified |
Run xattr -cr /Applications/DataZen.app β see the packaging doc
|
| A database type shows "Planned" | That driver is not in your build; download an all-drivers package or build from source (see optional-drivers doc) |
| Editing rows reports noPrimaryKey | The table has no primary key, so rows cannot be addressed; add one or edit via SQL |
| No EXPLAIN button | The current driver does not expose execution plans |
| AI not responding | Validate the key/endpoint in Settings β AI Assistant; ensure a local Ollama is running if used |
| Dashboard widget stuck in error | Its bound connection ID is stale or the SQL fails β rebind and test the SQL in a query window |
| Where are the logs? | Tools β View Logs; files live under logs/ in the app-data directory |
| Updating | Settings β General β Check for updates, or grab the latest GitHub Release |
More resources: feature guides in the repo Β· issue tracker