A local PostgreSQL client built with Tauri 2, Rust, SvelteKit, and TypeScript.
cd packages/desktop/ui
npm install
cd ../../..
cargo make db:up # local PostgreSQL to point the client at
cargo make tauri:devdev-containers/ holds a Docker Compose PostgreSQL 17 for developing against —
Noverdba is a PostgreSQL client, so this is a server to connect to, not the
app's own database. It seeds noverdba_dev with demo data chosen to exercise the
awkward cases: a table with a composite primary key, one with no primary key at
all, a view, a schema other than public, identifiers needing quotes, NULLs and
empty strings, and more rows than the 1000-row cap.
cargo make db:up # start
cargo make db:psql # psql shell inside the container
cargo make db:down # stop, keeping the data
cargo make db:reset # stop and drop the volume, so the seed re-runsIt listens on 55432 so it cannot collide with a PostgreSQL installed on the
host; override with NOVERDBA_PG_PORT. Connect the app to
127.0.0.1:55432 / noverdba_dev / postgres / postgres.
The seed only runs when the volume is created. After editing
dev-containers/postgres/initdb/, run cargo make db:reset && cargo make db:up.
Regenerate the TypeScript bindings whenever a #[tauri::command] signature or a
specta::Type changes:
cargo run --bin export-types # writes packages/desktop/ui/src/bindings.tscargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo check --workspace
cargo test --workspace
cd packages/desktop/ui
npm run lint
npm run check
npm run buildThe PostgreSQL integration tests are opt-in and skip themselves when
NOVERDBA_TEST_PG is unset, so the command above stays green without a server.
Point them at the dev container:
cargo make db:up
NOVERDBA_TEST_PG=127.0.0.1:55432:noverdba_dev:postgres:postgres cargo test --test postgresEach test creates and drops its own noverdba_test_* schema, so they run in
parallel and leave the demo data alone.
packages/
└── desktop/
├── src/ # Tauri application and PostgreSQL client
│ ├── config/ # Saved connection profiles and their passwords
│ └── db/ # Sessions, query execution, catalog, table editing
└── ui/ # Local SvelteKit interface and reusable UI primitives
Noverdba is local-only. It has no backend, account system, telemetry, or network API — it talks to whichever PostgreSQL servers you configure, and nothing else.
Connection passwords are stored unencrypted in secrets.json under the app's data
directory (0600 on Unix). They are kept in their own file so that swapping in an OS
keychain later only touches SecretStore in packages/desktop/src/config/mod.rs.