Claude Desktop 2.110.0 (patch release 2)
This release provides Claude Desktop version 2.110.0 pre-patched for Linux.
Installation Options
Arch Linux (pacman Repository - recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install-pacman.sh | sudo bash
sudo pacman -Syu claude-desktop-extraArch Linux (manual package)
# x86_64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v2.110.0-2/claude-desktop-extra-2.110.0-2-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v2.110.0-2/claude-desktop-extra-2.110.0-2-aarch64.pkg.tar.zstDebian/Ubuntu (APT Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install.sh | sudo bash
sudo apt install claude-desktop-extraDebian/Ubuntu (manual .deb)
# x86_64
sudo apt install ./claude-desktop-extra_2.110.0-2_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_2.110.0-2_arm64.debFedora/RHEL (RPM Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install-rpm.sh | sudo bash
sudo dnf install claude-desktop-extraFedora/RHEL (manual .rpm)
# x86_64
sudo dnf install ./claude-desktop-extra-2.110.0-2.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-2.110.0-2.aarch64.rpmNixOS / Nix
nix run github:patrickjaja/claude-desktop-extraAppImage (Any Distro)
# x86_64
chmod +x Claude_Desktop-2.110.0-x86_64.AppImage
./Claude_Desktop-2.110.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-2.110.0-aarch64.AppImage
./Claude_Desktop-2.110.0-aarch64.AppImageUpdate existing AppImage (delta download — only changed blocks):
appimageupdatetool Claude_Desktop-*-x86_64.AppImage # Or from within the AppImage: ./Claude_Desktop-*-x86_64.AppImage --appimage-update
Checksums
| File | SHA256 |
|---|---|
| Arch pacman (x86_64) | 2852ae722c52cb523ef27b43bd7da12dae94b9360db20345aa689b6b2cd10c7b
|
| Arch pacman (aarch64) | c3c952b233cf38eb3665f051e7d3bbf5954866eb13b4aa29db81d933278ef31c
|
| Tarball (x86_64) | 6365e75e250cc4f109d8428b7a8b22ff4bc6dc93d35ef63714fd6c64f0a425bd
|
| Tarball (aarch64) | b1a19e56d3c83a1fb096f128c1fd399bbd109d06216238263dafab456d59d887
|
| AppImage (x86_64) | c0874bf8ff6fb04999db3f8f1620392db0b195cd841ad112fae442ba62f852ea
|
| AppImage (aarch64) | 6315cbe21b32084ccccf73788d77bc0bd976ad13a98e41085957ed28e515f919
|
| Debian (amd64) | 0c8807dfa19f1abecdbec94ef9060b57872a20e5d7c10b9aa5d403785964dc8e
|
| Debian (arm64) | e49976b2057776f80c0cd6e2a7216bb6c4b8b00776e9c2e6974d294aee022bfd
|
| RPM (x86_64) | 2e7b68a452066bfae987a195c73736f0db91ed59ca791e75b02137a443a213d8
|
| RPM (aarch64) | c2f470f0f7d5b471bfcf816f8effc56ee783840021f54b96471548bd619b48bc
|
Changes since last release
From CHANGELOG.md, 2026-09-16:
Extra settings: the IPC sender guard now checks the origin, not just the scheme
__cdbEx_okSender in js/extra_settings_main.js accepted the main frame of any http(s)://
webContents. Every other main-process module (panel tabs, files quick-open, window controls, diff
views) compares the parsed origin against an exact allowlist, and the Extra handlers are the ones that
matter most: cdb-deploy:set / cdb-deploy:save-raw write the 3P gateway URL, its API key and the
bootstrap URL, and cdb-app:relaunch restarts the app. Reaching them needed a page from another origin
to end up in the main frame of a webContents that carries the cdbExtra preload, so the practical
exposure was small, but the guard was weaker than its siblings for no reason.
- The guard now uses the same
ALLOWED_ORIGINSlist and parsed-origin comparison as the sibling
modules.https://evil.example,https://claude.ai.evil.example,http://claude.ai,
https://claude.ai:8443andhttps://user@claude.ai@evil.exampleare all rejected; the four real
origins still pass. An unparseable URL or a sender withoutisDestroyed()fails closed. scripts/tests/core/test-deployment-main.mjsnow proves it: nine foreignhttpsorigins are refused
bycdb-deploy:setandcdb-app:relaunchand nothing lands on disk. Before the change the same
harness showed a foreign sender successfully writinginferenceGatewayBaseUrl.- The dom-ready page injection is unchanged: it still runs on every non-localhost http(s) document,
because it is not a security boundary (the page script only mounts the panel on claude.ai and
every IPC call re-validates the sender).
The four origins are the right contract, not a guess: upstream's own eIPC sender validator enforces
exactly the same production set. Third-party inference is unaffected - in 3P mode the main window
loads app://localhost, which our http(s)-only injection gate has always skipped, so the Extra panel
never mounted there in the first place.
Contributed by Mike Gordievsky (@mike-the-enginer) in
#249 - thanks!