Canopoddocs v0.5.0

Install on macOS

macOS on Apple Silicon (arm64) is Canopod's home platform. It's where the app is developed and tested, and the only build anyone has run on a real desktop.

Requirements#

RequirementWhy
macOS on Apple SiliconThe published build targets aarch64-apple-darwin. There is no Intel or universal build.
gitEvery worktree operation shells out to git.
The runtimes and package managers used by your projectFor Node projects, Canopod can read .nvmrc, .node-version and .tool-versions per worktree. Canopod itself does not require Node.
Postgres running locallyOnly for the database features: snapshot, switch, export, restore, reset.
A .worktreemanager.json in the repoOptional. Commit one when setup should travel with the branch.
brew install --cask emidhun/canopod/canopod

Homebrew clears the quarantine attribute for you, so the app opens on first launch with no warning.

Option 2: the DMG#

Canopod is ad-hoc signed but not notarized, so macOS quarantines the download. Clearing that flag is the step that matters:

hdiutil attach ~/Downloads/Canopod_0.5.0_aarch64.dmg
cp -R "/Volumes/Canopod/Canopod.app" /Applications/
hdiutil detach "/Volumes/Canopod"
xattr -dr com.apple.quarantine /Applications/Canopod.app     # clears quarantine
open /Applications/Canopod.app

Double-clicking the DMG and dragging Canopod to Applications works too. You still need the xattr -dr com.apple.quarantine line. On macOS Sequoia you can instead go to System Settings → Privacy & Security → Open Anyway.

First launch#

Canopod lives in the menu bar. Look for the fork mark up there. There's no Dock icon while the main window is hidden.

Click the tray icon to toggle the popover. Open Manager in its footer brings up the main window. Closing the main window hides it back to the tray rather than quitting, and Quit stops every service Canopod started before it exits.

With no repositories registered yet, you land on the onboarding screen:

First run with no repositories registered.First run with no repositories registered.
First run with no repositories registered.

Carry on with Adding a repository.

Where Canopod keeps its files#

WhatPath
App settings~/Library/Application Support/com.midhunkumare.canopod/settings.json
Runtime state (port indices, overrides, orphan bookkeeping)~/Library/Application Support/com.midhunkumare.canopod/state.json
Log file (rolling, 2 MB, one rotation)~/Library/Logs/com.midhunkumare.canopod/canopod.log
Theme, density, accent, text zoomthe webview's localStorage, key canopod.appearance
Per-worktree agent contextlocalStorage, key canopod.ctx.<worktree path>

Where settings live has the full map.

Updating#

Use Settings → General → Check now, enable signed automatic installation, download the newer DMG, or run brew upgrade --cask canopod. Your settings and runtime state sit outside the bundle, so they survive. Tauri updater signatures verify in-app downloads independently of Apple notarization.

Uninstalling#

rm -rf /Applications/Canopod.app
rm -rf ~/Library/Application\ Support/com.midhunkumare.canopod
rm -rf ~/Library/Logs/com.midhunkumare.canopod

Your repositories, worktrees and databases are untouched. Canopod never owned them.

Documentation for Canopod 0.5.0. Controls marked coming soon are present in the interface but have no implementation behind them yet.