Skip to content

Shman4ik/pgNimbus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

192 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

pgNimbus logo โ€” an elephant riding a broom

pgNimbus

A blazing-fast, open-source PostgreSQL GUI client with a modern, native UI.
Launches in ~100 ms. Streams results before your query finishes. Sends zero telemetry.

Latest release Microsoft Store MIT license .NET 10 Avalonia 12 Platforms

Website ยท Installation ยท Quick Start ยท Features ยท Benchmarks ยท Roadmap


๐ŸŽฏ Why pgNimbus?

The PostgreSQL client market has a gap: truly fast + open source + modern UI.

  • pgAdmin / DBeaver โ€” powerful, but heavy and slow.
  • TablePlus โ€” fast and polished, but closed-source and paid.
  • Beekeeper Studio โ€” open source, but Electron.
  • HeidiSQL โ€” native and fast, but dated and MySQL-first.

pgNimbus delivers HeidiSQL's speed with TablePlus's polish โ€” PostgreSQL-first, from the ground up. Built with .NET 10 + Avalonia 12, compiled to a NativeAOT binary, MIT licensed.

๐ŸŽฌ See It in Action

Instant launch (NativeAOT) SQL completion that predicts the next move
pgNimbus launching from a cold NativeAOT process to a fully rendered main window in well under a second Typing FROM + a partial table name, JOIN with an FK-ranked table suggestion, then ON auto-completing the full join condition
Startup race: pgNimbus vs. pgAdmin Safe mode: stage edits, commit as one transaction
Side-by-side race from a cold start: pgNimbus is already showing query results while pgAdmin's splash screen is still waiting to launch Editing cells across two tabs in safe mode, then committing both staged changes together in a single transaction

๐Ÿ“ฆ Installation

Microsoft Store (recommended)

The Store package is signed and auto-updated โ€” no SmartScreen warnings.

Get pgNimbus on the Microsoft Store โ†’

WinGet

winget install pgNimbus --source msstore

Direct download (MSI)

Grab pgNimbus-<version>-win-x64.msi from Releases โ€” a per-user installer, no admin rights needed.

Note

The direct MSI is unsigned, so SmartScreen will warn on first run โ€” click More info โ†’ Run anyway, or prefer the Store/WinGet path above. You can still verify where the file came from.

macOS (early beta)

pgNimbus-<version>-macos-arm64.dmg from Releases (Apple Silicon only). The beta is unsigned and unnotarized, so Gatekeeper shows a misleading "pgNimbus is damaged" dialog on first launch.

Fixing the Gatekeeper "App is damaged" error

The file is safe โ€” this is standard macOS behavior for unsigned apps. Clear the quarantine flag once per downloaded update:

# If you moved the app to the Applications folder:
xattr -cr /Applications/pgNimbus.app

# If the app is still in your Downloads folder:
xattr -cr ~/Downloads/pgNimbus.app

Then launch pgNimbus.app normally. Proper signing and notarization are planned โ€” see Roadmap.

Linux (early beta)

x64 and arm64 builds from Releases, in three formats:

  • AppImage (any distro) โ€” chmod +x pgNimbus-<version>-linux-<arch>.AppImage, then run it. Nothing to install.
  • Debian/Ubuntu โ€” sudo apt install ./pgNimbus-<version>-linux-<arch>.deb, then launch pgnimbus (or find pgNimbus in your app menu).
  • tar.gz โ€” unpack anywhere and run ./PgNimbus.App.

Every vX.Y.Z tag builds all of the above via release.yml.

Verifying a download

The direct-download builds are unsigned, but every release asset carries signed build provenance โ€” one command proves a file was built by this repo's release workflow from the tagged commit, not tampered with or rehosted:

gh attestation verify pgNimbus-<version>-win-x64.msi --repo Shman4ik/pgNimbus

Each release also ships SHA256SUMS.txt and a CycloneDX SBOM (pgNimbus-<version>-sbom.cdx.json) listing every bundled dependency.

