README.md
August 2, 2026 · View on GitHub
A multi-engine database explorer with a React UI, running either as its own standalone desktop app (Wails3) or
embedded inside condui as a private git submodule at
ssh-gui/backend/dbexplorer.
Modes
- Standalone — its own Wails3 desktop app, own encrypted connection vault, own SSH tunnel handling. Runs independently of condui.
- Embedded in condui — opened as a satellite window from an existing condui SSH session. Connections are proxied through that session's tunnel instead of navoro's own vault; the UI is served from the same local HTTP port, with session/type/port/path injected into the page at render time.
Both modes share the same backend (core/) and the same React frontend (core/frontend/) — the UI detects
which mode it's in and adjusts (e.g. hides the connection vault when embedded).
Supported database engines
Relational (SQL)
| Engine | SSH tunnel | Notes |
|---|---|---|
| PostgreSQL | ✅ | also covers TimescaleDB and CockroachDB (Postgres wire protocol) |
| MySQL / MariaDB | ✅ | |
| SQL Server / Azure SQL | ✅ | |
| SQLite | — | local file, synced over SFTP when the file lives on a remote host |
| Oracle | — | connects by service name; go-ora has no dialer hook |
| ClickHouse | ✅ | |
| Snowflake | — | cloud/HTTPS only |
| Firebird | — | connects by database file path; no dialer hook |
| QuestDB | ✅ | rides the PostgreSQL driver (Postgres wire protocol) |
| InfluxDB 3.x | ✅ | real SQL over HTTP (Apache DataFusion) |
Query-language-agnostic (non-SQL text queries)
| Engine | SSH tunnel | Query language |
|---|---|---|
| Cassandra | ✅ | CQL |
| Neo4j | — | Cypher, with a live graph visualization (see below) |
| InfluxDB 2.x | ✅ | Flux |
Key-value / document
| Engine | SSH tunnel | Notes |
|---|---|---|
| Redis | ✅ | per-DB-index browsing, type-aware value display (string/list/hash/set/zset) |
| Elasticsearch | ✅ | indices as "databases", documents as keys |
| MongoDB | ✅ | compound collection/docId keys, full document JSON editing |
Every engine is a self-contained adapter behind a Driver (relational/text-query) or KVDriver (key-value)
interface (core/driver.go, core/kvdriver.go) — adding a new engine is one new file plus one init()
registration, with no changes needed anywhere else in the backend.
Features
- Schema browsing — connection → database → (schema, when the engine has one worth showing) → table tree,
with real introspection: columns, indexes, and foreign keys pulled from each engine's own system
catalogs/data dictionary (
information_schema,pg_catalog,all_*Oracle views,rdb$*Firebird system tables,system_schemaCassandra, etc.), not placeholders. - Query editor — multi-tab SQL/CQL/Cypher/Flux editor (CodeMirror 6: syntax highlighting + schema-aware autocomplete) with a results grid, execution timing, and an error panel.
- Editable results grid — opening a table from the tree lets you edit cells, add, and delete rows inline
(generates the
UPDATE/INSERT/DELETEfor you), as long as the table has a detected primary key. - Export / import — export any result set as CSV or JSON; import a CSV file into an existing table with column mapping and a preview.
- Full-schema ER diagram — every table in the active database as a draggable node-link diagram connected by its foreign keys (in addition to the per-table mini-ER in the Details panel).
- Backup / Restore — logical
.sqldump (best-effortCREATE TABLE+INSERT) and restore, portable across connection modes since it runs through the same query engine as everything else. - Structure sync — compare a database's tables/columns against another saved connection and generate an
ALTER/CREATEscript to bring the target in line. - Graph visualization for Neo4j — query results that carry nodes/relationships (including inside
collect(), paths, or nested maps) render as an interactive node-link graph alongside the flattened table: drag nodes, pan, zoom, click a node to inspect its full properties. Falls back to the plain results table for everything else. - Key-value browser — for Redis/Elasticsearch/MongoDB, a dedicated key list + value panel replaces the relational tree, with type/TTL display and inline value editing.
- SSH tunneling — any engine with a dialer hook in its Go driver (see table above) can be reached through
an SSH tunnel, sharing the same tunnel abstraction (
core.DialFunc/ConnParams.Dial) across every engine — password or private-key SSH auth. - Encrypted connection vault (standalone mode) — connections are stored locally, encrypted with Argon2id +
AES-256-GCM under a master password (
vault/crypto.go,vault/store.go); nothing is stored in plaintext. - Light/dark theme — navoro brand palette (
core/frontend/src/theme.css), togglable and persisted. - SQLite over SFTP — when a SQLite database lives on the remote host of a condui SSH session, navoro syncs the file locally, runs queries against the local copy, and syncs writes back.
See docs/roadmap.md for the feature roadmap and scope notes on what's implemented vs. planned.
Architecture
core/ connection manager, per-engine drivers, HTML/asset embedding
driver.go Driver interface + registry (relational / text-query engines)
kvdriver.go KVDriver interface + registry (key-value engines)
manager.go Manager: connection lifecycle, NormalizeDbType (alias → driver name)
<engine>.go one file per engine, self-registering via init()
frontend/ React + Vite UI (embedded into the Go binary via go:embed for release builds)
vault/ standalone-mode encrypted connection store
sshtunnel/ SSH tunnel dialing, shared by every tunnel-capable driver
app*.go standalone Wails3 app: vault, connections, queries
httpserver.go local HTTP server backing both the standalone window and condui's satellite window
main.go Wails3 entrypoint (standalone mode)
Building
Standalone:
cd core/frontend && npm install && npm run build # produces core/frontend/dist, embedded via go:embed
cd ../.. && go build . # or: task build
wails3 dev # dev mode with Vite hot reload
Embedded in condui (from the ssh-gui module, as a submodule):
go work init . ./backend/dbexplorer # link the submodule for the tagged build
go build -tags dbmanager .
condui's default (open-source) build excludes navoro entirely — go build . without the dbmanager tag
compiles against a stub that reports the feature as unavailable, so the private submodule is never required to
build the OSS product.
Brand
- Icon — the isotype: a stroke "N" with three teal dots stacked to its right, inside a navy circle
(
docs/brand/navoro-icon.svg). - Monochrome — the same mark in solid white with no circle, for placement on surfaces that aren't the
app's own navy (
docs/brand/navoro-icon-mono.svg). - Lockup — icon + wordmark, used in the sidebar (
core/frontend/src/components/Logo.jsx) and above. - Palette — marino profundo
#12233F, marino medio#1B3563, turquesa#1BA89C, turquesa claro#4FC7BC, turquesa oscuro#0E766D, plus the neutral/functional scale defined incore/frontend/src/theme.css. - Type — Poppins (brand/titles, 500/600/700), Inter (UI text), JetBrains Mono (data/code).
Full brand manual: Design navoro.pdf.
Status
The standalone desktop app (this repo) is released independently — see Releasing for how
tagged builds ship for Windows, macOS and Linux with an in-app updater. It's also still embedded inside condui
as a submodule, sharing the same core/ backend and React frontend in both modes.
License
navoro is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) — see LICENSE.
Commercial licensing may be available separately.
Trademark
The navoro name, logo and visual identity are not included under the software license.