Skip to content

Releases: stroke-app/stroke

Stroke v2.2.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 11:53

New Features

  • Alt+J previews the whole row as JSON in the bottom dock, and follows the cursor from row to row. Also on the cell right-click menu
  • JSON colours are selectable in Settings → Appearance: Auto, Vivid, Ocean, Solarized, GitHub and Monochrome

Bug Fixes

  • Opening an array cell no longer takes the view down with "This view hit an error"
  • Scrolling no longer tears, leaving a band of repeated rows above a seam
  • A cell holding multi-line text reads on one line instead of showing gaps where the line breaks were
  • Control characters show what they are instead of an empty box
  • The switch keeps its thumb inside its track at every zoom level

Changes

  • Array columns read as JSON, the same form the editor and the jsonb column beside them already used
  • The array editor reads as one list instead of a stack of separate fields, and its row controls stay put instead of appearing under the pointer
  • The expanded row and its JSON tree sit on one type scale, and a key's colon sits against the key
  • Settings descriptions are one line each instead of a paragraph
  • Opening a schema with hundreds of tables costs one icon-settings subscription instead of one per icon

Install

Package managers (no security warnings):

# macOS
brew install --cask stroke-app/tap/stroke

# Windows
scoop bucket add stroke https://github.com/stroke-app/stroke
scoop install stroke

Or download directly below:

macOS: stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows: stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info, then Run anyway.

Linux: .deb · .rpm · .AppImage

Built from 6ac02d73714d263e6d266d24760652a1c6e66bab.

Stroke v2.1.3

Choose a tag to compare

@github-actions github-actions released this 25 Sep 09:13

New Features

  • Space previews the focused cell, Shift+Space opens it with the caret already in the editor
  • Line numbers in the cell editor toggle with Alt+L
  • Stroke's mark and name show while the app starts

Bug Fixes

  • Soft wrap no longer freezes the app on a cell held on one very long line
  • Space no longer types a space into the cell it was meant to preview
  • Escape from the cell editor puts focus back on the cell it came from
  • The window no longer starts on a black screen
  • Confirm dialogs show which button is focused
  • Related rows follow the cursor sideways across foreign key columns
  • Related rows draw in the table style you selected
  • The Load button on a cell updates the preview below it
  • A value past the size cap opens in the preview instead of a message about it
  • Ctrl+F focuses the search box in Find in database
  • The cell editor bar keeps its buttons on screen at any width

Changes

  • Filter, sort, columns and reset move to Alt+A, Alt+S, Alt+C and Alt+R
  • Alt+A opens the filter on the column the cursor is already on
  • Find in database searches as you type, and Escape clears it
  • Soft wrap and line numbers are remembered from one cell to the next
  • Opening and scrolling related rows is faster

Install

Package managers (no security warnings):

# macOS
brew install --cask stroke-app/tap/stroke

# Windows
scoop bucket add stroke https://github.com/stroke-app/stroke
scoop install stroke

Or download directly below:

macOS: stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows: stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info, then Run anyway.

Linux: .deb · .rpm · .AppImage

Built from 255e23966af772e5b24f3a9b230811f541ce2ceb.

Stroke v2.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 06:04

Bug Fixes

  • The update dialog offers a Retry button when a check or a download fails, instead of leaving the error on screen with nothing to do about it.
  • A failed check no longer says "Checking for updates…" in its header while showing the error underneath, and a long endpoint URL wraps inside the dialog rather than running past its edge.

Changes

  • Update checks give up after 15 seconds. Without a bound they inherited the HTTP stack's default and could sit on "Checking for updates…" long after the request was dead.
  • Downloading an update no longer redraws the dialog on every network chunk. Progress is published once a frame, which takes the redraw count for a 100MB build from thousands down to about one per 16ms.

Install

Package managers (no security warnings):

# macOS
brew install --cask stroke-app/tap/stroke

# Windows
scoop bucket add stroke https://github.com/stroke-app/stroke
scoop install stroke

Or download directly below:

macOS: stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows: stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info, then Run anyway.

Linux: .deb · .rpm · .AppImage

Built from 8b26ccc31afa24c8e3762c9aea63c8810607f46d.

Stroke v2.1.1

Choose a tag to compare