๐Ÿš€ Quick Start

  1. Launch pgNimbus โ€” the connection dialog opens first.

  2. Paste any connection string into the box at the top; the form fills itself. All common syntaxes work:

    postgres://alice:s3cret@db.example.com:5433/appdb?sslmode=require
    jdbc:postgresql://db.example.com:5433/appdb?user=alice&ssl=true
    Host=db.example.com;Port=5433;Database=appdb;Username=alice;Password=s3cret
    host=db.example.com port=5433 dbname=appdb user=alice sslmode=require
    PGPASSWORD=s3cret psql -h db.example.com -p 5433 -U alice appdb
    
  3. Connect โ€” your password goes to the OS credential store (DPAPI on Windows), never to disk.

  4. Run a query with Ctrl+Enter, jump anywhere with the command palette (Ctrl+K), and press F1 for the full shortcut cheat sheet.

For scripted or repeated local testing, set PGNIMBUS_CONN (same formats as the paste box) to skip the dialog entirely:

export PGNIMBUS_CONN="postgres://postgres:secret@localhost:5432/mydb"
dotnet run --project PgNimbus.App

โœจ Features

โšก Fast & Dependable

  • ~100 ms launch-to-window as a NativeAOT binary โ€” measured on every release, not asserted (Benchmarks).
  • Streaming, cancellable results โ€” the first screenful renders before the full result set arrives, backed by a virtualized grid; Esc genuinely stops a query mid-flight.
  • Auto-reconnect โ€” a connection dropped by laptop sleep or an SSH-tunnel hiccup quietly reopens on the next run. An open explicit transaction is never silently re-established; it surfaces a clear "connection lost, nothing committed" state instead.
  • Workspace restore โ€” closing the app never prompts; the next session reopens your tabs, including never-saved scratch SQL, exactly as you left them.
  • Zero telemetry โ€” no analytics, no crash reporting, no update pings. The only connections the app opens are the ones you configure (Privacy).

โœ๏ธ A Smarter SQL Editor

  • Schema-aware autocomplete โ€” schema-qualified tables after FROM/JOIN, scoped columns in WHERE/ON/ORDER BY, alias. member access, CTE output columns (including SELECT * bodies resolved through the catalog), and user-defined functions with signature tooltips.
  • FK-aware JOIN magic โ€” after JOIN, tables connected by a foreign key rank first; after ON, the complete join condition (oi.order_id = o.id) is the top, one-keystroke suggestion.
  • SQL formatting โ€” Ctrl+Shift+F pretty-prints the statement under the cursor; a token round-trip self-check guarantees only whitespace ever changes.
  • Script execution โ€” run several ;-separated statements on one connection (BEGINโ€ฆCOMMIT, SET, and temp tables carry across), each with its own result section and timing, stopping at the first error.
  • Multi-tab editor with find & replace, current-line and bracket highlighting, font-size zoom, and SELECT * expansion into an explicit column list.
  • Open/save .sql files โ€” Ctrl+O/Ctrl+S, a recent-files list in the palette, and a dirty marker that distinguishes "unsaved scratch" from "diverges from disk".
  • Query history โ€” searchable, pinnable, scoped per connection; entries open in a new tab.
  • Command palette โ€” Ctrl+K fuzzy-jumps to any table, saved query, or action without touching the mouse.

๐Ÿงฎ Data Editing Without Fear

  • Safe mode (pending-changes review) โ€” stage grid edits, inserts, and deletes locally: dirty rows are highlighted (amber = edited, red = delete), "Review & commitโ€ฆ" shows the exact generated SQL, and everything applies as one transaction โ€” or gets discarded with nothing ever sent. Built for the "inline edit on production" nerves.
  • No-SQL table browsing โ€” paged browsing with click-to-sort headers, all pushed down to Postgres (ORDER BY/LIMIT/OFFSET), so a huge table stays as cheap as one page. The composed SQL sits in the editor and doubles as the filter โ€” add a WHERE and run.
  • Follow foreign keys from the grid โ€” right-click an FK cell to jump to the row it references, or a key cell to list all referencing rows, each hop opening a pre-filtered browse tab.
  • Full grid CRUD โ€” inline cell editing, an "Add row" dialog with server-side type casts, delete with confirmation, and "Set cell to NULL". Hand-typed SELECTs become editable too whenever the wire metadata proves it's safe.
  • Postgres-native value editors โ€” enum columns get a dropdown of their pg_enum labels, boolean a checkbox, date/timestamp a calendar picker; arrays and composites are syntax-checked before anything is sent, and domains resolve to their base type.
  • Transaction control โ€” an explicit Begin/Commit/Rollback flow on one held connection, with a status-bar indicator and automatic rollback on failure so you're never stranded in an aborted-transaction state.
  • Cell inspector โ€” double-click any cell to read the full value in an overlay, with JSON pretty-printed and one-click copy.
  • Import & export โ€” CSV/JSON import streamed via COPY with type inference; copy results as TSV, CSV, JSON, Markdown table, or INSERT statements.

