Repository navigation
feat: macOS desktop app (Electron) + iOS build fixes - #1
Merged
Merged
Conversation
- apps/desktop: Electron shell that runs the QuireNote server in-process (free port + /api/health wait), serves the built web app; esbuild bundles the server, @electron/rebuild compiles better-sqlite3 for the Electron ABI, sqlite-vec ships as vec0.dylib; electron-builder produces unsigned macOS zip - server: QUIRENOTE_SQLITE3_BINDING / QUIREENOTE_SQLITE_VEC_EXT let the packaged app point at raw native binaries (normal path unchanged) - web: show ⌘ instead of Ctrl on macOS (sidebar, settings, manual, i18n strings via modKey); server address hint consistent - web fix: in the native shell with no server configured, API calls now fail fast instead of resolving to the local index.html blob (crashed the home screen via persisted query cache) - iOS: NSAllowsArbitraryLoads so the app can reach http self-hosted servers; SPM Package.resolved committed; docs for local simulator builds - docs: desktop.md (Electron build) + mobile.md local iOS build steps; README platforms badge adds macOS Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Contributor
Author
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
- server: index.html and SPA fallback served with Cache-Control: no-cache so app upgrades never run a stale entry point referencing deleted hashed chunks (Electron webview cache crashed with 'Failed to fetch dynamically imported module'); /assets/* 404 instead of index.html when a chunk is gone - manual: apply the Ctrl->⌘ transform to section summaries, not just bodies Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a macOS desktop app and fixes iOS build issues found while verifying both on a real Mac (macOS 26.6 / Xcode 26.6, iPhone 17 sim on iOS 26.5).
apps/desktop— new Electron shell. The main process starts the QuireNote server in-process on a free port, waits for/api/health, then opens aBrowserWindowon the bundled web app. Data lives in~/Library/Application Support/QuireNote/data.pnpm distproducesrelease/QuireNote-<ver>-arm64-mac.zipvia electron-builder (unsigned).Key mechanism: the server is bundled by esbuild into a single
dist/server.mjswith natives marked external;native/bin/carries onlybetter_sqlite3.node(rebuilt for the Electron ABI via@electron/rebuild) andvec0.dylib. The server resolves them through two new env hooks insqlite.ts:Normal server deployments are untouched — without the env vars, behavior is identical.
iOS fixes verified on the simulator:
api.ts: in the native shell before a server is configured, requests hit the Capacitor asset server and resolve toindex.htmlas aBlob— the persisted query cache then crashed the home screen (data?.find is not a function).request()now fails fast whenisNativePlatform() && !localStorage["quirenote.server"], so the server-onboarding sheet shows instead.Info.plist:NSAllowsArbitraryLoadsso the app can reachhttp://self-hosted servers (LAN installs).Package.resolved; local simulator build instructions added todocs/mobile.md.macOS UX polish: hardcoded
Ctrlin UI text now renders as⌘on Mac via the existingShortcut/modKeyhelpers (sidebar, settings, embed dialog, paste-blocked toast, user manual).Docs:
docs/desktop.md(build + architecture), updateddocs/mobile.mdand README platform badge (web · macOS · iOS · Android).Verified:
QuireNote.applaunches and renders seeded data; iOS app connects to a live server at127.0.0.1:8787and shows the same notebooks.pnpm typecheckandpnpm lintclean.Link to Devin session: https://app.devin.ai/sessions/38b13a08ac3248aeb2d431674d589430
Open in Devin Desktop: https://app.devin.ai/desktop/session/38b13a08ac3248aeb2d431674d589430?variant=devin
Requested by: @Mar7thLover