@github-actions github-actions released this 25 Sep 05:06

Bug Fixes

  • Closing the window quits Stroke again. 2.1.0 dropped the tray and the hide-on-close handler that went with it, which let close run through to destroy for the first time. destroy was never in the capability file, so the ACL refused it and the window stayed put. With no tray and no window decorations, that left no way to quit the app at all.
  • Second windows (Ctrl/Cmd+Shift+N) respond to their title bar again. The capability only covered the window labelled main, so every control on a second window (close, minimize, maximize, and dragging the bar) was denied.

Install

Package managers (no security warnings):

# macOS
brew install --cask stroke-app/tap/stroke

# Windows
scoop bucket add stroke https://github.com/stroke-app/stroke
scoop install stroke

Or download directly below:

macOS: stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows: stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info, then Run anyway.

Linux: .deb · .rpm · .AppImage

Built from 4fd0d997fef73b537a43d45f108472bc26988bd8.

Stroke v2.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 10:37

New Features

  • Cell values open in a code editor with line numbers, folding, and find and replace
  • ER diagram: Ctrl+scroll zooms, scroll pans, Shift+scroll pans sideways
  • Build release installers locally with npm run tauri:build:mac and npm run tauri:build:win

Bug Fixes

  • Window no longer flickers on startup
  • A quick reconnect on startup opens straight onto your tables
  • Closing the window quits Stroke instead of leaving it running in the tray
  • No clipboard permission prompt on Windows when opening the connect dialog
  • Grid no longer flickers when switching tables or opening related rows
  • Related rows stay on screen while the next lookup loads
  • Hide all in the columns menu stays available after relationship columns load
  • Shift+Tab moves up the sidebar, database and connection lists on Linux
  • Clicking a saved connection no longer leaves a focus outline on it
  • License activation no longer stutters or drops confetti over the app

Changes

  • The new tab no longer repeats connection details already shown in the title and status bar

Install

Package managers (no security warnings):

# macOS
brew install --cask stroke-app/tap/stroke

# Windows
scoop bucket add stroke https://github.com/stroke-app/stroke
scoop install stroke

Or download directly below:

macOS: stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows: stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info, then Run anyway.

Linux: .deb · .rpm · .AppImage

Built from ed6f128e3b671ea1a938e70a8752a2a1d69c8385.

Stroke v2.0.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 11:28

New Features

Editing

  • Stage as many new rows as you want. Add and Duplicate append, so pressing either three times gives three rows stacked under the header, each editable, each with its own tick and its own discard. The first row's tick inserts the batch, as do Apply and ⌘↵, under one confirm - three inserts is one list of three statements, not three dialogs. A row that fails stays staged with everything still typed into it. Right-click a staged cell to generate a UUID or CUID, drop in now/today, copy, paste, clear back to the column's default, or fill that column in every staged row. Alt+N stages a row, Alt+D copies the focused row into one, Mod+Escape discards them all, and the band belongs to the table it was opened on rather than following you between tabs.
  • Duplicate no longer writes on the click. It fills the insert draft instead, so nothing reaches the database until it is submitted, and the key and any generated column take their defaults rather than the source row's values.
  • Import rows from a file. CSV, TSV and JSON, mapped to the table's columns before anything is written.
  • Run SQL inside an explicit transaction. The console can open one, run against it and commit or roll back, instead of every statement standing alone.
  • Generate migration SQL from a schema diff. Take a snapshot, change the schema, and read back the statements that would take one to the other.
  • A cell transform edits the cell. It used to compute a value and put it on the clipboard, which is one step short of the thing you wanted.

The cell dock

  • The cell editor lives under the grid. A docked panel rather than a floating box over the rows you are trying to read, with the other panels matched to it, Escape to close, and Find inside the value.
  • A JSON cell opens as a tree. No Monaco, so it costs nothing until you ask for it, and it reads as structure rather than as one long line.

Connections

  • The connection screen is rebuilt. One tab stop with arrows walking the list, Enter to open and ⌘↵ to connect, a plain Connect button, database names instead of connection strings, and provider panels that no longer hang while they load.
  • Every provider gets the same searchable database dropdown. Neon asks for the scope that can read a connection URI, a paused Supabase project says so and falls back to its direct host, and saving a connection that points at a database already on file asks first.
  • The paste bar fills itself from the clipboard. On every window focus, so a URL copied from a dashboard is already waiting when you switch back.

