JustQuery votinvv
winget install --id=votinvv.JustQuery -e A native desktop PostgreSQL IDE for Windows, written in Rust with egui. Pre-release, developer-focused software — not intended for production use.
winget install --id=votinvv.JustQuery -e A native desktop PostgreSQL IDE for Windows, written in Rust with egui. Pre-release, developer-focused software — not intended for production use.
A native desktop PostgreSQL IDE for Windows, written in Rust with egui. Inspired by PL/SQL Developer — the goal is the same focused, fast, rock-solid workflow, but for Postgres, which has no tool of that quality.
> ⚠️ Pre-release — for developers only, NOT for production. JustQuery is early, rough, > rapidly-changing software aimed at developers experimenting locally. It is not intended for > use in production environments. Back up anything you care about and use it entirely at your > own risk — see the Disclaimer of warranty below.
> Status: working PostgreSQL front-end. A live connection (TLS via Windows SChannel) opens > on a background thread; queries run for real (F8 / Execute) — each tab on its own session > connection, on a worker thread, so the UI stays responsive and tabs run concurrently — streaming > result tabs in as each statement finishes, with incremental fetch and working > query cancellation (Stop). Still to come: transactions and server-side cursors.
Windows, via winget:
winget install votinvv.JustQuery
Or download the installer from the latest release.
If the app ever fails to launch, the reason is shown in a message box and appended to
%APPDATA%\JustQuery\startup-error.log.
github.com is contacted only by the
in-app update check.The default visual theme is a cool, silvery light scheme: near-white panels frame the white editor,
Connection Manager and result islands, plus a neutral dark accent, sharp-cornered controls, and a
soft highlight for hovered/active tabs, menus and buttons. One canonical border everywhere —
islands, sheets, modals, fields, dropdowns, menus and the window outline all use a single thin
border_strong frame drawn as exactly one physical pixel (crisp_border,
pixel-snapped so it stays razor-sharp at any DPI scale). Components are otherwise flat; the only
depth is a single soft island_shadow under raised surfaces (islands, menus, modals). The chrome
rows (menu, toolbar, tabs) share one height and one element padding, so the
blank gaps between them come out equal. UI text uses the native Segoe UI for crispness; the
editor is JetBrains Mono, with SQL keywords in bold and everything else regular weight. The
UI is English-only. All colours live in one
Palette; JustQuery ships Light and Dark palettes, switchable at runtime via
the Appearance menu and remembered across launches.
TextEdit): only the visible lines are laid out
and painted, so editing/scrolling stay O(visible) on files of any size. Line-number gutter, a
subtle active-line band, a one-row caret, mouse click/drag selection, and custom kinetic
scrolling on both axes (velocity-based momentum on a trackpad flick — Windows delivers flick
inertia as one delayed lump, which we ignore in favour of our own). The caret keeps a few
characters of breathing room from the right edge as you go, and its x is taken from the line's
galley (not column × char-width), so it stays on the real text even where a tab or an odd-width
glyph makes a character render wider than one cell.schema., and a
relation's columns after alias. (alias resolved from the statement's FROM/JOIN list).doc/mod.rs);
the same boundaries drive word deletion — Ctrl+Backspace (word before) and Ctrl+Delete (after).src/
main.rs Application state (JustQueryApp) + screen-level layout + update loop + toolbar
menubar.rs The caption bar: logo, text menus (File/Edit/Search/Database/Tools/Window/Help)
winchrome.rs Custom window chrome: drag-to-move, border, resize grips, caption buttons
startup.rs Hidden-window warm-up launch, DWM corner rounding, the themed I-beam cursor
theme.rs Palette (all colours), style metrics, fonts, egui style — the look in one place
widgets.rs Reusable painted UI helpers (islands, buttons, `show_modal`, tab strips, scrollbars)
brand.rs The logotype (J polyline + Q ring) and brand strings
icons.rs The icon glyph set (Ionicons → assets/justquery-icons.ttf)
dialog.rs Native Win32 helpers: Open/Save dialogs, clipboard read, local time (FFI)
kinetic.rs Kinetic (momentum) trackpad scrolling
vscroll.rs Custom f64 scrollbars for the virtual editor/grid
codeeditor.rs Virtualized SQL editor: renders only visible lines (O(visible) for any file
size); owns caret/selection/undo + per-line galley cache + custom scrolling
highlight.rs SQL syntax highlighter (run per visible line by the editor)
complete.rs F6 autocomplete (schemas/tables/columns via FROM-alias) + Smart Enter/Tab
find.rs The find bar (Ctrl+F) — methods on JustQueryApp
search.rs Shared background search engine
fileops.rs Open / Save / Save As (impl JustQueryApp)
doc/ Document model: piece-table + mmap, line index, encoding detection
grid.rs The virtualized result grid (ResultSet + the O(visible) data grid): pinned "#"
column / sticky header, cell selection + TSV copy, mouse column reorder/resize
sample.rs Demo grid data (test builds only)
connections.rs Saved connections (DPAPI files), live connect, `run_statements_worker` (buffered +
lazy COPY-streamed fetch), query cancellation
connections_ui.rs The Connection Manager dock + the connection-settings tab
crypt.rs DPAPI password encrypt/decrypt for connections (crypt32 FFI, no extra crates)
catalog.rs System-catalog probes: schema/object lists, per-schema fingerprints, column fetch
metadata.rs Metadata Manager: shared in-memory object model (SharedStore) + tree/tab UI
meta_collector.rs Background SCANER thread: incremental fingerprint-diff scan into SharedStore
meta_details.rs On-demand attribute fetcher (a metadata tab's columns) on its own connection
meta_manager_modal.rs Status-bar SCAN chip + the Session manager tab (settings + activity log)
proc.rs Per-tab background processes (Search) + gating
update.rs In-app GitHub update check + self-update
about.rs The About/Updates tab + the UI state of the update process
tests.rs Regression tests: logic + headless render smoke tests
build.rs Embeds the Windows app icon via winresource
assets/ Bundled fonts (JetBrains Mono regular + bold, the JustQuery icon set) and the app icon
tools/ generate_icon.py — regenerates assets/justquery.ico (pure Python)
The find.rs / fileops.rs modules add methods to JustQueryApp via impl blocks; they live in
child modules so they can use the struct's private state (a private item is visible to the
module that defines it and its descendants). Fonts and the icon are embedded via
include_bytes!, so the build is a single self-contained justquery.exe.
Requires the MSVC Rust toolchain (stable-x86_64-pc-windows-msvc) and the Visual Studio
2022 Build Tools (VCTools workload) for the linker.
cargo build --release # result: target\release\justquery.exe
cargo test --release # logic + headless render smoke tests
Run with cargo run --release, or launch the built justquery.exe directly.
JustQuery is built by a single developer and system architect: Claude Opus 4.8. All of the code was — and continues to be — written with Claude Code.
Product direction comes from votinvv: system design, the interface/navigation design, and the functional specification of the features implemented in the application.
JustQuery is provided "AS IS", without warranty of any kind, express or implied. To the maximum extent permitted by law, the author accepts no liability for any damage, data loss, downtime or other consequences arising from the use of (or inability to use) this software. You use it at your own risk. This restates, in plain terms, the warranty and liability provisions already granted by the Apache License 2.0 (Sections 7 and 8).
JustQuery is licensed under the Apache License 2.0 — free to use, modify and redistribute, including commercially, provided the license and copyright notice are kept.
Bundled assets:
main_conn is a control connection and each tab
opens its own session connection — lazily on its first run and kept open afterwards (so SET /
temp tables / prepared statements persist between queries) — which also lets tabs run
concurrently. The result panel opens on the first per-statement sheet — a Result grid for a
row-returning statement, or a one-row status sheet (Status / Line / Message); each statement streams
in as its own tab (you drive the tab selection), while a spinning indicator on the running tab
(editor and result tabs) and a live [N.NNNNNN sec] timer (seconds, microsecond precision) in the
status bar show progress. Stop cancels the active tab's running query with a real PostgreSQL
CancelRequest (the session connection is preserved).xmin of relations, attributes, defaults and
functions, so ALTER COLUMN/ADD COLUMN register too) and re-pulls only the schemas whose
fingerprint moved — full objects + columns — into a shared in-memory store (locked for the UI's
tree snapshot). It scans once per interval (default 30s, the "breather") while the user is
active and sleeps after 5 min idle (no DB churn); a cheap count guards a 1,000,000
objects+attributes budget, stopping with an error past it. The panel (vertically scrolled) shows
a schema dropdown + Refresh and a one-level tree: type folders with a disclosure chevron over
per-type object rows (table / view / sequence / function icons) that select on click (Ctrl/Shift
multi-select) and open a metadata tab on double-click. The status-bar scan chip is a coloured
label, green (active, the "breather" included) / yellow (asleep) / red (failed) /
grey (off); clicking it opens the Session tab — live status, the interval / sleep / budget
settings, a two-pane available ⇄ monitored schema picker (Ctrl/Shift multi-select, double-click
to move), an activity log, and Apply / OK. A metadata tab fetches an object's columns on demand.
All settings (interval, budget, idle, monitored schemas) persist to the connection file.