Claude Desktop 1.11187.4
This release provides Claude Desktop version 1.11187.4 pre-patched for Linux.
Installation Options
Arch Linux (AUR)
yay -S claude-desktop-binDebian/Ubuntu (APT Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install.sh | sudo bash
sudo apt install claude-desktop-binDebian/Ubuntu (manual .deb)
# x86_64
sudo apt install ./claude-desktop-bin_1.11187.4-1_amd64.deb
# ARM64
sudo apt install ./claude-desktop-bin_1.11187.4-1_arm64.debFedora/RHEL (RPM Repository — recommended)
curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/install-rpm.sh | sudo bash
sudo dnf install claude-desktop-binFedora/RHEL (manual .rpm)
# x86_64
sudo dnf install ./claude-desktop-bin-1.11187.4-1.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-bin-1.11187.4-1.aarch64.rpmNixOS / Nix
nix run github:patrickjaja/claude-desktop-binAppImage (Any Distro)
# x86_64
chmod +x Claude_Desktop-1.11187.4-x86_64.AppImage
./Claude_Desktop-1.11187.4-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.11187.4-aarch64.AppImage
./Claude_Desktop-1.11187.4-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 |
|---|---|
| Tarball (x86_64) | 8ae7db65940d5c6828d560ec4d060788d253247aae83ffa70ed566395a2e79fd
|
| Tarball (aarch64) | e137c5d6d013f58e6375905c269126498575288b57ee459a4e2df0977f868dc0
|
| AppImage (x86_64) | 0d461b68f6f9214849c6ffadc6e575629bb5d3b34458648c10814780d741a16d
|
| AppImage (aarch64) | 0ec6c4b3eeca26de702755b5844d3fa1d02dc519bf95fe2b64d80f3945a57c08
|
| Debian (amd64) | 611b39fa8aa6fbe17f16a069620a334dabef6a05fc896b37456e7138ab37b389
|
| Debian (arm64) | 3efe9a0adb264cbdcf694d8fb6beaf299278ad693dd29536c26dc7dae7e134a7
|
| RPM (x86_64) | 750db4190cf9d2e86bc0623ff24c56bd9974808a7fb9375bf94d1de00a09cb49
|
| RPM (aarch64) | 662cf61b4fd816ac40dc489a712360da7f2923b64e618e1271ce9eed350f9ff0
|
Changes since last release
Upstream (v1.11187.4)
- Version bump: v1.10628.2 -> v1.11187.4 (~560 builds). Full re-minify - every minified identifier shifted. Two patches needed regex updates because upstream restructured the code (not just renamed variables); the other 46 patches absorbed the renames via their
[\w$]+wildcards.
Patches fixed (2)
fix_utility_process_kill.nim- upstream inserted ar&&this.noteKillOnce(),statement between.kill()and the\Killing utiltiy proccess again`log call. Old regex required.kill();[\w$]+.info(`Killing...immediately adjacent. New regex tolerates a short run of intervening statements: group 3 is now;[^\`]{0,80}.info(`Killing utiltiy proccess again. Patched result:n.kill("SIGKILL");r&&this.noteKillOnce(),D.info(...)`.fix_asar_folder_drop.nim(Patch B, second-instance argv parser) - the.slice(1).filter(...)was hoisted into a local var, so the loop changed fromfor(const X of Y.slice(1))if(!Z(X))tofor(const X of <var>)if(!Z(X)). Rewrote the regex to drop the hardcoded.slice(1)and anchor on the trailing"skill file"arg for uniqueness (exactly one such loop in the bundle). Patch A (noe file-drop filter) was unaffected. Patched result:for(const n of r)if(!/\.asar/.test(n)&&!VXr(n)){....
No other patch changes needed
- All 48 patches apply - package built as
claude-desktop-bin-1.11187.4-1-x86_64.pkg.tar.zst;node --checkpassed on the patched JS.
Semantic verification (not just regex-match)
Traced the raw unpatched upstream code around every changed site and the 14 highest-stakes structural patches to confirm intent still holds after the re-minify (a matching regex alone doesn't prove the surrounding logic is unchanged):
fix_utility_process_kill- the function has two.kill()calls (first SIGTERM viaconst i=this.process.kill(), 5s fallback viaconst r=(n=this.process)==null?void 0:n.kill()). Confirmed our regex matches only the fallback (distinct syntactic form), so the first kill stays graceful SIGTERM and only the timeout escalates to SIGKILL. The newnoteKillOnce()is logging-only and is preserved. Semantics intact.fix_asar_folder_drop- upstream refactoredjXr()and added a new pre-filterA.slice(1).filter(n=>n.startsWith("-")||resolve(n)!==appPath). Verified this does NOT make our guard redundant: upstream only drops the single arg whose resolved path exactly equalsgetAppPath(), whereas our!/\.asar/.test(n)rejects any.asarpath (covers symlinked/non-canonical paths and the case wheregetAppPath()returns the unpackedappdir). Our guard sits in the loop condition before theexistsSync(n)->e.push(n)->wQA(e)dispatch, so a.asararg never reaches the file-drop handler. Still correct defense-in-depth.- 14 highest-stakes patches verified SOLID against raw upstream:
enable_local_agent_mode(25 sub-patches; merger override{...Dw(),louderPenguin:A,...}is authoritative),fix_dispatch_linux,fix_cowork_linux(10 sub-patches),fix_computer_use_linux,fix_tray_dbus,fix_quick_entry_position,fix_native_frame(+renderer),fix_window_bounds,fix_locale_paths,fix_marketplace_linux,fix_startup_settings,fix_updater_state_linux,fix_vm_session_handlers,fix_sensitive_dirs_linux. Every anchor lands in a semantically correct location. - Stale comment fixed:
enable_local_agent_modePatch 1 comment claimed it ungateschillingSlothFeat + quietPenguin; in v1.11187.4chillingSlothFeatmoved to the non-platformoWgate, so onlyquietPenguin(WEr) matches here now. Behavior unchanged (Patch 1 already accepts>=1matches and Patch 3's merger force-overrides every feature regardless) - updated the comments + the 2-match log label to be version-agnostic. - Noted, not changed:
fix_locale_pathsstill does a global replace of allprocess.resourcesPathsites - a long-standing over-broad approach (not a v1.11187.4 regression); the affected non-locale paths are win32/darwin-gated and not exercised on Linux.
Audit findings
- Feature flags: no
enable_local_agent_mode.nimoverride changes needed (all 25 sub-patches still match; merger return{...Dw(),louderPenguin:A,coworkKappa:e,coworkArtifacts:t,markTaskComplete:i}intact). 1 new static featurecoworkArtifactPopout:_d(always supported, no platform gate, no override needed);bootstrapConfigchanged fromMS()-gated to bare_d. Function renames: registryAw()->Dw(), async mergerLCA->SBA, dev-gateDm()->MS()(2nd gatexEr()forbuiltinMcpPresets), GrowthBook bool readerIt()->lt(), supported constantXd->_d, electron varaA->sA,louderPenguinasync helperFsr()->XEr()(stilldarwin||win32gate, now also reads flag4116586025), cowork helperpRA()->mNA(). GrowthBook delta (vs v1.9659.4 baseline, the only local prior bundle): 5 added (124685897template-subst,1323782925APe qualifier,1609612026marketplace install,2720310975side-chat tools,790863764device_bash), 1 removed (3638165567). - Built-in MCP: no servers added/removed - identical roster (imagine/visualize/marketplace/skills/radar/echo/Framebuffer/Window Halo, etc.). Registration fn renamed
jHA->uqA(registry objsT, label mapcUA, enumeratorb3()). node-pty 1.1.0-beta34 unchanged. - Cowork protocol: unchanged -
control_request14,control_response46,sessions-bridge3,environments/bridge1,work/poll1, all identical to baseline; 20CoworkArtifacts_$_*IPC handlers byte-for-byte identical (the +8 rawCoworkArtifactsoccurrences are new log strings, not protocol).claude-cowork-serviceis NOT affected by this release. - ion-dist (3P config SPA): still required, applies cleanly. 92 MB / 706 JS / 950 files / 23 CSS (up from 90 MB / 691 JS / 909 files / 21 CSS - modest growth, no structural refactor). Config chunk
c71860c77-CV0D52ti.js->c71860c77-CyMvMS7K.js(content-hash bump).mountPathstill mac/win-only (nolinuxkey, not upstreamed); platform ternary vars this releaseK/C/pt. Both sub-patterns matched; verified the compiled patch applies (exit 0, 2/2). - Platform gates: darwin 65->72 (+7), win32 113->122 (+9), linux 5 (unchanged). All new gates classify as NATIVE (path NFC normalization, updater channel msix/squirrel, dock bounce, Mission Control, TouchID, codesign verify, plist/registry reads, endpoint-security SIGKILL classification, dev-only
chrome://inspectlauncher) or STUB/config-gated (chat features gated by config flag, notprocess.platform). No new PORTABLE (Linux-actionable) gate. ThelouderPenguinCode-tab gate became async (XEr()+ flag4116586025) but remains PATCHED via the existing override.