Interface

  • Four new themes, a menu bar in the title bar, and a second window from the same session.
  • Every shortcut draws as keycaps. One menu recipe across the app, so a chord looks the same wherever it is shown.
  • Per-tab structure view, settings for the row-number gutter, the menu bar and grid appearance, and a sidebar that folds Pinned into Tables, keeps its counts in the section headers and stops the list jumping.
  • Find and replace moved into the sidebar and gained an Any column option, the editor's find chords (Alt+C, Alt+R, Alt+W) and Alt+X to clear.
  • The app says which version it just updated to and links that version's changelog.

Bug Fixes

The data grid

  • The staged rows sit on their columns at any scroll offset. The insert band worked out its own geometry instead of reading the canvas's: it summed the gutters by hand and left the row-number one out, and its horizontal pin was a sticky box whose behaviour depends on how wide it is, so how well it held varied with the table. Dragging a wide table sideways slid the band against the grid under it. Every x and width now comes from the same geom the canvas draws from, and the band shares the canvas's sticky anchor, so the two measure the viewport's left edge from one box. Tab inside the band scrolls the column into view, which a pinned band cannot ask the browser to do for it.
  • A field inside the grid gets the keys a field gets. The grid's undo/redo/copy listener is bound on window, so it ran before every other capture handler in the app - including the one that gives inputs their undo stack and their word deletion. ⌘Z with the caret in a staged row undid a cell edit somewhere else in the table and took the field's own ⌘Z with it. It now stands down for anything you type into, and Alt+Backspace deletes a word on Linux and Windows as well as macOS, which also stops the global "discard staged changes" binding from throwing the row away mid-sentence.
  • A large value loads into the cell it belongs to. The in-cell load stopped at 1MB on the grounds that a cell's value is what the canvas formats and the search walks - but the canvas cuts the drawn text to 400 characters and caches it, the highlighter matches that same cut string, and the row search runs in SQL. A 1.2MB resume was being refused for a cost nobody was paying. The ceiling is now the dock's 8MB, and past 1MB a JSON value stays the text it arrived as rather than being parsed and re-serialized to show forty characters of itself.
  • The search highlight follows how the search matched. It ran indexOf over a lowercased copy of the text, so with match case on it highlighted Aarav for a search that returned nothing containing it, and a regex search marked the pattern's literal characters.
  • F5 refreshes the table, not the app. It was bound to nothing, so the webview reloaded the document - tearing down the session, redialling the connection and re-reading the catalog.
  • The Add button names its shortcut. Its tooltip read "Insert row (Add)", which is the label, not a chord. It says Alt+N now, and Alt+N works from inside the staged band too.
  • A timestamp cell keeps the instant it was edited at, and Postgres oid, xid, xid8 and pg_lsn decode instead of showing their bytes.
  • An expanded row stops swallowing clicks on the header, the related-rows panel can be selected and copied, and the structure grid no longer draws a field inside every cell.
  • The database list stops blanking on every switch, and switching database lands on Tables.

Connections and queries

  • A dropped pool reads as a dropped pool. attempted to acquire a connection on a closed pool matched none of the connectivity patterns, so it read as a SQL error: no reconnect fired, and the banner sat there. Failed table loads now state themselves where the grid would be, with Reconnect for a dropped pool and Retry for everything else.
  • Disconnect survives a restart. Auto-reconnect read the last-connection id as "resume this", so quitting while disconnected came back connected.
  • A dead pooled connection no longer stalls the first query after an idle spell, and a Postgres backup no longer writes NULL where the data was.
  • SQL parameter values are escaped by the target engine's rules, not by one engine's rules everywhere.

Keyboard and focus

  • The focus ring was invisible app-wide. Tailwind v4 compiles every outline-* utility to outline-style: var(--tw-outline-style), and outline-none sets that variable to none on the element - so the outline-none + focus-visible:outline-2 pattern this app uses in about forty places applied a 2px-wide outline whose style was still none.
  • Keyboard reaches the rest of the app: the connection rail is one tab stop with arrows walking it, relationship columns join the cell cursor (Enter previews, ⇧↵ opens in a new tab, ⌘↵ in place), Alt+F / Alt+E filter by or exclude the focused value, and the hand-rolled dialogs trap focus, restore it and inert the page behind them.
  • Tab cycles correctly on every platform, in both directions, a chord that wraps keeps its last key instead of losing it, and close-all-tabs has a chord that can actually fire.

