The collaboration release: your issue tracker, your teammates, and your own colour scheme all move inside Canopy — and everything you can see, you can open.
Team relay — work alongside other people
- Encrypted peer-to-peer sessions. Host or join with a short code; there is no server in the middle. The code drives a SPAKE2 key exchange and every frame and file is sealed with ChaCha20-Poly1305, so the channel is safe to carry over the internet, not just a trusted LAN.
- Local hosting works out of the box — teammates on the same network (office, VPN) join via your LAN address. Hosting to the internet needs TCP port forwarded to your machine on your router; there is no NAT traversal or hole punching yet, so a public-mode host is not reachable without that.
- Team chat and direct messages, with history, unread badges, and native notifications for the conversation you are not looking at.
- Review requests: send a teammate a PR and it opens in their Canopy as a native tab, not a browser round-trip.
- File transfer with drag-and-drop, live progress, verified identity, and an integrity check on arrival.
Issues and tickets — natively viewable
- Unified Issues panel: one status-grouped list across sources, with source pills. GitHub is on by default; Linear is opt-in.
- Send an issue to an agent — an existing terminal or a fresh one, with a worktree and branch prepared for it.
- Issues, commits, and branches open as native tabs. Nothing bounces you to a browser to read a diff.
- Loose ends: every branch and worktree audited by what you would actually lose if you deleted it — dirty, unpushed, unmerged, or genuinely safe. Each row opens the real diff.
- History opens commits as tabs; quick-open and search stop hiding dotfiles (your
.envis findable again).
Appearance and settings
- Themes: dark, light, and system, with accent colours that follow whatever the system picks.
- A real Settings dialog — VS Code-style tabs for appearance, agents, editor, terminal, guard, and integrations — plus a Help page and a settings gear on the rail.
- Font and cursor control for both the terminal and the editor, picked from a dropdown of what is actually installed rather than typed into a text box.
- Tracker connections and GitHub sign-in/out live in Settings → Integrations.
Security
- Issue bodies are sanitized. Rendered markdown from a remote tracker reached the page unsanitized, and every Tauri command is callable from page script — so an
<img onerror>in an issue you opened was arbitrary command execution. Now sanitized through a single vetted path, with a CSP and hardened link handling behind it. - Relay join codes are unguessable. They came from a non-cryptographic hash of the clock. SPAKE2 protects a short code against offline attack only if the code itself cannot be predicted; the code and the file-transfer keys now come from the OS CSPRNG.
- Accepting a file no longer destroys the file it replaces. The destination was truncated before any bytes arrived and deleted on failure. Transfers now land in a temp file and are renamed into place only after the hash checks out.
- Stopping a relay session now actually retires its in-flight file listeners.
Fixes
- Terminals stop garbling output after a tab switch. A grid measured mid-layout could be pushed to the shell, which then re-wrapped its output at the wrong width — permanently, in scrollback. Measurements are now verified before they reach the pty.
- Terminals re-measure when fonts resolve and when the window regains focus, so a drifted grid repairs itself instead of staying broken for that terminal's life.
- Toasts have kinds: failures stay until read, everything else clears itself.
- Flat buttons everywhere, dialogs that wrap their text, hover actions that no longer land on top of the content they cover, and hidden actions that stop reserving empty space.
- Dev builds run beside an installed copy instead of fighting it for the single-instance lock.
Installing
- macOS:
Canopy-macos-arm64.dmg(Apple silicon) orCanopy-macos-intel.dmg. - Linux:
Canopy-linux-x86_64.AppImage,.deb, or.rpm. - Windows:
Canopy-windows-x86_64-setup.exe— still unsigned, so Windows will show a SmartScreen warning. Choose More info → Run anyway.
Existing installs update themselves; the Canopy-* names above are stable aliases that always point at the latest release.
Full changelog: v0.2.0...v0.2.1