Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
8bdcdf8
Polish the interface and add four themes
broisnischal Sep 15, 2026
443b6dd
Fix AI turns that finish with no message
broisnischal Sep 15, 2026
0066b0b
Fix scroll lag, resize judder and grid zoom fonts
broisnischal Sep 16, 2026
ff2d5bd
Move the sidebar list count into the section headers
broisnischal Sep 17, 2026
097be9d
Add a dev-only frame-rate HUD
broisnischal Sep 17, 2026
e0b8728
Land on Tables after switching database
broisnischal Sep 17, 2026
ef6f5c2
Open the only match when Enter is pressed in the sidebar filter
broisnischal Sep 17, 2026
84ccdd9
Stop the structure grid drawing a field inside every cell
broisnischal Sep 17, 2026
7dae79e
Put the sidebar filter's Enter rule under test
broisnischal Sep 17, 2026
9e85427
Open the filtered row by clicking it, not by rebuilding what a click …
broisnischal Sep 17, 2026
bb8065c
Make the flush-cell rule actually win
broisnischal Sep 17, 2026
d77aad1
Count the rows on screen, not a model of them
broisnischal Sep 17, 2026
9aa653b
Let the webview render at the display's real refresh rate
broisnischal Sep 17, 2026
efbafd5
Fold Pinned into the Tables tab and stop the list jumping
broisnischal Sep 17, 2026
7c5454e
Give each tab its own structure view
broisnischal Sep 17, 2026
2182f29
Stop framing inputs whose container is already the frame
broisnischal Sep 17, 2026
a039807
Fix every numeric server setting failing to apply
broisnischal Sep 17, 2026
144335a
Add the JSONPath union selector, and stop it answering wrongly
broisnischal Sep 17, 2026
0fc4408
Add grid appearance settings, and fix row spacing never repainting
broisnischal Sep 17, 2026
205ecf8
Stop telemetry firing on dev runs, and tear it down on hot update
broisnischal Sep 17, 2026
2c656d8
Patch the fixable dependency advisories
broisnischal Sep 17, 2026
cb8b1d8
Stop the JSON expand panel flickering against the rows it sits between
broisnischal Sep 18, 2026
cd6f18e
Revert "Stop the JSON expand panel flickering against the rows it sit…
broisnischal Sep 18, 2026
4f176ad
Round the eased scroll offset on every frame, not just the last one
broisnischal Sep 18, 2026
0d25d18
Keep the eased scroll fractional, and get the per-cell path off store…
broisnischal Sep 18, 2026
c960be6
Say why a Data Diff picker is empty instead of going dead
broisnischal Sep 18, 2026
4f58fb9
Add refresh to Data Diff, by button and by Mod+R
broisnischal Sep 18, 2026
498b8b9
Drop the underline from the diff filter tabs
broisnischal Sep 18, 2026
2456c08
Match the enum cell editor to the filter-condition menu
broisnischal Sep 18, 2026
bb04d82
Log every exit of the macOS fps unclamp
broisnischal Sep 18, 2026
f7b9337
Let a high-refresh Linux display opt into the GPU compositor
broisnischal Sep 18, 2026
8f5a7e4
Make a cell transform edit the cell, not just copy it
broisnischal Sep 18, 2026
aabe265
Stop an expanded row swallowing clicks on the header
broisnischal Sep 18, 2026
e7f21b3
Let the related-rows panel be selected and copied
broisnischal Sep 18, 2026
79ff3a3
Unstick the Instance Insights tables, and tighten how they read
broisnischal Sep 18, 2026
d74f7ca
Decode Postgres oid, xid, xid8 and pg_lsn instead of showing bytes
broisnischal Sep 18, 2026
c23294d
Fix tab cycling on every platform, in both directions
broisnischal Sep 18, 2026
e736a9a
Stop Postgres backups writing NULL where the data was
broisnischal Sep 19, 2026
0ab4034
Keep the instant when a timestamp cell is edited
broisnischal Sep 19, 2026
509eb19
Escape SQL parameter values by the target engine's rules
broisnischal Sep 19, 2026
2566d4f
Generate migration SQL from a schema snapshot diff
broisnischal Sep 19, 2026
ab7c4b8
Import rows from CSV, TSV and JSON files
broisnischal Sep 19, 2026
eff3eea
Run SQL inside an explicit transaction
broisnischal Sep 19, 2026
4443d7c
Stop a dead pooled connection stalling the first query after an idle
broisnischal Sep 19, 2026
ab19beb
Add settings for the row-number gutter and the menu bar
broisnischal Sep 21, 2026
45fb06e
Sit menu items on a concentric radius and open menus without a slide
broisnischal Sep 21, 2026
8ed0078
Make the grid's editors, menus and cursor behave like one surface
broisnischal Sep 21, 2026
ecce2af
Give the sidebar one tab stop, a visible cursor and the system schemas
broisnischal Sep 21, 2026
ce897e4
Put a menu bar in the title bar and let the window open a second one
broisnischal Sep 21, 2026
ea5899e
Wire the new chrome up and rebuild the quick-access page
broisnischal Sep 21, 2026
309ba25
Make Apply and Reset one control, and offer the SQL without running it
broisnischal Sep 21, 2026
366f769
Let a pending setting be discarded, and stop the extensions page shou…
broisnischal Sep 21, 2026
85155ef
Say which version the app just updated to, and link the changelog
broisnischal Sep 21, 2026
b6d9a8d
Draw every shortcut as keycaps, and make one menu recipe
broisnischal Sep 21, 2026
bae0b98
Dock the cell editor under the grid, and make the panels match it
broisnischal Sep 21, 2026
29047a9
Move find & replace into the sidebar, and drop back/forward
broisnischal Sep 21, 2026
93c62b0
Rebuild the connection screen, and stop the provider panels hanging
broisnischal Sep 21, 2026
f18fcf5
Make every dialect list what it actually has
broisnischal Sep 21, 2026
3c19486
Run every dialect in Docker, with the same schema in each
broisnischal Sep 21, 2026
ec83986
Cap the toast stack, and give the time extension real settings
broisnischal Sep 21, 2026
33887e1
Give every provider the same searchable database dropdown
broisnischal Sep 21, 2026
f040d69
Ask Neon for the scope that can read a connection URI
broisnischal Sep 21, 2026
a080979
Say when a Supabase project is paused, and fall back to its direct host
broisnischal Sep 21, 2026
4408409
Say only what was verified about the SQL Server handshake
broisnischal Sep 21, 2026
a40e9b2
Keep find & replace out of the key columns
broisnischal Sep 21, 2026
61f3b65
Let the calendar's columns share the row
broisnischal Sep 21, 2026
6d17815
Give close-all-tabs a chord that can actually fire
broisnischal Sep 21, 2026
a59ea4f
Stop a click scrolling the grid sideways
broisnischal Sep 21, 2026
a66cb5c
Open a JSON cell in the dock, as a tree, without Monaco
broisnischal Sep 22, 2026
7290bc6
Let Escape close the cell dock, and find text inside the value
broisnischal Sep 22, 2026
d50af79
Give the toolbar one corner, the one app.css asks for
broisnischal Sep 22, 2026
f852d23
Act on all the pins at once from their own header
broisnischal Sep 22, 2026
d4041a3
Make the pinned header's actions work, and give them the edge
broisnischal Sep 22, 2026
62be031
Space the pinned header's actions so they stop overlapping
broisnischal Sep 22, 2026
4de2c13
Revert a cell edit from the dock, and drop the word "Copy"
broisnischal Sep 22, 2026
6fac4b4
Make the focus outline render at all
broisnischal Sep 22, 2026
d7f6ade
Tell a dropped pool apart from an unreachable host
broisnischal Sep 22, 2026
f528baf
Trap and restore focus in the hand-rolled dialogs
broisnischal Sep 22, 2026
ca40200
Use MySQL's own dolphin
broisnischal Sep 22, 2026
2700c7c
Add the editor's find chords, and Any column to find and replace
broisnischal Sep 22, 2026
23359e2
Rework the connection dialog: keyboard path, duplicates, clipboard
broisnischal Sep 22, 2026
465744b
Fetch wide columns as a size, not a value
broisnischal Sep 22, 2026
8094597
Never serve a stale column list, and make Load reachable
broisnischal Sep 22, 2026
023761d
Stop the database list blanking on every switch
broisnischal Sep 22, 2026
7898120
Let a chord wrap instead of losing its last key
broisnischal Sep 22, 2026
4bce348
Make the grid's relationship columns and docks work like the rest of it
broisnischal Sep 22, 2026
d5457e1
State a failed table load where the grid would be, and keep Disconnect
broisnischal Sep 22, 2026
a9bf5e6
Load a capped cell from the cell itself, and put it behind a setting
broisnischal Sep 22, 2026
3e96c8b
Give the cell menu's quick filters and Duplicate row their chords
broisnischal Sep 22, 2026
4a84d13
Duplicate a row into the insert draft instead of writing it
broisnischal Sep 22, 2026
fc55b42
Load a whole value, and keep the dock usable at 18 MB
broisnischal Sep 22, 2026
7c52bd8
Keep a 40 MB value from taking the app down with it
broisnischal Sep 22, 2026
f0a8fb3
Make F5 refresh the table, not the app
broisnischal Sep 22, 2026
8f5608f
Stop the grid swallowing Alt+Backspace, and page a huge raw value
broisnischal Sep 22, 2026
d4c808f
Edit a huge value through the window, and stop paying for it per frame
broisnischal Sep 22, 2026
2ddd195
Bound a page by text length, and keep the easter egg out of the cycle
broisnischal Sep 22, 2026
d0a843e
Fix the insert draft's tab behaviour, its JSON copies, and Find on ob…
broisnischal Sep 22, 2026
757f154
Stage as many new rows as you want, not one
broisnischal Sep 22, 2026
c5b338b
Stop the staged rows stealing each other's caret
broisnischal Sep 22, 2026
5a3cd55
Make the staged band a real editing surface
broisnischal Sep 22, 2026
a93c966
Make the staged band agree with the grid it sits on
broisnischal Sep 22, 2026
5bcd6da
Add the changeset for this branch
broisnischal Sep 22, 2026
1d99ca6
Say a required field is empty before the database does
broisnischal Sep 22, 2026
289a0f3
Put the staged rows on the columns they belong to
broisnischal Sep 22, 2026
f1bb984
Note the staged-row alignment fix in the changeset
broisnischal Sep 22, 2026
3a64ffe
Let a field inside the grid keep its own editing keys
broisnischal Sep 22, 2026
564bed5
Say which keys the Add button answers to
broisnischal Sep 22, 2026
c2d5675
Load a large value into the cell it belongs to
broisnischal Sep 22, 2026
a1c682a
Group the changeset the way the changelog is grouped
broisnischal Sep 22, 2026
6236520
Point every address at the repo's new home
broisnischal Sep 22, 2026
8fb4621
Write the changelog this release actually earned
broisnischal Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions .changeset/stroke-2-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
### 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 rows comfortably under the cap on disk were still shipping megabytes each. Settings → Load large values on demand turns the whole thing off and restores the old behaviour.

