Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f8378a6
Read the clipboard only when the paste bar is clicked
broisnischal Sep 23, 2026
8aba95b
Fade the window in once, on its first complete screen
broisnischal Sep 23, 2026
bfd62c8
Stop the grid flickering when a table or its related rows open
broisnischal Sep 23, 2026
2179e75
Drop the connection details from the new tab
broisnischal Sep 23, 2026
f729d4b
Build the release installers locally, Windows included
broisnischal Sep 23, 2026
cad4128
Add the changeset for this branch
broisnischal Sep 23, 2026
f793d60
Stop the clipboard permission dialog on Windows
broisnischal Sep 24, 2026
5f9c985
Skip method definitions in the lifecycle import check
broisnischal Sep 24, 2026
6306de3
Add a CodeMirror editor component for code-shaped values
broisnischal Sep 24, 2026
3572cc2
Edit cell values in CodeMirror instead of a painted textarea
broisnischal Sep 24, 2026
56eef06
Leave Mod+F and Mod+H to the code editor when it has focus
broisnischal Sep 24, 2026
46cdd85
Give the code editor's find fields the standard input shortcuts
broisnischal Sep 24, 2026
c812de2
Walk the sidebar table list with Shift+Tab on Linux
broisnischal Sep 24, 2026
9311255
Match Shift+Tab by physical key in the database and connection lists
broisnischal Sep 24, 2026
c405ce9
Show the connection row focus ring for keyboard focus only
broisnischal Sep 24, 2026
18eee06
Keep Hide all reachable in the columns menu
broisnischal Sep 24, 2026
a2693cb
Keep the related rows on screen while the next lookup loads
broisnischal Sep 24, 2026
9f4a4f6
Steady the license activation form and its celebration
broisnischal Sep 24, 2026
b8d40c8
Hold the trial screen until activation has finished celebrating
broisnischal Sep 24, 2026
f9cb7e5
Group the new tab's Quick access label with its tiles
broisnischal Sep 24, 2026
62c21d4
Paint the page background before the bundle loads
broisnischal Sep 24, 2026
24f5e38
Paint the webview backdrop on Windows and Linux too
broisnischal Sep 24, 2026
0ca2ec9
Keep the window hidden until its first finished screen
broisnischal Sep 24, 2026
fe489dd
Hold back the reconnect overlay's ring and label for 350ms
broisnischal Sep 24, 2026
da441bc
Open a reconnecting start straight onto its tables
broisnischal Sep 24, 2026
3ea0c80
Quit when the last window closes, with no tray icon
broisnischal Sep 24, 2026
93498bb
Zoom the ER diagram with Ctrl+wheel and scroll it with the wheel
broisnischal Sep 24, 2026
deda6d3
Bring the changeset up to date for 2.1.0
broisnischal Sep 24, 2026
9a2088b
Write each release's changelog into its release notes
broisnischal Sep 24, 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
19 changes: 19 additions & 0 deletions .changeset/fix-bug-v2.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
### 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
17 changes: 10 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,10 @@ jobs:

# Extract changelog for this version from CHANGELOG.md.
# Grabs everything between the matching "## [X.Y.Z]" header and the next one.
VERSION="${TAG#v}"
# VERSION goes in the environment: it used to trail the script as
# `VERSION=...`, which node receives as an argument, so the script
# looked for "## [undefined]" and every release said "No changelog".
export VERSION="${TAG#v}"
CHANGELOG=$(node -e "
const fs = require('fs')
const lines = fs.readFileSync('CHANGELOG.md', 'utf8').split('\n')
Expand All @@ -69,7 +72,7 @@ jobs:
if (inside) out.push(l)
}
process.stdout.write(out.join('\n').trim())
" VERSION="$VERSION")
")

cat > /tmp/notes.md << EOF
${CHANGELOG:-No changelog available for this release.}
Expand All @@ -78,7 +81,7 @@ jobs:

### Install

**Easiest — package managers (no security warnings):**
**Package managers (no security warnings):**

\`\`\`sh
# macOS
Expand All @@ -91,13 +94,13 @@ jobs:

**Or download directly below:**

**macOS** — \`stroke_*_aarch64.dmg\` (Apple Silicon) · \`stroke_*_x64.dmg\` (Intel)
**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**.
**Windows:** \`stroke_*_x64-setup.exe\` (recommended) · \`.msi\`
> Unsigned. On SmartScreen, click **More info**, then **Run anyway**.

**Linux** — \`.deb\` · \`.rpm\` · \`.AppImage\`
**Linux:** \`.deb\` · \`.rpm\` · \`.AppImage\`

Built from \`${SHA}\`.
EOF
Expand Down
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,20 @@ Or use the included Arch helper:
npm run tauri:build:arch
```

**Release installers on your own machine** — no CI needed:

```bash
npm run tauri:build:mac # macOS .app + .dmg (on a Mac)
npm run tauri:build:win # Windows x64 setup .exe - native on Windows,
# cross-compiled from macOS/Linux
npm run tauri:build:local -- mac-x64 # also: host (default), linux
```

The Windows cross-build needs NSIS, LLVM and `cargo-xwin` (macOS:
`brew install nsis llvm && cargo install --locked cargo-xwin`); the script checks
for each and prints what is missing. macOS and Linux bundles only build on their
own OS. Details and the DuckDB workaround are in `scripts/build-local.mjs`.

---

## Contributing
Expand Down
13 changes: 12 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,17 @@
theme = prefersDark ? 'dark' : 'light'
}
document.documentElement.dataset.theme = theme
if (!lightThemes.includes(theme)) document.documentElement.classList.add('dark')
const isLight = lightThemes.includes(theme)
if (!isLight) document.documentElement.classList.add('dark')
// The page boots at opacity 0 and stays there until the first finished
// screen, so <html> must carry a painted background of its own - with
// nothing but the transition below, a transparent root shows the
// webview's white backdrop for the whole of startup. Inline, because the
// theme stylesheet arrives with the bundle, well after the first paint.
// These two are the base light/dark --background, and they match
// LIGHT_SURFACE / DARK_SURFACE in src-tauri/src/lib.rs so the window,
// the webview and the page all come up the same colour.
document.documentElement.style.backgroundColor = isLight ? '#f7f7f7' : '#080808'
let zoom = 1
if (parsed?.zoom != null) zoom = Number(parsed.zoom)
else if (parsed?.fontSize != null) zoom = Number(parsed.fontSize) / 14
Expand All @@ -41,6 +51,7 @@
const prefersDark = window.matchMedia?.('(prefers-color-scheme: dark)').matches !== false
document.documentElement.dataset.theme = prefersDark ? 'dark' : 'light'
if (prefersDark) document.documentElement.classList.add('dark')
document.documentElement.style.backgroundColor = prefersDark ? '#080808' : '#f7f7f7'
}
;(function () {
var ua = navigator.userAgent || ''
Expand Down
Loading
Loading