* feat(models): Change::RebuildTable + role/privilege/readiness/maintenance structs (Task 1.1) * feat(introspection): role/privilege/tablespace/rebuild-readiness query builders (Task 1.2) * feat(lib): rebuild_table payload, table/role object kinds, v0.7.7 capabilities + types (Task 1.3) * feat(object_crud): table_ddl builder (create/edit-diff/options/drop) + build_ddl table arm (Task 2.1) * feat(object_crud): role_ddl builder (create/edit/drop/grant/revoke) + build_ddl role arm (Task 2.2) * feat(object_crud): rebuild_script assembler + fk/grant/sequence introspection queries (Task 2.3) * feat(commands): transactional RebuildTable arm + build_rebuild_script + get_table_columns commands (Task 2.4) * feat(commands): get_roles/privileges/readiness/tablespaces + run_maintenance (Task 2.5) * feat(commands): role/privilege/rebuild/maintenance typed wrappers (Task 3.1) * feat(store): roles slice + openFormTab table/role dedup (Task 3.2) * feat(ui): TableForm (create/edit-diff/rebuild) + cross-schema FK with ON DELETE/UPDATE (Task 4.1) * feat(ui): RoleForm + RoleDetail + RoleGrantsEditor (Task 4.2) * feat(ui): wire roles into object registry + explorer (Task 4.3) * feat(ui): Edit Table + maintenance menu + Create Table toolbar + rebuild badge (Task 4.4) * chore: bump version to 0.7.7 (Task 5.1) * docs: sync README/ROADMAP/AGENTS to v0.7.7 (Task 5.2) * test: v0.7.7 manual smoke checklist (Task 5.3) * chore: sync Cargo.lock to v0.7.7 * style(ui): match TableForm visual layout to shared object-form rows (remove stray padding) * feat(ui): table creator grid redesign + per-column FK slide-in panel with relationship controls * style(ui): table-creator columns grid — bordered cells like the data table view * feat(ui): table creator — type dropdown, PK/Nullable rules, drag-to-reorder columns (vertical), tidy add-column row * feat(ui): table creator — single-PK exclusivity, name on top, fixed column widths + contained h-scroll, no-wrap constraints * style(ui): table creator — constraints column sized to content (no clip), overscroll containment * style(ui): table creator — overscrollBehavior none on both scroll containers, add-column row py-2 * feat(ui): table creator — centered add-column button, schema dropdown auto-selected to current schema * style(ui): table creator — columns grid fills container width, scrolls only when too narrow * feat(ui): table creator — shorthand PG types in dropdown, Auto-Increment only for int-family * feat(ui): FK panel — animate in/out from the right, flush create-table-style rows * fix(ui): FK panel — smooth slide (willChange + eased), local column options from the form grid * feat(ui): FK composer (multi-column, type preview, gated sections) + composite PK + constraints cog in actions col + auto-named FKs * fix(ui): FK panel blocks unnamed table with hint; Foreign keys section lists staged + DB FKs * style(ui): FK panel — transparent full-width selects, title↔select borders, 2-col column picker * style(ui): FK panel — vertical divider between local/ref columns * style(ui): FK panel — section title padding py-2 * style(ui): FK panel — remove row margins + select/text padding in column picker * style(ui): FK panel — flush column picker (no section padding), border-r + py-1 cells * style(ui): FK panel — cell padding + row borders on column picker (user polish) * feat: FK inline into CREATE TABLE (single staged change in create mode); touch up class * style(ui): hide FK icon on PK columns; fix grid header/row column alignment * feat(ui): SQL preview in table creator uses read-only Monaco editor * feat(ui): Foreign keys section — relation rows with icon + Edit/Remove actions * style(ui): FK relation row — label, icon, table on one line * style(ui): FormRow selects transparent like FK panel; test matches FK relation label * style(ui): form-row focus outline amber-400/20 (subtle) * style(ui): SQL view — remove px-4 py-3 wrapper padding * feat(ui): Create Table button label; auto tree refresh after schema-modifying commits; table name on staged ddl card * fix(roles): cast rolconnlimit::int8 to fix panic deserializing int4 into i64 * fix(privileges): cast privilege_type::text to avoid domain-array panic; aclexplode for sequences/schemas (role_sequence_grants removed in PG15, schema_privileges never existed) * feat(ui): role privileges sections collapsible (collapsed by default) with 5-entry preview + fade + Show more * feat(ui): role privileges — collapsed state shows first 5 with fade; expand reveals all * chore(test): drop unused fireEvent import in RoleDetail test * style(ui): hide chevron when section has 5 or fewer entries * docs: README/ROADMAP/AGENTS — v0.7.7 shipped details (roles/grants, table editor, FK composer, privilege explorer); ROADMAP adds v0.7.8 Next up (quick wins) * docs(readme): collapse Recent changes and Key features into details blocks * docs(readme): move hero caption under image; align download + comparison table columns * docs(readme): collapse only body content — keep Recent Changes / Key Features headings visible * docs(readme): per-subsection collapsibles with meaningful summary labels
11 KiB
Gridline Roadmap
Status legend: ✅ Shipped · 🏗️ In development · 🎯 Next up · 📋 In the queue · 🔮 Planned
This file is the source of truth for what Gridline is building. AGENTS.md and README.md link here — keep this current as priorities shift.
✅ Shipped (0.7.7)
Admin follow-up
- PostgreSQL users/roles + grants management — create/edit/drop roles with attributes; a per-role privilege explorer grouped by object class (tables, sequences, routines, schemas, databases) with collapsible sections (5-entry preview + fade, expand to show all) and GRANT/REVOKE staging through the changes queue (DB Pro has this at 0% on their roadmap — a differentiator to hold)
- Maintenance actions — right-click table → VACUUM / ANALYZE / REINDEX
Table & relationship management
- Create table — a "Create Table…" tab in the workspace using the same Visual ⇄ SQL flow as object create/edit: a columns grid (name / type / nullable / default / PK per row, type dropdowns with shorthand PG types, drag-to-reorder, add/remove rows) with a live Monaco SQL preview; multi-column PRIMARY KEY on create
- Edit table (robust column diff) — open an existing table's columns in the same grid; on Stage, diff old vs new columns and emit the right statements, one per queue item:
ADD COLUMN,DROP COLUMN,RENAME COLUMN,ALTER COLUMN … TYPE,ALTER COLUMN … SET|DROP DEFAULT,SET|DROP NOT NULL - FK management — multi-column FK composer (local column → referenced column pairs, referenced PKs first, type-match preview) with cross-schema references and ON DELETE / ON UPDATE actions; inlined into CREATE TABLE in create mode, separate ALTER staging in edit mode; FK rows in the form with Edit/Remove
- Related niceties — column reordering via atomic table rebuild (single transaction, preserves constraints/indexes/FKs/grants/sequences, fail-closed for triggers/RLS/inheritance/partitioning), table options (tablespace, row-level security), changes queue auto-refreshes the object tree after schema-modifying commits
- Version bump 0.7.6 → 0.7.7.
✅ Shipped (0.7.6)
- Full Object Management (PostgreSQL) — create/edit/drop for every PostgreSQL object type (enums, functions, procedures, triggers, sequences, extensions, views, materialized views, indexes, constraints), staged through the changes queue with generated-SQL previews.
- Enable Keychain toggle — wired end-to-end (default ON, opt-out): OFF = don't persist the DB password (session-only, re-prompt on connect) + purge the existing keychain entry; SSH secrets stay keychain-only.
- Objects view tabbed workspace — object details open as tabs in the shared tabbed workspace (per-type icons), with an inline manual query tab and the changes queue reachable from the tab bar.
- ⌘K object-search fixes — clicking a result now switches to the Objects view / opens the table tab; arrow-key navigation + Enter to pick.
- Version bump 0.7.5 → 0.7.6.
✅ Shipped (0.7.5)
- Bundled PG client tools — static
pg_dump/pg_restore/psqlship with the app (system-first, bundled fallback) so backup/restore/sync work with no separate install. - Schema CRUD — create/rename/drop schemas from the object tree; CASCADE drop with typed-name confirm + dependency warning.
- Global object search — Cmd+K palette in the DB viewer, current-schema scope, all object types; results open a table tab or jump to the Objects view.
- Copy as DDL for any object —
CREATEDDL for every browsable type (tables via pg_dump; pg_get_*def passthrough; sequences/enums/extensions/views synthesized). - Object dependencies —
pg_depend"what depends on this?" view, shown before destructive drops (table drop, schema drop). - Version bump 0.7.0 → 0.7.5.
✅ Shipped (0.7.0)
- New Connection screen revamp — a single progressive flow: connection-string input + 2-column provider tab grid → expands into the full configuration form (label, tags/env/folder, General + SSH·SSL tabs). Removes the simple/detailed toggle.
- Full MySQL DB viewer support — connect (incl. SSL + SSH), browse databases/tables/columns/FKs, run queries, paginate, inline cell editing + changes queue (insert/update/delete/bulk/empty/drop), DDL copy (
SHOW CREATE TABLE), CSV/JSON import. - DB viewer capability gating — pure
dbCapabilities.tsmatrix per DB type; unsupported views show a clean "not supported" state instead of broken UI. Redis browsing explicitly gated off. - Supabase & NeonDB managed-PG presets — provider cards with in-app setup instructions; persist as
postgresqlwith an SSL hint. - SQLite file-path mode — URI field becomes a file-path input with
Browse…. - Tag overflow scroll — connection cards show ≤3 tags, then scroll horizontally.
- Input styling sweep —
rounded-full→rounded-lgon all form controls. - Version bump 0.6.0 → 0.7.0.
Not in 0.7.0 (deferred, tracked below): Redis key browsing, MySQL Objects/ERD views, backup/restore/sync for MySQL + SQLite, multiple result sets, SSH key-file management, settings import/export, onboarding tour.
🎯 Next up (0.7.8) — Quick wins
Scope: small, individually shippable items that round out tooling gaps. Picked to follow the v0.7.7 features milestone; tag v0.7.8 when done.
- SQLite
.dumpsupport — match the pg_dump UX for SQLite (backup a SQLite database to a portable SQL dump, restore it back) - Backup / Restore / Sync for MySQL & SQLite — extend the pg-only tooling today: SQLite backup/restore + MySQL via
mysqldump(system-first; decide bundling) - Excel (.xlsx) export — alongside CSV/JSON/SQL/Markdown in the grid export toolbar
- Cancel long-running queries — per-connection cancel button (
pg_cancel_backendand equivalents) instead of waiting or killing the app - Settings export / import — share theme, accent, editor options, page sizes, and defaults across machines (JSON file)
📋 In the queue
Full Redis Support
Connection + test work today; key browsing is explicitly not part of 0.7.0 — it stays gated behind an "unsupported" state. Goal: first-class Redis like the PG/SQLite/MySQL viewers.
- Key browser (pattern search, filter by type, TTL display, key count)
- Value editors per type: string, list, hash, set, zset, stream, JSON
- Inline add / edit / delete keys, TTL management, flush
- Key expiry tracking and live refresh
Additional Database Types
- MariaDB (wire-compatible with MySQL — should largely fall out of the 0.7.0 MySQL work)
- TimescaleDB (PostgreSQL extension — largely free once PG browsing is solid; surface hypertables/compression in the object tree)
- Candidates after that: CockroachDB, DuckDB, SQL Server, MongoDB (drivers are heavier lifts — revisit with demand)
Managed Database Support (beyond Supabase / Neon)
Supabase and NeonDB presets shipped in v0.7.0. Remaining candidates:
- PlanetScale (Vitess/MySQL)
- Turso (libSQL)
- Provider detection guidance: paste a provider URL → Gridline auto-fills host/port/SSL mode; provider "connect" docs linked from the connection form
Query Workbench Upgrades
- Multiple result sets — one query, multiple result tabs (stacked/scrollable) instead of only the last result (deferred from 0.7.0)
- Cancel long-running queries — per-connection cancel button (
pg_cancel_backendand equivalents) instead of waiting or killing the app - Result streaming to file — export 500k+ rows without loading them all into memory
- Visual query builder — drag-and-drop tables/joins/filters that generate SQL (TablePlus has one; DB Pro plans one)
Schema & Data Tooling
- SQLite
.dumpsupport — match the pg_dump UX for SQLite - Schema diff / compare — two-database structure diff that pairs naturally with DB-to-DB sync
- MySQL Objects view + schema visualizer — functions/triggers/sequences/enums/extensions browsing and ER diagram for MySQL (deferred from 0.7.0 and out of scope for the object-management release — PostgreSQL-only for now)
- Backup/Restore/Sync for MySQL & SQLite — pg_dump tooling is PostgreSQL-only today (deferred from 0.7.0)
- More export formats — Excel (.xlsx), JSONL, Parquet alongside CSV/JSON/SQL/Markdown
🔮 Planned
AI Integration (BYOK)
Bring-your-own-key — no bundled model, no paywall, key stored in the OS keychain like DB passwords.
- Natural-language → SQL generation (schema-aware)
- Chat with your database (explain query results, error messages)
- Query explanations and schema summaries
- AI-generated charts from result sets
- Privacy-first: only the SQL/text you choose is sent to your provider; write-queries blocked by default, destructive actions confirmed before execution
Website & Docs
- Landing page with screenshots, feature tour, and download links
- User documentation (connection setup, SSH/TLS, backup/sync, changes queue)
- Blog / changelog feed
UI/UX Improvements (rolling)
Continuous polish, tracked as issues rather than one-off milestones:
- Empty states, error surfacing, and microcopy
- Keyboard shortcut audit + more configurable actions
- Performance passes on the grid, object tree, and large schemas
- Accessibility (contrast, focus states, screen-reader labels)
- Session restore — reopen tabs and query state from the last session
- Light-theme parity pass — dark is first-class; polish the light theme to match
Deferred from 0.7.0, slated for this bucket:
- Onboarding tour — first-run walkthrough built around the Gridline Demo database; contextual tooltips per screen
- Settings export/import — share theme, accent, editor options, page sizes, and defaults across machines (JSON file)
- SSH key management — read/generate key pairs and paste private keys directly in the SSH tab (today: path inputs only)
- In-app changelog — "What's new" panel fed from bundled release notes
✅ Shipped
- Full PostgreSQL object management — create/edit/drop staged through the changes queue (v0.7.6)
- Enable Keychain toggle — opt-out password persistence (v0.7.6)
- Objects view tabbed workspace (v0.7.6)
- Bundled PG client tools —
pg_dump/pg_restore/psqlshipped with the app, system-first with bundled fallback (v0.7.5) - Schema CRUD — create/rename/drop schemas with CASCADE + dependency warning (v0.7.5)
- Global object search — Cmd+K across all object types in the current schema (v0.7.5)
- Copy as DDL for any object (v0.7.5)
- Object dependencies —
pg_dependview before destructive drops (v0.7.5) - Tauri 2.0 + React 19 + TypeScript 5.8 project shell
- PostgreSQL and SQLite browse/query support
- Full MySQL DB viewer — connect, browse, query, edit + changes queue (v0.7.0)
- New Connection screen revamp — provider grid + Supabase/NeonDB managed-pg presets (v0.7.0)
- DB viewer capability gating + Redis unsupported state (v0.7.0)
- Connection management with URI parser, SSH tunnels, TLS, OS keychain
- Workspace tree, folders, tags, favorites, recents
- Multi-tab DB viewer with virtualized grid, server-side filtering/sorting
- FK preview, JSON popover, inline cell editing, changes queue
- Query editor with Monaco, autocomplete, destructive-query guard
- Query history, saved queries, and Queries view
- Full PostgreSQL object explorer + schema visualizer
- Backup, restore, and DB-to-DB sync tools
- Settings redesign with theme, accent color, editor options
- Built-in Gridline Demo (SQLite) database