You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First v0.1.3 desktop download on Apple Silicon hit the "SQLRite
is damaged and can't be opened" Gatekeeper dialog — a misleading
variant of the unsigned-app warning that shows up specifically
for (quarantined) + (ad-hoc signed) binaries on recent macOS.
The old release-body text only warned about the gentler
"unidentified developer" message and offered a right-click-Open
workaround that doesn't work for the "damaged" variant.
Replace that with the actual fix (`xattr -cr /Applications/SQLRite.app`)
across three surfaces so nobody else hits it cold:
- `.github/workflows/release.yml` — the template for future
desktop releases: Linux / macOS / Windows-specific bypass
steps, plus an explanation of why "damaged" happens (Apple
Silicon requires a signature, Tauri ad-hoc signs, quarantine
+ ad-hoc trips a stricter Gatekeeper path).
- `README.md` — the Desktop app section now lists the seven
installer artifacts per platform, links to the latest GitHub
Release, and calls out the unsigned-installer friction
inline.
- `docs/desktop.md` — new "Installing a prebuilt binary"
section covering the full download table, per-platform
bypass commands, and a paragraph on why macOS uses
"damaged" instead of "unidentified developer". Updated the
"Running from source" section to reflect `bundle.active`
now defaulting to `true` (Phase 6e) and that icons are
pre-generated + committed.
- `docs/getting-started.md` — adds a "Don't want to build from
source?" pointer to the latest desktop release.
- `docs/_index.md` — surfaces `desktop.md` in the "Start here"
list so people arriving at the developer guide find the
downloads + bypass info without drilling.
Also backfilled the already-published `sqlrite-desktop-v0.1.3`
release body with the new text via `gh release edit` so the URL
anyone hits today has the workaround (done separately, not part
of this commit).
Phase 6.1 (code signing) removes the need for any of this — this
commit just makes the gap before 6.1 lands less miserable.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SQLRite desktop app — unsigned installers for Linux (AppImage + deb), macOS (dmg, aarch64), Windows (msi).
388
+
SQLRite desktop app — unsigned installers. This release wave ships:
389
389
390
-
**⚠️ Unsigned installers**: macOS shows "SQLRite can't be opened because it is from an unidentified developer" — right-click → Open → Open to bypass. Windows SmartScreen blocks on first run — click "More info" → "Run anyway". Code signing lands in Phase 6.1.
Installers aren't code-signed yet (Phase 6.1 wires up Apple Developer ID + Windows code-signing). First-launch warnings to expect:
397
+
398
+
**macOS — "SQLRite is damaged and can't be opened" or "unidentified developer":**
399
+
400
+
```bash
401
+
xattr -cr /Applications/SQLRite.app
402
+
```
403
+
404
+
This strips the `com.apple.quarantine` attribute your browser attached on download. macOS Gatekeeper shows "damaged" (not the gentler "unidentified developer") because Tauri ad-hoc signs the binary — Apple Silicon *requires* a signature, even an ad-hoc one, but quarantined ad-hoc signatures trip a stricter Gatekeeper path. The app is fine; the signature just isn't from a registered Apple Developer ID.
405
+
406
+
**Windows — SmartScreen "Windows protected your PC":**
407
+
408
+
Click "More info" → "Run anyway".
409
+
410
+
**Linux — AppImage:**
411
+
412
+
```bash
413
+
chmod +x SQLRite_*_amd64.AppImage
414
+
./SQLRite_*_amd64.AppImage
415
+
```
391
416
392
417
See the umbrella release [v${{ needs.detect.outputs.version }}](../../releases/tag/v${{ needs.detect.outputs.version }}) for the full changelog.
Launch it with `cd desktop && npm install && npm run tauri dev`. The header's New… / Open… / Save As… buttons cover the file lifecycle; the query editor has a live line-number gutter, `⌘/` (Ctrl+/) SQL comment toggle, and selection-aware Run (highlight a statement to run just that one).
68
+
**Prebuilt installers** — download from the [latest desktop release](https://github.com/joaoh82/rust_sqlite/releases/latest):
69
+
70
+
| Platform | Files |
71
+
|---|---|
72
+
| Linux x86_64 |`.AppImage`, `.deb` (Debian/Ubuntu), `.rpm` (Fedora/RHEL) |
73
+
| macOS Apple Silicon |`.dmg`, raw `.app.tar.gz`*(Intel Macs not supported yet — universal dmg is a follow-up)*|
74
+
| Windows x86_64 |`.msi`, `.exe` (NSIS) |
75
+
76
+
> ⚠️ **Installers are unsigned** until Phase 6.1 wires up Apple Developer ID + Windows code-signing certs. First-launch friction to expect:
77
+
> -**macOS**: "SQLRite is damaged" or "unidentified developer" → run `xattr -cr /Applications/SQLRite.app` once to strip the quarantine attribute, then it opens normally. The app is fine; Tauri ad-hoc signs every macOS binary (Apple Silicon requires a signature), but quarantined ad-hoc signatures trip a stricter Gatekeeper path with the scary "damaged" wording.
> -**Linux AppImage**: `chmod +x SQLRite_*.AppImage` before launching.
80
+
81
+
**From source** — `cd desktop && npm install && npm run tauri dev`. The header's New… / Open… / Save As… buttons cover the file lifecycle; the query editor has a live line-number gutter, `⌘/` (Ctrl+/) SQL comment toggle, and selection-aware Run (highlight a statement to run just that one).
Copy file name to clipboardExpand all lines: docs/desktop.md
+52-3Lines changed: 52 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,54 @@ Lives under [`desktop/`](../desktop/).
8
8
9
9
*Screenshot: the default three-pane layout — sidebar with tables and schema on the left, query editor with line numbers up top, result grid below. Header carries New… / Open… / Save As… and shows the active database path.*
10
10
11
-
## Running it
11
+
## Installing a prebuilt binary
12
+
13
+
Since Phase 6e, every release pushes installers to a per-version GitHub Release. Grab the right artifact for your platform from the [latest desktop release](https://github.com/joaoh82/rust_sqlite/releases/latest):
14
+
15
+
| Platform | Artifact | Notes |
16
+
|---|---|---|
17
+
| Linux x86_64 |`SQLRite_<ver>_amd64.AppImage`|`chmod +x` then run directly; bundles its own libs |
| macOS aarch64 |`SQLRite_<ver>_aarch64.dmg`| Apple Silicon only (M1/M2/M3/M4) |
21
+
| macOS aarch64 |`SQLRite_aarch64.app.tar.gz`| Raw `.app` bundle — for users who don't want the dmg |
22
+
| Windows x86_64 |`SQLRite_<ver>_x64_en-US.msi`| Windows Installer package |
23
+
| Windows x86_64 |`SQLRite_<ver>_x64-setup.exe`| NSIS installer, smaller footprint |
24
+
25
+
Intel Macs and Linux aarch64 are [tracked as follow-ups](roadmap.md#phase-6e-desktop-publish) — for now those platforms build from source.
26
+
27
+
### Unsigned-installer warnings
28
+
29
+
Installers ship **unsigned** until Phase 6.1 wires up Apple Developer ID + Windows code-signing certs. Expect one of these on first launch:
30
+
31
+
#### macOS — "SQLRite is damaged and can't be opened"
32
+
33
+
Or the gentler "unidentified developer" dialog on older macOS versions. One-time fix:
34
+
35
+
```bash
36
+
xattr -cr /Applications/SQLRite.app
37
+
```
38
+
39
+
Then double-click normally. Point `xattr` at wherever the `.app` lives if you haven't moved it to `/Applications` yet.
40
+
41
+
**Why "damaged" instead of "unidentified developer"?** Apple Silicon *requires* every Mach-O binary to carry a signature — even an ad-hoc one (`codesign --sign -`), which is what Tauri applies by default. When you download the dmg, your browser attaches `com.apple.quarantine` as an extended attribute. On recent macOS, the combination of (quarantined) + (ad-hoc signed) trips a stricter Gatekeeper code path that reports "damaged" instead of the milder unsigned-app flow. Stripping the quarantine attribute with `xattr -cr` takes Gatekeeper out of the loop. The app isn't actually corrupt — the error message just isn't honest about what it's complaining about.
42
+
43
+
Once Phase 6.1 lands notarization, this bypass won't be needed; macOS will trust the binary on first launch.
44
+
45
+
#### Windows — SmartScreen "Windows protected your PC"
46
+
47
+
Click **More info** → **Run anyway**. SmartScreen remembers your choice, so subsequent launches are clean.
48
+
49
+
#### Linux — AppImage won't run
50
+
51
+
```bash
52
+
chmod +x SQLRite_<ver>_amd64.AppImage
53
+
./SQLRite_<ver>_amd64.AppImage
54
+
```
55
+
56
+
`.deb` and `.rpm` packages don't have this step — they install through the system package manager and get the executable bit from the package metadata.
57
+
58
+
## Running from source
12
59
13
60
Two prerequisites beyond the engine's toolchain:
14
61
@@ -25,13 +72,15 @@ npm run tauri dev
25
72
26
73
That builds the Rust side (incremental after the first time), boots the Vite dev server on port 1420, and opens a native window pointing at it. Hot reload works for the Svelte side; Rust changes trigger a rebuild.
27
74
28
-
For a one-off release build:
75
+
For a one-off release build that produces installers for your local platform:
29
76
30
77
```bash
31
78
npm run tauri build
32
79
```
33
80
34
-
Bundling is disabled in [`tauri.conf.json`](../desktop/src-tauri/tauri.conf.json) by default — flip `bundle.active` to `true` and plug in real app icons when you want to produce an installer.
81
+
[`tauri.conf.json`](../desktop/src-tauri/tauri.conf.json) ships with `bundle.active: true` since Phase 6e, so this builds a full set of platform-native installers (`.dmg` on macOS, `.AppImage` / `.deb` / `.rpm` on Linux, `.msi` / `.exe` on Windows) under `desktop/src-tauri/target/release/bundle/`.
82
+
83
+
Icons are pre-generated and committed at `desktop/src-tauri/icons/`. If you swap the source `icon.png`, re-run `npx tauri icon src-tauri/icons/icon.png` from `desktop/` and commit the regenerated `.icns` / `.ico` / size-specific PNGs. CI doesn't re-run this — the commit is the source of truth.
Copy file name to clipboardExpand all lines: docs/getting-started.md
+5-1Lines changed: 5 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -110,7 +110,11 @@ rust_sqlite/
110
110
111
111
## Running the desktop app
112
112
113
-
A Tauri 2.0 desktop GUI lives under [`desktop/`](../desktop/). It needs Node.js in addition to the Rust toolchain:
113
+
A Tauri 2.0 desktop GUI lives under [`desktop/`](../desktop/).
114
+
115
+
**Don't want to build from source?** Prebuilt installers (`.dmg`, `.msi`, `.AppImage`, `.deb`, `.rpm`) land on every release at [the latest desktop release page](https://github.com/joaoh82/rust_sqlite/releases/latest). They're unsigned — see [the desktop docs](desktop.md#unsigned-installer-warnings) for the one-line Gatekeeper / SmartScreen bypasses.
116
+
117
+
**From source** — needs Node.js in addition to the Rust toolchain:
0 commit comments