Elsewhere

  • Every numeric server setting applies, the JSONPath union selector answers correctly, Instance Insights tables unstick, a Data Diff picker says why it is empty instead of going dead, an AI turn that finishes with no message no longer hangs, and the fixable dependency advisories are patched.

Changes

  • The repo moved to the stroke-app organization. Downloads, the updater manifest and the Scoop bucket live at github.com/stroke-app/stroke, and Homebrew is now brew install --cask stroke-app/tap/stroke. Builds shipped before this release reach the new location through GitHub's redirect, so nothing installed needs reinstalling.
  • Apply and Reset are one control, and staged changes can be read as SQL without running them.
  • Every dialect runs in Docker against the same schema, so what the app claims each one supports is what was tested rather than what was assumed. The SQL Server handshake says only what was verified.

Performance

Tables with very large values

  • A table of half-megabyte cells opens in about a second instead of eleven. A jsonb column holding an uploaded file averaged 601KB a row, and SELECT * over a page moved roughly 100MB of it out of TOAST, through sqlx, across the IPC bridge and into a webview parse, for a grid that can draw forty characters of it. Wide columns are now fetched as their size: the page asks for pg_column_size, which reads the varlena header and touches no TOAST chunk, and the value itself loads per cell on demand. Which columns are wide is measured rather than assumed, and deliberately not taken from pg_stats.avg_width - ANALYZE measures the datum in the tuple, so a column whose values all live in TOAST reports the width of the 18-byte pointer; the column above measures 601KB and pg_stats says 18. One sampling query settles it in 0.67ms over 37 buffers, cached per table, and skipped entirely unless the table has TOAST worth searching. The size check also runs against the value's text length, not its compressed size: these payloads compress 2x or better, so r...
Read more

Stroke v1.24.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 06:23

No changelog available for this release.


Install

Easiest — package managers (no security warnings):

# macOS
brew install --cask broisnischal/tap/stroke

# Windows
scoop bucket add stroke https://github.com/broisnischal/stroke
scoop install stroke

Or download directly below:

macOS — stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows — stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info → Run anyway.

Linux — .deb · .rpm · .AppImage

Built from c9cec151542fc03ce1352982f0c6e5de52b15003.

Stroke v1.23.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 12:25

No changelog available for this release.


Install

Easiest — package managers (no security warnings):

# macOS
brew install --cask broisnischal/tap/stroke

# Windows
scoop bucket add stroke https://github.com/broisnischal/stroke
scoop install stroke

Or download directly below:

macOS — stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows — stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info → Run anyway.

Linux — .deb · .rpm · .AppImage

Built from 25467a1706fc6bfef78d321945701397b9da2faf.

Stroke v1.22.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 11:55

No changelog available for this release.


Install

Easiest — package managers (no security warnings):

# macOS
brew install --cask broisnischal/tap/stroke

# Windows
scoop bucket add stroke https://github.com/broisnischal/stroke
scoop install stroke

Or download directly below:

macOS — stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows — stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info → Run anyway.

Linux — .deb · .rpm · .AppImage

Built from 6ef58149652606d89f382e2126d5fbdf007075ee.

Stroke v1.21.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 15:10

No changelog available for this release.


Install

Easiest — package managers (no security warnings):

# macOS
brew install --cask broisnischal/tap/stroke

# Windows
scoop bucket add stroke https://github.com/broisnischal/stroke
scoop install stroke

Or download directly below:

macOS — stroke_*_aarch64.dmg (Apple Silicon) · stroke_*_x64.dmg (Intel)

Ad-hoc signed. If macOS says it's "damaged", run once: xattr -cr /Applications/Stroke.app

Windows — stroke_*_x64-setup.exe (recommended) · .msi

Unsigned. On SmartScreen, click More info → Run anyway.

Linux — .deb · .rpm · .AppImage

Built from f75a850380c5b02800f497efb720b1ebb648cc1e.