Troubleshooting

Fixes for common install, auth, billing, packaging, and update issues.

Symptom → likely cause → fix, grouped by area. Each entry links back to the guide that owns the subsystem. When in doubt, open the Logs page (or run pnpm dev with devtools) — most failures log a clear reason.

Install & startup

SymptomLikely causeFix
postinstall fails on native depsNode/toolchain mismatchUse Node `^20.19
Wrong pnpm versionpackageManager pin not honoredEnable corepack or install pnpm 11.1.3. See Installation.
Port already in useA stale pnpm devStop the other process; scripts/dev.mjs owns the dev port.
Blank window / renderer crashA renderer exception before mountRun pnpm dev and open devtools; check the console and the Logs page. The ErrorBoundary should show a themed fallback.

Auth

SymptomLikely causeFix
SupabaseConfigErrorScreen on launchAuth on but Supabase env missing/invalidSet VITE_SUPABASE_URL + VITE_SUPABASE_PUBLISHABLE_KEY, or set VITE_AUTH_ENABLED=false. See Authentication.
Email confirmation / reset never returns to the appDeep-link scheme not registered, or redirect URL not allow-listed in SupabaseConfirm the soar-electron:// handler is registered and add the redirect URL under Supabase → Auth → URL Configuration. See Deep Links.
Deep link works packaged but not in devDev protocol registration is per-platform and flakyVerify against a pnpm build:unpack build. See Deep Links.
Sign-in doesn't persist across restartsafeStorage encryption unavailable (e.g. no Linux keyring)Ensure an OS keyring is available; a SecureStorageError (ENCRYPTION_UNAVAILABLE) is logged. See Settings Store.

Billing

SymptomLikely causeFix
No Billing UI / features stay lockedBilling flag offSet VITE_BILLING_ENABLED=true. See Billing.
Checkout opens but nothing unlocksProduct IDs unset, or the webhook never wrote the rowSet VITE_CREEM_PRODUCT_*; confirm the subscriptions row appears. See Creem Setup.
Entitlement never updatesReading local purchase state instead of SupabaseEntitlement is read only from the subscriptions table (RLS SELECT-only). See Billing.
Webhook signature failuresWrong CREEM_WEBHOOK_SECRETRe-set the Edge secret; it lives only as a Supabase secret, never in the app .env. See Creem Setup.

Desktop shell

SymptomLikely causeFix
Notifications silent on WindowsAUMID not set, or running unpackagedThe template sets APP_USER_MODEL_ID at startup; Windows toasts are most reliable from an installed build. Confirm settings.notifications is on. See Notifications & Shortcuts.
A shortcut does nothingAccelerator conflict, or a non-global scopeCheck the startup warning about duplicate accelerators; only global-scope shortcuts register system-wide, and none ship by default. See Notifications & Shortcuts.
Window opens off-screenStale saved boundsThe store re-centers invalid bounds automatically; delete window-state.json in userData if needed. See Windows, Menus & Tray.
External link opened in-app or blockedNot https:/mailto:openExternal only allows those schemes. See Windows, Menus & Tray.

Updates

SymptomLikely causeFix
Update check errors with a feed 404UPDATE_SERVER_URL wrong, or latest*.yml not uploadedVerify the feed URL and that the metadata + installer + blockmap are hosted. See Auto Update.
macOS won't apply an updateBuild isn't signed + notarizedGatekeeper rejects unsigned replacements; sign and notarize. See Packaging.
No updates in devUpdater is a no-op unpackagedTest updates against a packaged build. See Auto Update.
No update UI at allVITE_AUTO_UPDATE_ENABLED=false, or the autoUpdate setting is offEnable the flag and toggle auto-update in Settings → Updates.

Packaging

SymptomLikely causeFix
Wrong or missing app iconSource SVGs edited but rasters not regeneratedRe-run the docs/APP_ICONS.md recipe. See Packaging.
Notarization fails or is skippedAPPLE_* env unsetThe hook no-ops without credentials (unsigned build); set APPLE_ID/APPLE_APP_SPECIFIC_PASSWORD/APPLE_TEAM_ID. See Packaging.
snap target failsBuilding Linux targets off-LinuxBuild Linux artifacts on Linux (or CI); trim the target list to what you ship.
Windows SmartScreen warningUnsigned installerProvide CSC_LINK/CSC_KEY_PASSWORD; an EV cert clears reputation instantly.

i18n

SymptomLikely causeFix
A raw key like nav.home rendersMissing translation keyAdd the key to both app/locales/en/*.json and app/locales/zh/*.json. See Internationalization.

On this page