Repository navigation
Releases
Releases · Extransload/TablePeek
TablePeek v0.3.4
Added
- Reorder columns by dragging their headers, as in TablePlus. Drag a header sideways and the column lifts and follows the pointer while the others slide aside to show where it lands; the grid scrolls near its edges, release drops it,
Escsends it back. A short press still sorts or selects and the header's edge still resizes.⌥←/⌥→moves the current column one place. Staged edits, the selection, widths and sorts stay with their columns, and copy, export, Quick Look and the row detail panel follow the new order. A table tab keeps the order as its column order (shown in the Columns picker) across paging and refreshes without reading the rows again; a query result keeps it until it runs again. Reduce motion makes the moves instant.
TablePeek v0.3.3
Changed
- ⌘R refreshes in the desktop app, as in TablePlus: the schema is read again and the table in front reloads (F5 still works). A browser tab keeps ⌘R for reloading the page unless you bind it in Settings › Shortcuts. Shortcuts are now saved as the ones you changed only, so a Refresh you never changed follows each place's default; a Refresh left at the old default picks up ⌘R in the app once.
- The row detail panel (⌘I) colors values by type like the data grid: numbers, booleans, dates, times, UUIDs, binary and enums in their type colors, JSON objects and arrays token by token, and NULL in the grid's NULL color. With "Color by type" off, values read plain. The MongoDB table view's shared values for several selected rows are colored the same way.
Fixed
- Refreshing a MongoDB or Elasticsearch collection whose cards hold unsaved edits (F5, ⌘R in the app, or the footer's refresh button) now asks before discarding them; Cancel keeps the edits and the page, Discard drops them and reloads. Before, the reload kept the drafts over the documents read again.
- Moving through a table with the keyboard highlights the current cell's row; before, the highlight stayed on the row under the mouse pointer.
TablePeek v0.3.2
Fixed
- The update status in Settings › General no longer breaks in a narrow sheet: with a release downloaded, its text broke after every word and Check now spilled out of the card. The buttons now move to a line of their own, right-aligned, when they don't fit beside the text.
TablePeek v0.3.1
Added
- Floating surface opacity (Settings → Appearance → Material, 90% by default, shown when the material isn't Solid; searchable as "floating"). It sets how opaque Quick Look, dialogs, the command palette, menus and pickers and the settings sheet are, apart from the window's opacity, and applies live as the slider moves.
Fixed
- Quick Look stays readable under Glass and Clear. Its large view wasn't one of the glass surfaces, so in a see-through window it took the window's opacity with no blur (at a low opacity, all but invisible), and its popover's glass grew fainter as the window's opacity went down. Both now use the floating surface opacity with the glass blur, the date picker too.
- Quick Look and the settings sheet no longer overlap. With Settings open, the Quick Look popover is placed within the app area left of the sheet (pointing at its cell when there is room), the large view fills that area only, and both follow the sheet's edge as it is resized; clicking the sheet no longer closes Quick Look. Dialogs, the command palette, error toasts, flash notes and the sign-in and file-dialog banners keep to the same area, and menus, pickers and tooltips opened over the app stay left of the sheet.
- ⌘, opens and closes Settings with Quick Look open too.
TablePeek v0.3.0
Loading shows as gauges that fill the box that waits, and Reduce motion becomes a TablePeek setting that no system preference overrides.
Added
- Reduce motion setting (Settings → Appearance → Display, off by default). On, every transition and animation is instant: tabs, dialogs, menus, home drag and drop, the schema tree, counts, and the home backdrop as a still frame; turning it on or off applies at once in every window.
Changed
- Motion and transparency follow TablePeek's settings only. The system's "Reduce motion" no longer changes anything; use the new Reduce motion setting. The system's "Reduce transparency" no longer forces Solid: the Material setting alone decides. The desktop app no longer reads it, and
GET /api/windowno longer returnsreducedTransparency. - Loading shows as a gauge filling the box that waits, instead of a spinner. A saved connection's row on home fills with the connection's color while it connects. A working tab is a gauge of its own color: an open connection's tab in the top bar while it reconnects or is entered, a query tab, a table tab while its rows load and MongoDB/Elasticsearch tabs while they run empty their highlight and fill back up in it from the left, background tabs included (an Elasticsearch console request answered 4xx or 5xx ends as an error). Buttons that wait (Apply changes, dialog buttons, refresh and delete), the "Running…" pill over results, the table count and a step-by-step page walk or count (with its real progress) fill the same way. Without known progress the gauge eases toward 90% and keeps creeping with a glint at its edge; it races to full on success, flashes red and drains on an error, and drains on a cancel. Under Reduce motion a busy box is half tinted, without movement.
TablePeek v0.2.0
A desktop app for macOS and Windows (also through Homebrew) that updates itself, settings rebuilt the way Tern does them, Tern's themes and color tables, a large JSON explorer, live setting previews, and motion throughout.
Added
- Desktop app for macOS and Windows (
crates/tablepeek-desktop, Tauri 2). It starts the same server inside the app on a free port with the same~/.tablepeeksettings folder, and shows it in native windows: links to other sites open in the system browser, "Open in new window" opens another app window, exports and GridFS downloads go to the Downloads folder (numbered when the name is taken), and file drops reach the page. On macOS ⌘W, ⌘T, ⌘N and ⌘R stay with the page (Close Window is ⇧⌘W). Release builds are ad-hoc signed on macOS and unsigned on Windows; docs/INSTALL.md covers the first launch. - The desktop app updates itself. When the update check finds a newer release (and checks are on and the release isn't skipped), the app downloads it in the background and checks its updater signature, with no click. Once it is ready, a Restart to update pill arrives in the top bar and on the home screen with a wash of color (it just appears with reduced motion); hovering shows the version, a click installs it and relaunches, a failure shows beside the pill and clicking tries again, and right-clicking offers the release notes or skipping the version. Settings > General shows the same state (downloading with its percent, downloaded) with Check now and the same button. The app looks again every hour while it stays open (GitHub is still asked at most once a day), keeps a release already downloaded, and replaces it when a newer one appears.
GET /api/updatereportsinstallableandinstall(idle,checking,downloading,ready,installing,error);POST /api/update/installinstalls the downloaded release, and/api/versionreports the desktop build asdist: "desktop". - Releases also publish
TablePeek-<tag>-<target>.dmg(macOS arm64, x64),TablePeek-<tag>-x86_64-pc-windows-msvc-setup.exe, the updater bundles with their.sigsignatures, andlatest.jsonfor the updater.make desktopruns the app from source andmake desktop-bundlebundles it. - Homebrew cask for the desktop app:
brew install --cask extransload/tap/tablepeek. Each stable release updates it in Extransload/homebrew-tap; it clears the download quarantine so the unsigned app opens without a Gatekeeper prompt. - Reorder connections on the home screen by dragging them within a group, or into another group at a chosen spot, the top of the list included; groups reorder the same way, and ⌥↑/⌥↓ move the focused connection or group. The order is kept in
~/.tablepeek/ui-state.jsonand the connection picker follows it. Previously a dropped connection took its place by last use, so it could not be put at the top. - Large view for JSON in Quick Look. "Expand" (⌘↩ in the cell popover) opens the value filling the window: a tree that stays responsive with hundreds of thousands of nodes (expand all, collapse all, expand to depth 1–5 or press 1–9), search across keys and values with a match count and ↩/⇧↩ to step through, a breadcrumb with Copy path and Copy value, long strings shown in full, and a Raw view that indents the stored text without rounding big numbers. Esc goes back to the popover. Works for JSON/JSONB columns and MongoDB documents.
- Window material: Solid, Glass or Clear (Settings → Appearance), with an opacity and, for Clear, a blur radius. Dialogs, the command palette, menus, pickers and the settings sheet turn to tinted glass over the app. In the desktop app the window itself becomes see-through: macOS vibrancy for Glass, the desktop blurred without the system tint for Clear (Windows: Mica and Acrylic). The page asks for it through
GET/PUT /api/window; a browser tab reports that its window can't be see-through. Every open window and tab follows a material (or any other setting) changed in another. The system's "Reduce transparency" makes every material solid; on macOS the desktop app reads it itself (WebKit doesn't report it to the page) andGET /api/windowpasses it on asreducedTransparency. - An animated home. Behind the connection home a table runs as a floor to the horizon, its rows flowing toward you in the theme's type colors; the pointer is a lens that lifts the cells under it and shows their values, and a click sends a ripple out. First run gets the full show (the wordmark's "Peek" peeks up, the actions rise in turn, the New connection button leans toward the pointer); the connection list gets a dimmer, slower floor without values. One 2D canvas, capped at 60 fps (30 behind the list), paused while the page is hidden and stopped off the home; with reduced motion it is a still frame.
- Dark Noir and Light Noir themes. Dark Noir is the look of the author's Tern terminal theme: Dracula-style surfaces, a vivid 16-color table (green strings, yellow numbers, pink keywords, cyan functions and dates, blue types, grey
NULL) and a teal#287D8Eaccent. Light Noir keeps the same hue in each role on cool light surfaces, every text color at 4.5:1 or better on every surface. - Tern's themes (oh-my-pi's 102 theme files, MIT-licensed, in
web/src/themes/tern) as a Tern group in the theme pickers, dark and light. The build converts them to color tables and surfaces (virtual:tern-themes, an 11.9 kB gzipped chunk) loaded only when Settings opens or a Tern theme is saved; text colors too faint on their background (most light themes' ANSI colors, some accents and secondary text) are darkened or lightened to stay readable. - Import a Tern theme file ("Import Tern theme…" in either theme picker): a Tern theme CSS becomes the theme of its mode, named after the file, from the oh-my-pi theme it
@imports with its--tv-bg,--tv-fg,--ansi0…--ansi15and surface variables over it; its other rules are skipped. Imported themes are kept in~/.tablepeek/ui-state.json, listed under "Imported" in the picker, and can be removed there. - Color table on the theme page: the current theme's background, foreground and 16 colors as swatches. Syntax and value colors map to the slots, so a picked color carries to every part mapped to it; picks are saved per theme, and in the settings sheet the table is one row (⏎ in, arrows between swatches, ⏎ opens the picker, ⌫ puts one back, ⌫ on the row puts all back).
- Settings menus preview live. Moving over a theme, font, font size or syntax preset (with the pointer or ↑↓) shows it in the whole app at once (data table, SQL editor, sidebar, window material), a light theme even while dark is shown and the other way round; a click or ⏎ saves it, and closing the menu without picking (Esc, Tab, a click elsewhere, closing Settings) puts the saved look back. Previews are never saved or sent to other windows.
- Motion throughout, in Tern's manner (one set of durations and spring curves in
styles.css,web/src/motion.tsfor what CSS can't do; only transforms and opacity move). With the system's reduced motion everything is instant.- Home drag and drop. A dragged connection lifts off the list as a glass card that follows the pointer, leaning into sideways moves; the rows part to open a gap where it will land (the gap is the marker), and on release it springs into place. A folded or empty group under it lights up and pulses, the card thins over it, and a drop there falls into the folder, which bounces. A dragged group travels as its header with its rows stacked behind, and its rows unfold where it lands. Esc, or leaving the list, springs it back. ⌥↑/⌥↓ moves glide, and folding a group rolls its rows in and out. Dragging is pointer-driven now, so it works the same in the desktop app's WebKit.
- Liquid tabs. Switching query/table or connection tabs pours the highlight toward the new tab, its leading edge first and its tail catching up; a new tab buds out of the one beside it, a closed one melts into the neighbour taking its place, and the rest slide over.
- Overlays share one motion. Dialogs and the command palette spring up out of a dim that fades in by its color (so a glass dialog is blurred from its first frame), and leave with a quick fade and shrink. Menus, pickers, selects, context menus and popovers grow out of what opened them (the point nearest the pointer or the focused control) and fade back toward it; editor tooltips and hover tooltips drop in. The settings sheet slides in from the right edge on a spring, glass the whole way, and slides back out. Error toasts spring in from the right edge, the others moving aside as one comes or goes, and slide out when closed; the "nothing to run" note rises in and fades. Closing is unchanged (focus goes back at once): what plays is an inert copy.
- Panels and the schema tree. Tree nodes and sections unroll and roll up (a short list's rows drop in one after another, a long one just fades), the sidebar, row detail panel and console slide in and out from their edges, structure, definition and plan views fade in, and Quick Look grows into its large view and shrinks back.
- Rolling numbers. Row counts, query times, the page range, sidebar and group counts, the jobs badge and the pending-edits count roll only the digits that change, up or down. A query's status turns into its result: "Running…" becomes ✓ with the row count and time, or the error.
- The Restart to update pill unfolds from its icon with a flood of accent color, a sweep across and a ring of glow, its words sharpening into focus one by one.
Changed
- Every font and color setting is on Settings › Appearance, grouped into cards: Theme (mode, light and dark theme), Colors (accent, color table), Syntax colors (preset and colors, with the editor preview), Value colors (type colors and their colors), Fonts...
TablePeek v0.1.0
The first versioned release of TablePeek: a local-first database client with a Rust engine and a browser UI.
Added
- Engines. SQLite, PostgreSQL, MySQL/MariaDB, CockroachDB, SQL Server, Oracle (pure-Rust thin driver, no Instant Client), ClickHouse, Cassandra, ScyllaDB, MongoDB, Elasticsearch, and OpenSearch.
- Connections. Saved profiles in
~/.tablepeek/store.jsonwith passwords in the OS keychain; TLS with CA and client certificates; SSH and HTTP tunnels; environment badges and colour-coded tabs; groups on the connection home; password-sealed.tablepeekexport and import. - Data grid. Canvas grid fed by Arrow IPC streaming, with filter conditions or a raw
WHERE, multi-column sort, paging, remembered column widths, foreign-key jumps, type colours, primary-key cell edits, row insert/duplicate/delete,DEFAULT/NOW()set on the server, and explicit transactions. - Quick Look. Value editor, JSON tree, encoding/HEX inspector, and the row a foreign key points to.
- Query workbench. CodeMirror 6 editor with schema-aware completion (joins from foreign keys, function signatures, templates), query tabs, snippets, history and favourites, safe mode for unqualified
UPDATE/DELETE, visualEXPLAINplans, cancellation, and chart and pivot views. - Transfer. CSV/JSON import; CSV/JSON/XML/SQL export; SQL dump and restore, all as cancellable background jobs.
- Schema and server tools. Sidebar tree of tables, views, functions, triggers and sequences; Structure and DDL tabs; table and database creation; server info with sessions; an ER diagram.
- MongoDB workbench. Documents, Aggregation, Schema, Validation, Indexes, Explain and Changes tabs; mongosh tabs; import and export; GridFS; Atlas Search indexes; a performance tab.
- Search engines. Query DSL, SQL, and a Dev Tools console for Elasticsearch and OpenSearch.
- MCP.
tablepeek mcp, a stdio MCP server with read-only schema and query tools for SQL engines, MongoDB, and the search engines. - Settings and themes. Settings grouped by the part of the screen they change, per-area fonts, 50 built-in themes plus Base16/VS Code theme import, and an English and Korean interface.
- Security. Loopback-only listener, a per-run access token, and Host header checks.
- Releases. Prebuilt archives for macOS (Apple silicon and Intel), Linux (x86_64 and aarch64), and Windows (x86_64) on GitHub Releases with
SHA256SUMS, beside source builds. - Version and updates.
tablepeek --versionandGET /api/versionreport the version, commit, build kind (release or source), and target. An in-app notice says when a newer stable release is out, with a link to its notes, update steps for release and source installs, and "skip this version". GitHub Releases is checked at most once a day and nothing is shown when offline. Turn the check off under Settings > General or withTABLEPEEK_NO_UPDATE_CHECK=1;TABLEPEEK_UPDATE_URLpoints it at another endpoint.