- **A capped cell says what it holds and loads on request.** The grid draws `361 KB jsonb` with a download button beside the copy one; it turns into a spinner and fills that cell, and only that cell. The dock's own Load button fetches up to 8MB - a `<textarea>` handed more renders nothing at all in this webview - and past 2MB the panel stops doing whole-value work: the JSON tree waits until asked for, Find stops walking the string twice per keystroke, the highlight layer stands down, and wrapping is off, because one 18MB line laid out across the pane is the most expensive thing that panel can be asked to do. Values that large are read through a paged window rather than a textarea, editable when the whole value is present and read-only when it is not, since staging a value that was cut at the ceiling would write what loaded over what did not.

#### Scrolling and rendering

- **The webview renders at the display's real refresh rate**, and a high-refresh Linux display can opt into the GPU compositor.

- **Scroll lag, resize judder and grid zoom fonts are fixed.** The eased scroll stays fractional and rounds its offset every frame rather than only the last one, the per-cell path is off store reads, and the grid counts the rows on screen instead of a model of them.

- **Telemetry no longer fires on dev runs** and tears itself down on hot update.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
blank_issues_enabled: true
contact_links:
- name: Security vulnerability
url: https://github.com/broisnischal/stroke/security/advisories/new
url: https://github.com/stroke-app/stroke/security/advisories/new
about: Report privately. Please do not open a public issue.
- name: Question or help
url: https://stroke.click
Expand Down
23 changes: 12 additions & 11 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Build Stroke for Linux, Windows, and macOS and publish to GitHub Releases.
#
# Releases, the updater's latest.json and the Scoop bucket all live in THIS
# repo. Every URL baked into a shipped app points at github.com/broisnischal/
# stroke, so that name has to keep resolving here — see RELEASES_REPO below.
# repo. Builds shipped before the move to the stroke-app org point at
# github.com/broisnischal/stroke, which GitHub redirects here. That redirect is
# what keeps their updater working, so that repo name must never be reused.
#
# Create a release:
# git tag v0.1.0
Expand Down Expand Up @@ -81,10 +82,10 @@ jobs:

\`\`\`sh
# macOS
brew install --cask broisnischal/tap/stroke
brew install --cask stroke-app/tap/stroke

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

Expand Down Expand Up @@ -400,7 +401,7 @@ jobs:
add('linux-x86_64', 'sig-linux/updater.sig', `${BASE}/stroke_amd64.AppImage.tar.gz`)
add('windows-x86_64', 'sig-windows/updater.sig', `${BASE}/stroke_x64-setup.nsis.zip`)

const notes = extractChangelog(VERSION) || `See https://github.com/broisnischal/stroke/releases/tag/v${VERSION}`
const notes = extractChangelog(VERSION) || `See https://github.com/stroke-app/stroke/releases/tag/v${VERSION}`

const out = {
version: VERSION,
Expand All @@ -422,7 +423,7 @@ jobs:
run: gh release upload "$TAG" --repo "$RELEASES_REPO" latest.json --clobber

# ── 4. Refresh the Scoop manifest ────────────────────────────────────────────
# `scoop bucket add stroke https://github.com/broisnischal/stroke` clones
# `scoop bucket add stroke https://github.com/stroke-app/stroke` clones
# THIS repo anonymously and reads bucket/stroke.json, so the manifest is
# committed straight to the default branch.
update-scoop:
Expand All @@ -442,7 +443,7 @@ jobs:
run: |
VERSION="${TAG#v}"
EXE="stroke_${VERSION}_x64-setup.exe"
URL="https://github.com/broisnischal/stroke/releases/download/${TAG}/${EXE}"
URL="https://github.com/stroke-app/stroke/releases/download/${TAG}/${EXE}"

# Hash the published installer so the manifest is always accurate.
curl -fsSL -o "$EXE" "$URL"
Expand All @@ -455,11 +456,11 @@ jobs:
const manifest = {
version: VERSION,
description: 'Fast desktop database client for PostgreSQL, MySQL, SQLite, and Cloudflare D1',
homepage: 'https://github.com/broisnischal/stroke',
homepage: 'https://github.com/stroke-app/stroke',
license: 'Freeware',
architecture: {
'64bit': {
url: `https://github.com/broisnischal/stroke/releases/download/v${VERSION}/stroke_${VERSION}_x64-setup.exe#/dl.7z`,
url: `https://github.com/stroke-app/stroke/releases/download/v${VERSION}/stroke_${VERSION}_x64-setup.exe#/dl.7z`,
hash: HASH,
},
},
Expand All @@ -468,7 +469,7 @@ jobs:
checkver: 'github',
autoupdate: {
architecture: {
'64bit': { url: 'https://github.com/broisnischal/stroke/releases/download/v$version/stroke_$version_x64-setup.exe#/dl.7z' },
'64bit': { url: 'https://github.com/stroke-app/stroke/releases/download/v$version/stroke_$version_x64-setup.exe#/dl.7z' },
},
},
}
Expand Down Expand Up @@ -497,7 +498,7 @@ jobs:
echo "No TAP_DISPATCH_TOKEN — tap will self-update on its schedule."
exit 0
fi
gh workflow run update-cask.yml -R broisnischal/homebrew-tap || \
gh workflow run update-cask.yml -R stroke-app/homebrew-tap || \
echo "Tap dispatch failed — tap will self-update on schedule."

# ── 5. Publish the release (un-draft) — ONLY after everything succeeded ───────
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,5 @@ src-tauri/src/**/*.tmp.*
dummy.txt
file.txt
**/.claude/phobos-state.md
**/.claude/phobos-activity.log
**/.claude/phobos-benchmark.jsonl
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ a change from your machine into a release.

## Before you start

- **Bugs** — [open an issue](https://github.com/broisnischal/stroke/issues)
- **Bugs** — [open an issue](https://github.com/stroke-app/stroke/issues)
with your OS, the database engine, and steps to reproduce. Screenshots or a
screen recording help a lot.
- **Features** — open an issue first so we can agree on the shape before you
Expand All @@ -19,7 +19,7 @@ You need [Node.js](https://nodejs.org) 20.19+ (or 22.12+ — CI builds on 22)
and the [Rust toolchain](https://rustup.rs).

```bash
git clone https://github.com/broisnischal/stroke
git clone https://github.com/stroke-app/stroke
cd stroke
npm install
npm run tauri # full desktop app in dev mode (hot-reloads)
Expand Down
Loading
Loading