3e076d4dd9
CI / Mirror Official .deb to Release (push) Blocked by required conditions
CI / Update APT Repository (push) Blocked by required conditions
CI / Update DNF Repository (push) Blocked by required conditions
CI / Update AUR Package (push) Blocked by required conditions
Deploy Worker / deploy (push) Failing after 1s
Shellcheck / Check shell scripts (push) Failing after 1s
CI / Build Packages (amd64 - appimage) (push) Has been skipped
CI / Build Packages (amd64 - deb) (push) Has been skipped
CI / Build Packages (amd64 - rpm) (push) Has been skipped
CI / Build Packages (arm64 - appimage) (push) Has been skipped
CI / Build Packages (arm64 - deb) (push) Has been skipped
CI / Test Flags Parsing (push) Failing after 1s
BATS Tests / BATS unit tests (push) Failing after 1s
CI / Build Packages (arm64 - rpm) (push) Has been skipped
CI / Test Build Artifacts (amd64) (push) Has been skipped
CI / Test Build Artifacts (arm64) (push) Has been skipped
CI / Create Release (push) Waiting to run
18 KiB
18 KiB
Acknowledgments
This page credits every external contributor to claude-desktop-debian in chronological order — inspirational projects first, then contributors by merge or fix date.
This project was inspired by k3d3's claude-desktop-linux-flake and their Reddit post about running Claude Desktop natively on Linux.
Special thanks to:
- k3d3
- Original NixOS implementation
- Native bindings insights
- emsi
- Title bar fix
- Alternative implementation approach
- leobuskin for the Playwright-based URL resolution approach
- yarikoptic
- Codespell support
- Shellcheck compliance
- IamGianluca for build dependency check improvements
- ing03201 for IBus/Fcitx5 input method support
- ajescudero for pinning @electron/asar for Node compatibility
- delorenj for Wayland compatibility support
- Regen-forest for suggesting Gear Lever as AppImageLauncher replacement
- niekvugteveen for fixing Debian packaging permissions
- speleoalex for native window decorations support
- imaginalnika for moving logs to
~/.cache/ - richardspicer for the menu bar visibility fix on Linux
- jacobfrantz1
- Claude Desktop code preview support
- Quick window submit fix
- janfrederik for the
--exeflag to use a local installer - MrEdwards007 for discovering the OAuth token cache fix
- lizthegrey
- Version update contributions
- Close-to-tray on Linux to keep in-app schedulers, MCP servers, and the tray icon alive across window close
- "Run on startup" persistence on Linux via XDG Autostart, fixing the toggle that would silently revert
- In-place package upgrade detection that watches
app.asarfor dpkg/rpm replacement and offers a click-to-restart notification, fixing the Quick Entry / About / Ctrl+Q symptom cluster from a running v(N) main process loading v(N+1) renderer assets (#564)
- mathys-lopinto
- AUR package
- Automated deployment
- pkuijpers for root cause analysis of the RPM repo GPG signing issue
- dlepold for identifying the tray icon variable name bug with a working fix
- Voork1144
- Detailed analysis of the tray icon minifier bug
- Root-cause analysis of the Chromium layout cache bug
- Direct child
setBounds()fix approach
- sabiut
--doctordiagnostic command- SHA-256 checksum validation for downloads
- Post-build integration tests for deb, rpm, and AppImage artifacts
tests.ymlCI workflow that runs the 186-test BATS suite on push and PR — the suite was inert in CI before this (#520)- Isolating
cleanup_stale_cowork_socketBATS from hostpgrepstate so the test passes on developer machines running Claude Desktop (#533, #534) - Headless launch and
--doctorsmoke tests for the AppImage artifact, catching runtime regressions (frame-fix-wrapper syntax errors, asar patch breakage,mainfield mismatches) that the structural test missed (#592)
- milog1994
- Popup detection
- Functional stubs
- Wayland compositor support
- jarrodcolburn
- Passwordless sudo support in container/CI environments
- Identifying the gh-pages 4GB bloat fix
- Identifying the virtiofsd PATH detection issue on Debian
- Detailed analysis of the CI release pipeline failure caused by runner kills during compare-releases
- Diagnosing the session-start hook sudo blocking issue with three solution approaches
- chukfinley for experimental Cowork mode support on Linux
- CyPack
- Orphaned cowork daemon cleanup on startup
COWORK_VM_BACKENDdocumentation, Cowork troubleshooting sections, and unknown-value warning in--doctor
- IliyaBrook
- Fixing the platform patch for Claude Desktop >= 1.1.3541 arm64 refactor
- Fixing the duplicate tray icon on OS theme change with an in-place
setImage/setContextMenufast-path that avoids the KDE Plasma SNI re-registration race
- MichaelMKenny
- Diagnosing the
$-prefixed electron variable bug - Root cause analysis and workaround
- Diagnosing the
- daa25209 for detailed root cause analysis of the cowork platform gate crash and patch script
- noctuum
CLAUDE_MENU_BARenv var with configurable menu bar visibility- Boolean alias support
- typedrat
- NixOS flake integration with build.sh
- node-pty derivation
- CI auto-update
- Fixing the flake package scoping regression
- Fixing the NixOS electron binary not being marked executable (#431, #581)
- cbonnissent
- Reverse-engineering the Cowork VM guest RPC protocol
- Fixing the KVM startup blocker
- Fixing RPC response id echoing for persistent connections
- Configurable bwrap mount points via a dedicated Linux config file
{src, dst}mount form incoworkBwrapMountsfor distinct host/sandbox paths (e.g. persistent/tmpacross Bash tool calls)
- joekale-pp for adding
--doctorsupport to the RPM launcher - ecrevisseMiroir for the bwrap backend sandbox isolation with tmpfs-based minimal root
- arauhala for detailed root cause analysis of the NixOS
isPackagedregression - cromagnone for confirming the VM download loop on bwrap installs with detailed logs that disproved the initial triage
- aHk-coder for diagnosing the hardcoded minified variable crash in the cowork smol-bin patch
- RayCharlizard
- Detailed analysis of the self-referential
.mcpb-cachesymlink ELOOP bug - Fixing auto-memory path translation on HostBackend
- Fixing the
ion-diststatic asset copy for theapp://protocol handler --doctordiagnostic that detects the Ubuntu 24.04 AppArmorapparmor_restrict_unprivileged_userns=1block on bwrap, instead of letting it silently fall through to a hanging KVM probe (#351, #434)- Documenting the upstream MCP double-spawn root-cause analysis in
docs/learnings/mcp-double-spawn.md(#526, #527)
- Detailed analysis of the self-referential
- reinthal for fixing the NixOS build breakage caused by the nixpkgs
nodePackagesremoval - gianluca-peri
- Reporting the GNOME quit accessibility issue
- Confirming tray behavior with AppIndicator
- martin152 for detailed diagnosis and a complete patch for three launcher cleanup bugs:
cleanup_orphaned_cowork_daemonself-match,cleanup_stale_cowork_socketsocat dependency no-op, and the same self-match in--doctor - hfyeh for diagnosing the Ubuntu 24.04 AppArmor unprivileged-userns block on Cowork bwrap and contributing the AppArmor profile workaround
- davidamacey for identifying and fixing the XRDP GPU compositing blank-window issue on remote desktop sessions
- pb3ck for diagnosing the Cowork
CLAUDE_CODE_OAUTH_TOKENenv-strip bug with a working reference diff - Joost-Maker for fixing the
$efs reference crash in cowork Patch 9 on Claude Desktop 1.3109.0, introducing the[$\w]+identifier-capture pattern atcowork.sh:482-501(#421) - aJV99 for exporting
GDK_BACKEND=waylandin native Wayland mode to fix XWayland fallback blur on HiDPI displays - Andrej730
- Quick-window regex readability refactor (
String.raw+escapeRegExphelper) - Fixing the visibility-function regex break on Claude Desktop 1.3883.0 (#496)
- Quick-window regex readability refactor (
- HumboldtJoker for diagnosing the cowork Patch 2b silent failure on Claude Desktop 1.5354.0 — identifying that the log line was patched but session init still routed through the Swift addon (#553)
- zabka for identifying that
cowork-vm-service.jswas never auto-spawned on Linux and contributing a systemd-unit workaround that scoped the daemon auto-launch fix (#445) - sirfaber for fixing the
$-in-minified-identifier breakage of cowork Patch 2b (vm module assignment) and Patch 6 step 2 (retry-delay auto-launch) on Claude Desktop 1.5354.0 (#555) - ProfFlow for re-fixing the RPM repodata signing regression by appending
!to the keyid passed togpg --default-key, forcingrepomd.xmlto be signed by the primary key instead of the auto-selected signing subkey (#566) - jslatten for fixing the KDE Plasma Wayland launcher-grouping bug by setting
pkg.desktopNamein the packagedapp.asar'spackage.json, format-conditional so deb/rpm getclaude-desktop.desktopand AppImage getsio.github.aaddrick.claude-desktop-debian.desktop(#562) - JoshuaVlantis
- RPM
chrome-sandboxSUID via%attr(4755, ...)instead of a%postchmod scriptlet so the bit survives--noscriptsand layered images (#539) autoUpdaterno-op Proxy on Linux that defends against future feed activation, with a thenable allowlist maskingthen/catch/finally/Symbol.toPrimitive/Symbol.iteratortoundefined(#567)- Failing loudly on
npm install node-ptyfailures instead of silently shipping the upstream Windows binaries, plus auto-installinggcc/g++/make/python3on minimal build environments (#401) - Silencing the RPM "File listed twice" warning on
chrome-sandboxby movingchmod 4755into%install, with thorough investigation of four%exclude-based alternatives (#610) - Cleaning upstream Windows binaries from node-pty before staging the Linux build, preventing PE32+ orphans in the packaged asar (#597)
- RPM
- Hayao0819 for diagnosing the upstream
titleBarStyle:""→titleBarStyle:"hiddenInset"migration that broke the About window render on GNOME/X11 and contributing theisPopupWindow()match extension (#481, #489) - michelsfun for reporting the cowork
ENAMETOOLONGfailure on eCryptfs-encrypted home directories with detailed--doctoroutput that pinpointed the short-NAME_MAX filesystem as the cause (#590) - proffalken for the LUKS-volume +
pam_mountworkaround documented indocs/troubleshooting.md, restoring cowork support on legacy eCryptfs-encrypted home directories (#590) - phelps-matthew for fixing
CLAUDE_QUIT_ON_CLOSE=1to actively quit viaapp.quit()instead of relying on the bundled handler that hardcodes hide-to-tray on Linux, with thorough root cause analysis and alternatives evaluation (#624, #623) - dubreal for
--password-storekeyring detection that probes D-Bus for kwallet6 / gnome-libsecret at startup, fixing session persistence on KDE Plasma and other desktops where Electron'ssafeStoragewas unavailable (#611, #593) - JustinJLeopard for detecting missing electron binaries after Node 24's
extract-zipsilently no-ops, with anunzipfallback that recovers from the@electron/getcache (#631, #584) - tkrag for diagnosing and fixing the X11 window-raise-on-hover bug under sloppy/focus-follows-mouse WMs, tracing the upstream
webContents.focus()→_NET_ACTIVE_WINDOWpath through three iterations of review (#589, #416) - maplefater for re-anchoring the
addTrustedFolder.asarguard on theasync addTrustedFolder(…)method declaration after upstream 1.10628.x folded the log call into a comma-expression, keying both the parameter extraction and the injection point off the unminified method name so they can't drift apart (#685) - MitchSchwartz for finding the second
app.asarfile-drop path — theexistsSync()branch in the second-instance argv collector that #640 never guarded — and rejecting.asarpaths there so the app no longer prompts to attach its own bundle on every taskbar reopen (#669, #668) - LiukScot for making the tray rebuild mutex trailing-edge so the startup dark-theme icon no longer latches black, and restoring the in-place
setImagefast-path after upstream changed the context-menu wiring to a prebuilt menu object (#680, #679) - sabiut
- BATS coverage for
cleanup_orphaned_cowork_daemon, mutation-tested so the kill/escalation branches genuinely bite (#693) - Fixing two false-green
--doctorPASSes: an empty password store read as healthy, and a non-numericdfreading falling through to the PASS branch (#692) - Extending the artifact launch smoke tests to arm64 on native
ubuntu-22.04-armrunners, and re-keying the AppImage pkill sweep tomount_claudeso escaped zygote/electron children stop leaking on the runner (#691)
- BATS coverage for
- jerem for routing Quick Entry's global shortcut through the XDG GlobalShortcuts portal on native Wayland, and merging all Chromium feature requests into a single
--enable-features=switch — the old code silently clobberedWindowControlsOverlay(#690, #404) - caidejager for diagnosing why Cowork's VM daemon never auto-launched on packages built under a restrictive umask —
app.asar.unpacked/shipped mode0700, failing the auto-launchexistsSync()guard — and normalizing install permissions across deb and AppImage, withdpkg-deb --root-owner-groupclosing a build-uid write exposure (#695) - JustinJLeopard for the AppStream metainfo that surfaces the package in GNOME Software, KDE Discover, and App Center, wired into the deb, rpm, and AppImage builds (#633)
- DhanushSantosh for the GPU crash auto-recovery in the launcher: detecting a previous GPU-process FATAL in the launcher log and re-launching with safe GPU flags automatically, instead of leaving users to discover
CLAUDE_DISABLE_GPU=1by hand (#666) - diarized for auto-installing scoped AppArmor userns profiles from the
.debpostinst on Ubuntu 24.04+ — one for the bundled Electron binary (fixing the launch crash without--no-sandbox) and one for/usr/bin/bwrap(keeping Cowork's sandbox isolated instead of silently falling back to host-direct), automating the workaround from #351 (#687, #694) - emandel82 for root-causing the "Attach app.asar?" prompt: every launcher passed
app.asaras a redundant Electron argument, which the second-instance argv collector treated as a file to open — removed at the source across all four package formats (#700, #696) - svankirk for cleaning up Desktop helper processes after an explicit quit — a quit wrapper with signal forwarding and a bundle-keyed live-UI check, so closing the app no longer strands helper processes (#682)
- pjordanandrsn for re-deriving the cowork Linux patch suite against the upstream "yukonSilver" VM refactor (1.13576+) — re-anchoring the platform gate on
startVM'syukonSilver.statuscheck after Patch 1's removeddarwin/win32anchor startedprocess.exit(1)'ing and dropping every subsequent cowork patch, fixing the build's "Verify cowork patches in shipped asar" gate (#736) - chrisw1005 for root-causing the Linux startup hang on Claude Desktop 1.13576+ — the unconditional
@ant/claude-native.readRegistryValues()/getWindowsElevationType()enterprise-policy calls throwing a swallowed missing-methodTypeErrorbefore window creation — via probe injection, and the complete Windows-only native stub fix (#729) - colonelpanic8 for independently reproducing the same 1.13576+ startup hang and contributing BATS coverage for the Linux native stub (#730)
- communitytranslations for the definitive root-cause analysis of the stdio MCP double-spawn — tracing both parallel session managers (
LocalSessions/LocalAgentModeSessions) to their independent MCP coordinators in the extracted asar, ruling out the CLI subprocess and this project's packaging, and contributing the server-side lockfile + idempotent-write workarounds for affected MCP authors. The analysis is preserved directly asdocs/upstream-reports/546-mcp-double-spawn.mdand is the basis ofdocs/learnings/mcp-double-spawn.md(#526, #546) - slovdahl for flagging that the documented Cowork bwrap AppArmor workaround grants
usernsto every consumer of the shared/usr/bin/bwrapsystem-wide, and pointing at the opam/Apptainer per-application AppArmor precedent — which the corrected docs now cite while explaining why a shared bwrap binary needs a scoped wrapper (tracked separately) rather than a doc-only per-app profile (#542, #434)