Skip to content

Troubleshooting

Franciszek Ryszka edited this page Jul 24, 2026 · 3 revisions

Troubleshooting

App won't open on macOS ("damaged" / unidentified developer)

The build is unsigned. Right-click the app → Open, or run:

xattr -cr /Applications/SnipVault.app

See Installation for details.

Windows SmartScreen blocks the installer

Unsigned build. Click More info → Run anyway.

pnpm keeps trying to reinstall / crashes after moving the project

Symptom: running any pnpm command triggers a reinstall, prompts to purge node_modules, or crashes (e.g. ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY, or a libuv assertion on Windows).

Cause: pnpm's isolated node_modules bakes the project's absolute path into node_modules/.modules.yaml. If you move or rename the project folder after installing, the recorded path no longer matches and pnpm considers the store invalid.

Fix: reinstall in the new location.

rm -rf node_modules
pnpm install --frozen-lockfile

Tauri build fails reading a permission file at an old path

Symptom: failed to read plugin permissions: failed to read file '…\<old path>\src-tauri\target\…' — the path is the project's previous location.

Cause: the Rust target/ cache stores absolute paths from before the folder was moved.

Fix: clear the Rust build cache and rebuild.

cargo clean --manifest-path src-tauri/Cargo.toml
pnpm tauri:build

ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite

Cause: pnpm 11 requires Node ≥ 22.13; you're on an older Node (e.g. 20).

Fix: upgrade Node to 22+. In CI, set node-version: 22.

next dev: "Failed to benchmark file I/O … (os error 3)"

Harmless Turbopack probe warning on Windows. The dev server still starts and serves normally; you can ignore it.

Type-check or build can't find tsc / native modules

Usually the same "moved folder" problem above, or a partial install. Re-run:

pnpm install --frozen-lockfile
pnpm exec tsc --noEmit

Desktop app shows no data / different data than the web app

They use separate database files by design (see Data Storage). The web app reads ./data/snippets.db; the desktop app reads <local data dir>/snipvault/snippets.db. Copy the snippets.db file between locations to move data.

Sync: "Couldn't reach the server" / "Server rejected the token"

(v2.2.0 — see Syncing)

  • Couldn't reach the server — the URL is wrong or the server isn't running. Check the host/port and confirm curl http://<host>:3000/api/health responds from that machine; make sure nothing (firewall/VPN) is blocking the LAN.
  • Server rejected the token — the token doesn't match the server's SNIPVAULT_TOKEN. Re-enter it in Settings → Sync server. (If the server was started with no token set, the API is open and no token is required.)

On the server, check that the container is healthy and read its logs — docker ps (look for (healthy)), docker logs -f snipvault, or a log viewer like Dozzle. See Monitoring the server in Syncing.

Sync: a deleted prompt won't stay gone, or an edit reverted

Both are expected consequences of the sync rules. Deletions and edits are resolved by most-recent updated_at across machines, so a machine with a newer copy will win on the next sync. If an edit keeps reverting, one machine's clock is likely wrong — sync compares timestamps, so keep clocks roughly aligned. Deleting again (or re-editing) on the machine you consider authoritative, then syncing, resolves it.

CI: macOS/Windows/Linux job stuck "pending" (self-hosted)

The matching runner/agent isn't online. For a laptop runner (e.g. a MacBook), it must be powered on, connected to your network/VPN, and running its runner agent. The GitLab release job waits for all build jobs, so one offline runner blocks the release.

Clone this wiki locally