๐Ÿ˜ PostgreSQL-First Tooling

  • Real pg_catalog introspection โ€” the schema tree sees materialized views, partitioned tables, and true primary-key flags; never the lowest-common-denominator information_schema.
  • DDL reconstruction โ€” a "Source (DDL)" action rebuilds an object's CREATE TABLE/CREATE VIEW โ€” columns, defaults, identity, constraints, partition key, indexes โ€” into a new tab; an "Alter Table" UI covers no-SQL column changes.
  • EXPLAIN visualization โ€” a graphical plan tree for EXPLAIN and EXPLAIN ANALYZE with per-node cost and timing, not just raw text.
  • Server activity dashboard โ€” a live pg_stat_activity view with per-backend cancel statement and terminate session, so a runaway query is one click to stop.
  • LISTEN/NOTIFY monitor โ€” subscribe to channels and watch notifications arrive live.
  • Connection manager โ€” saved profiles with per-connection accent colors (so production never looks like staging), SSH tunnels, and passwords held by the OS credential store โ€” never written to disk.
  • Multiple simultaneous connections โ€” open profiles in separate self-contained windows (own pool, listener, tunnel, workspace), so dev and prod sit side by side; or switch the current window's connection without restarting.

๐Ÿ“ธ Screenshots

Query editor + results (light) Query editor + results (dark)
Main window, light theme Main window, dark theme
EXPLAIN ANALYZE visualization Command palette (Ctrl+K)
Raw EXPLAIN ANALYZE text next to the graphical plan tree pgNimbus renders from it, with per-node cost and actual timing Command palette fuzzy-jumping to a table
Server activity (pg_stat_activity) Connection manager
Server activity window showing a live backend and its wait event Connection dialog with saved profiles and paste-anything import

โŒจ๏ธ Keyboard Shortcuts

Press F1 in the app for the full cheat sheet. On macOS, Cmd takes the place of Ctrl automatically (except autocomplete, which stays on Ctrl+Space โ€” Cmd+Space is Spotlight). The highlights:

Action Shortcut
Command palette Ctrl+K or Ctrl+P
Run query / run statement under cursor Ctrl+Enter / Shift+Enter
Cancel running query Esc
Format statement under cursor Ctrl+Shift+F
Find / find & replace Ctrl+F / Ctrl+H
New / close query tab Ctrl+T / Ctrl+W
Open / save a .sql file Ctrl+O / Ctrl+S
SQL autocomplete Ctrl+Space (also triggers while typing)
Refresh database & schema Ctrl+Shift+R
Toggle sidebar Ctrl+B
Switch focus: editor โ†” results grid F6
Edit selected result cell F2
Preferences Ctrl+,
Shortcuts cheat sheet F1

๐Ÿ“Š Benchmarks

"Fast" is the thesis, so it's measured, not asserted. The benchmark workflow runs on every tagged release and tracks:

Metric What it proves
Startup, launch โ†’ first frame (NativeAOT and JIT) On screen in the ~100 ms range โ€” measured from OS process start to first rendered frame
Memory at first frame, AOT binary size The footprint stays "native app", not "Electron app"
Connect (cold pool) / SELECT 1 round-trip Interactive latency of the query path
First row batch / full stream of a 100 000-row SELECT Streaming delivers the first screenful long before the full result

Historical charts live at https://shman4ik.github.io/pgNimbus/dev/bench/ โ€” a regression shows up as a visible step in the release that introduced it.

Running the suite locally

Linux, needs Xvfb and a reachable PostgreSQL:

PGNIMBUS_BENCH_CONN="Host=localhost;Database=postgres;Username=postgres;Password=postgres" \
    scripts/benchmarks/run-benchmarks.sh          # add PGNIMBUS_BENCH_SKIP_AOT=1 to skip the slow AOT publish

Two pieces make it work: PGNIMBUS_STARTUP_PROBE=1 makes the app print launch-to-first-frame time and RSS and exit (StartupProbe.cs), and the PgNimbus.Benchmarks console project measures the query engine through the same streaming API the UI uses.

๐Ÿ—๏ธ Architecture

