Skip to content

Installers and updates

github-actions[bot] edited this page Oct 13, 2026 · 3 revisions

Per OS, one download that needs no Java: the desktop app with the daemon, the CLI and the Claude Code plugin inside. This page is for people installing and updating; building them is in Packaging and releasing.

Installers

OS Installer Notes
Windows x64 CodeLoupe-<v>-win-x64.exe (NSIS, per user, one click) Starts the app when it ends. An update or uninstall first stops the installation's own daemon. The uninstaller asks whether to delete the data (%LOCALAPPDATA%\codeloupe, %APPDATA%\codeloupe-desktop); /S and updates keep it.
macOS arm64, x64 CodeLoupe-<v>-mac-arm64.dmg, CodeLoupe-<v>-mac-x64.dmg Drag to Applications. Removing the app leaves the data in ~/Library/Caches/codeloupe and ~/Library/Application Support/codeloupe-desktop until it is deleted by hand.
Linux x64 CodeLoupe-<v>-linux-x86_64.AppImage, -linux-amd64.deb The AppImage copies the bundle to <userData>/daemon/<version> once, because the daemon outlives its mount. Removing the app leaves the data in ~/.cache/codeloupe and ~/.config/codeloupe-desktop.

An installed app reads real data (apiSource: daemon) and starts the daemon from its own runtime; the CLI command in Settings stays on its default and is resolved at start-up, so an update never leaves a stale path.

Installing without a warning

Nothing is paid for (docs/code-signing.md), so the installers carry no publisher signature: the Windows installer is unsigned, the macOS app is signed ad hoc (codesign -dv shows Signature=adhoc, enough for Apple Silicon to run it). Every release lists a SHA-256 for each file in SHA256SUMS.txt, and the files come from a public CI run of the tag.

OS Install Why there is no warning
Windows winget install Terrio.CodeLoupe or scoop install codeloupe (once the owner has submitted the manifests) A package manager downloads the file without the Mark of the Web, which is what SmartScreen judges.
macOS brew install --cask codeloupe The cask removes the quarantine flag after installing.
Linux the .AppImage (chmod +x) or sudo apt install ./CodeLoupe-<v>-linux-amd64.deb Nothing to allow.

A download from the browser needs one manual allow, once:

  • Windows: SmartScreen says "Windows protected your PC": More info, then Run anyway.
  • macOS: right-click the app and choose Open (then Open again), or System Settings → Privacy & Security → Open Anyway, or in a terminal xattr -dr com.apple.quarantine /Applications/CodeLoupe.app.

The manifests (packaging-manifests.zip on each release) are generated by node tools/packaging-manifests.mjs --dir <release files> --version <v> --out <dir> from the release's URLs and checksums; publishing them to winget-pkgs, a Scoop bucket or a Homebrew tap is a separate, manual step (Packaging and releasing).

Updates

The installed app looks for a newer release on GitHub 30 seconds after it starts and every six hours (Settings → Updates; Check for updates automatically switches the check off, and with it off the app never contacts anything by itself). What happens next depends on the installation:

Installation A newer release
Windows installer (NSIS), Linux AppImage Downloaded in the background, the SHA-512 and size from the release's latest.yml / latest-linux.yml checked (and, once the build embeds the project's update key, the signature of that feed, Security), then Restart and update in Settings (or the next quit) installs it. The installer stops the daemon of the old installation and replaces its files; settings (%APPDATA%\codeloupe-desktop), secrets, task mirror and indexes (the daemon's home) are not touched, and the new app starts the daemon from the new bundle. An index written in an older format is rebuilt, never served.
macOS, Linux .deb, a Windows copy unpacked by Scoop Only a notification and Open release page in Settings: macOS cannot update an app that has no Developer ID signature (nothing is paid for, docs/code-signing.md), the package manager owns the other two. Install the new version the way you installed this one.

The release list is GitHub's releases.atom, which also names the tag of a release that is still a draft or of a bare tag. The app takes the newest entry that is newer than the running version and has a latest.yml, so such an entry is skipped until it is published; only a failure other than a missing file (no network, a server error) fails the check.

The first run of a new version is watched: the daemon of the new bundle has 90 seconds to answer, and longer while the app is still starting it (up to five minutes); a daemon of an older build that holds the port is restarted up to three times. If it does not answer, the previous bundle (kept in <app data>/update/previous while the update was pending, about 190 MB, deleted once the new daemon has answered) runs instead, Settings says so, and the next update tries again. The rollback is not final: when the daemon of that version answers /status later, the message goes and the shipped bundle runs again. Privacy: the app asks only github.com/Terrio-cz/CodeLoupe (the releases feed and the files of one release), with the User-Agent CodeLoupe, English as the language, no cookies, no account and no identifier; the installer is verified against the SHA-512 in the release before it runs. Pre-release versions follow each other only when the number after the dot grows (v1.0.0-rc.1, rc.2, rc.10); an rc is offered the next rc and the final release, a final release only final releases. node tools/update-test.mjs --old <installer> --new <installer> [--bad <installer>] proves an update between two builds on this machine against a local feed (Packaging and releasing).

Clone this wiki locally