README.md

August 2, 2026 · View on GitHub

navoro

License Go React Wails Platform

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)

EngineSSH tunnelNotes
PostgreSQLalso covers TimescaleDB and CockroachDB (Postgres wire protocol)
MySQL / MariaDB
SQL Server / Azure SQL
SQLitelocal file, synced over SFTP when the file lives on a remote host
Oracleconnects by service name; go-ora has no dialer hook
ClickHouse
Snowflakecloud/HTTPS only
Firebirdconnects by database file path; no dialer hook
QuestDBrides the PostgreSQL driver (Postgres wire protocol)
InfluxDB 3.xreal SQL over HTTP (Apache DataFusion)

Query-language-agnostic (non-SQL text queries)

EngineSSH tunnelQuery language
CassandraCQL
Neo4jCypher, with a live graph visualization (see below)
InfluxDB 2.xFlux

Key-value / document

EngineSSH tunnelNotes
Redisper-DB-index browsing, type-aware value display (string/list/hash/set/zset)
Elasticsearchindices as "databases", documents as keys
MongoDBcompound 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_schema Cassandra, 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/DELETE for 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 .sql dump (best-effort CREATE 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/CREATE script 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

navoro icon navoro icon, monochrome

  • 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 in core/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.