pgNimbus/
โ”œโ”€โ”€ PgNimbus.Core/         # Engine. Depends only on Npgsql โ€” zero UI dependencies.
โ”œโ”€โ”€ PgNimbus.App/          # Avalonia MVVM front-end (CommunityToolkit.Mvvm).
โ”œโ”€โ”€ PgNimbus.Core.Tests/   # TUnit tests for the engine.
โ””โ”€โ”€ PgNimbus.Benchmarks/   # Query-engine benchmarks.

PgNimbus.Core is a plain class library that knows nothing about Avalonia, keeping the engine reusable for a future CLI or test harness. Results stream as IAsyncEnumerable<RowBatch> with real mid-flight cancellation.

Building from source

Requires the .NET 10 SDK.

dotnet build
dotnet run --project PgNimbus.App

Publishing a NativeAOT build:

dotnet publish PgNimbus.App -c Release -r win-x64 -p:PublishAot=true    # Windows
dotnet publish PgNimbus.App -c Release -r linux-x64 -p:PublishAot=true  # Linux (needs clang + zlib1g-dev)

๐Ÿ”’ Privacy

pgNimbus sends zero telemetry. No usage analytics, no crash reporting, no update pings, no "anonymous statistics" โ€” nothing. The only network connections the app ever opens are the ones you configure: your PostgreSQL servers and, if you use them, your SSH tunnel hosts. Queries, schemas, credentials, and history never leave your machine (passwords live in the OS credential store, everything else in local JSON files under your user profile). The code is MIT-licensed and open โ€” verify it rather than take it on faith.

๐Ÿ—บ๏ธ Roadmap

Prioritized by how much it advances the thesis (fast + open + modern, PostgreSQL-first). Contributions welcome โ€” items are intentionally scoped as individually shippable pieces; shipped items graduate into Features above.

Next up

  • Full macOS support โ€” Developer ID signing, notarization, real-world testing.
  • macOS look & feel polish โ€” the native menu bar, About box, and Settingsโ€ฆ (Cmd+,) shipped 2026-07; still open: title-bar vibrancy/translucency (NSVisualEffectView-style material behind the merged command bar), sheet-style modals instead of separate dialog windows, Cmd+1โ€ฆ9 tab switching, a proper Window menu with the open-windows list, native context-menu styling, and full-height sidebar that tucks under the traffic lights (TablePlus-style).
  • Linux builds โ€” AppImage, .deb, and tar.gz for x64/arm64 ship from the release pipeline (Flatpak still a maybe-later).
  • Table & index sizes and usage โ€” sizes in the schema tree plus a per-database overview (largest relations, seq-vs-index scans, unused indexes, cache hit rate).
  • Locks & blocking tree โ€” a who-blocks-whom view in the activity window, with one-click cancel/terminate of the blocker.
  • Row detail sidebar โ€” a vertical name/value view of the selected row, doubling as a form-style editor.
  • winget-pkgs submission โ€” manifests are generated and validated per release; the first manual community-source PR is pending (the msstore source already covers winget install).
  • Windows polish โ€” Mica/acrylic backdrop; per-action hotkey remapping.

Bigger bets

  • ER diagram โ€” auto-laid-out foreign-key graph of a schema, exportable as SVG.
  • EXPLAIN plan diffing โ€” run a query before/after an index and diff the plan trees node-by-node.
  • Backup/restore UI โ€” pg_dump/pg_restore orchestration with progress streaming.
  • AI, privacy-first โ€” bring-your-own-key or local model, explicit opt-in, nothing leaves the machine otherwise; possibly an in-app assistant and/or a built-in MCP server exposing the current connection.
  • Vim keybindings โ€” opt-in modal editing over AvaloniaEdit.
  • Parameterized queries โ€” recognize :name / $1 placeholders and prompt for values on run.
  • Quick chart of a result set โ€” one click from grid to a bar/line/scatter view.
  • PostGIS geometry viewer โ€” render geometry/geography cells on a map.
  • Notebook mode โ€” mixed SQL + Markdown documents with inline result snapshots.
  • Plugin/extension API โ€” a stable surface for community panels.
  • Localization โ€” externalize UI strings; Russian and German first.

๐Ÿ“„ License

MIT โ€” see LICENSE.

About

A fast, open-source PostgreSQL GUI client (.NET + Avalonia)

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

7 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors