Skip to content

Claude Desktop 1.24012.9 (patch release 11)

Choose a tag to compare

@github-actions github-actions released this 30 Jul 14:07
· 73 commits to master since this release

Claude Desktop 1.24012.9 (patch release 11)

This release provides Claude Desktop version 1.24012.9 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-extra

Arch Linux (manual package)

# x86_64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-11/claude-desktop-extra-1.24012.9-11-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-11/claude-desktop-extra-1.24012.9-11-aarch64.pkg.tar.zst

Debian/Ubuntu (APT Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install.sh | sudo bash
sudo apt install claude-desktop-extra

Debian/Ubuntu (manual .deb)

# x86_64
sudo apt install ./claude-desktop-extra_1.24012.9-11_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-11_arm64.deb

Fedora/RHEL (RPM Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-extra/install-rpm.sh | sudo bash
sudo dnf install claude-desktop-extra

Fedora/RHEL (manual .rpm)

# x86_64
sudo dnf install ./claude-desktop-extra-1.24012.9-11.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-11.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.24012.9-x86_64.AppImage
./Claude_Desktop-1.24012.9-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.24012.9-aarch64.AppImage
./Claude_Desktop-1.24012.9-aarch64.AppImage

Update 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) ad2c36f3fb2735b97e55e428519651a098f9c2b5449438f176fefe42fd348796
Arch pacman (aarch64) e50f0b530ffd5aeb8c56c8799fb305de031d68e2873be2f2503fa3f0c1cb4116
Tarball (x86_64) 254e1faa3d55ca68958e5747169d45c1c3e7743ba899c5b5f8f8839b52e7d9d0
Tarball (aarch64) 74e5d085b850699c03eea4da0b04ca9b6549f07ef7d17d71d1a3abd93d40981e
AppImage (x86_64) a8c58af50c70e2ec3e299c3c9658a799169a84fb49c47e8e46de899bde1bb184
AppImage (aarch64) 1c7adaa7d500ae18055b14159e588fd2a7eb2c862b0a67772a1482f2918f7919
Debian (amd64) d88141f7d80d9ca3ab8767885f8c497fd739b2b0df333ae61f991bf1d072d600
Debian (arm64) eabc5410a8239ab3347ab42ca230f3f8dbbf8019e6d0707e09ae8a0024710519
RPM (x86_64) 3b1dc6591c23bf50cbe83741d16c5c89ba7e2c52e6a5593af246e8e857d6fae9
RPM (aarch64) c2840347a9101cbec09491f73f1222a5ae2c40babfae813f5b412df7509b5638

Changes since last release

From CHANGELOG.md, 2026-07-30:

The project is now claude-desktop-extra

The packages are renamed from claude-desktop-bin to claude-desktop-extra. The name says what the project does: the official Claude Desktop Linux build covers Debian-based distros only, and this project fills the gaps - Arch, Fedora, RHEL, NixOS and AppImage packaging - plus the extra features on top (Computer Use backends, custom themes, multi-profile, Quick Entry, and the growing Extra settings hub).

Upgrades are automatic on every distro:

  • Arch: the new package carries replaces=claude-desktop-bin, so pacman -Syu swaps it in. The pacman repo section is now [claude-desktop-extra]; the old [claude-desktop-bin] section keeps working for the transition (the repo publishes both database names), and the package prints a one-line note if your pacman.conf still uses the old one. The install dir moves to /usr/lib/claude-desktop, the same path deb and rpm always used.
  • Debian/Ubuntu: a transitional claude-desktop-bin package depends on the new name, so apt upgrade migrates in place.
  • Fedora/RHEL: the rpm carries Obsoletes: claude-desktop-bin, so dnf upgrade migrates in place.
  • NixOS: the flake gains a claude-desktop-extra attribute; the existing claude-desktop and default attributes keep working.
  • Config: ~/.config/Claude/claude-desktop-extra.jsonc is the config file now. On first start the app copies an existing claude-desktop-bin.jsonc/.json over automatically - themes and flag overrides survive, and the old files stay in place as backups.

Version numbers keep their {upstream}-{pkgrel} format. The /deploy skill now documents the rule (new upstream version resets pkgrel to 1; any re-release at the same upstream bumps it) and decides force_rebuild itself from what actually changed since the last release.

The GitHub repository moved - and a compatibility mirror keeps old installs working

The repository is now github.com/patrickjaja/claude-desktop-extra; every documented URL follows it. The old claude-desktop-bin repository stays in place as a compatibility mirror for the transition: its Pages keep serving the APT and DNF repositories at the pre-rename URLs, its releases mirror the new repository's assets (so pre-rename pacman sections and AppImage self-updates keep resolving), and its flake re-exports the new one (so github:patrickjaja/claude-desktop-bin inputs keep evaluating). Upgrading migrates the APT/DNF repo configuration to the new URLs automatically; pacman users get the new stanza printed once. The mirror is fed by CI on every release and will be retired after the transition window.

claude-desktop-extra is on the AUR

CI publishes the release PKGBUILD to the claude-desktop-extra AUR package on every release, so yay -S claude-desktop-extra works alongside the signed pacman repo (which remains the recommended path).

The Code and Cowork transcript follows a running response again

Watching Claude work meant grabbing the mouse. Partway through a response the transcript would stop following the output and simply stay where it was, and nothing brought it back except scrolling down by hand. In the floating side chat it was worse - that viewport is a few hundred pixels tall, so once it fell behind, the part you wanted to read was always off-screen.

The cause is how narrow claude.ai's own test is. Its transcript scroller decides whether to keep itself at the bottom by watching a 1px sentinel element with an IntersectionObserver, and it sets overflow-anchor: none, so the browser's own scroll anchoring does not step in either. Being at the bottom therefore means being at it exactly. Measured in a live session: park the transcript at the bottom, move scrollTop up by 3 pixels, and it never follows again - content grew from 1280 to 3080 pixels while the scroll position stayed frozen at 641, stranding the view 1803 pixels behind the output. A 3px drift is not an edge case during streaming; sub-pixel layout, scrollbar-gutter: stable both-edges, a font finishing loading and [contain:strict] reflow all produce one.

fix_epitaxy_autoscroll.nim attaches our own stick-to-bottom to the transcript scrollers in both surfaces. It treats a band of a few lines as "at the bottom" rather than a single pixel, re-asserts the position on every content resize and mutation, and gives up following the moment you scroll up on purpose - wheel, touch and PageUp/Home/ unpin synchronously, so a message arriving in the same frame as your gesture cannot yank you back down. Scroll back to the bottom and it resumes on its own.

This markup belongs to the remote claude.ai SPA rather than to the bundle we patch, so a claude.ai deploy can rename the anchors it keys on. It fails soft when that happens: the sweep finds nothing and the view behaves exactly as it does today.

Contributed by @Felitendo (#209) - thanks!

The pulsing Cowork glow can be held still, for laptops and weak GPUs

The glow behind the Cowork hero never sits still. Its element carries .cowork-hero-glow, and claude.ai gives that class a single declaration - animation: 3.2s ease-in-out infinite cowork-hero-glow-pulse, whose keyframes swing opacity between 55% and 100%.

infinite is the part that matters on a laptop. The animation never ends, so for as long as a Cowork view is open the compositor is handed work every frame and the display pipeline never gets to idle - battery spent on decoration. An opacity animation is cheap while it is GPU-composited, but this is Linux, and our own launcher falls back to --disable-gpu-compositing on software/llvmpipe setups and to --disable-gpu outright when the GPU is blocklisted. In those configurations the glow is redrawn on the CPU for every one of those frames. Upstream's only escape hatch is prefers-reduced-motion: reduce, an OS-wide switch that flattens every other animation in the app along with it.

The Features panel under Settings -> Extra now leads with a Motion switch that holds the glow still. The interesting part is what "still" has to mean: that class carries nothing but the animation, because the gradient and blur come from utilities on the same element. Setting animation: none on its own would therefore leave the glow parked at its own opacity - brighter than the pulse's average, not calmer. So the switch pins both, holding it at a fixed opacity that defaults to 0.55, the dim end of upstream's own range.

No frame-time or power figure is claimed for this: the reasoning is the mechanism above, not a benchmark.

It is applied with webContents.insertCSS and removed again with removeInsertedCSS, so flipping it takes effect immediately in every open window and needs no restart. The choice is saved as coworkGlow in claude-desktop-extra.json; coworkGlowOpacity sets the fixed opacity if 0.55 is not to your taste. Setting coworkGlow by hand in the .jsonc still wins the startup merge, and the switch then shows itself as locked rather than silently disagreeing with the file.

The same stylesheet also defines an animate-[conway-pulse-glow_2s_ease-in-out_infinite] utility that looks related, but @keyframes conway-pulse-glow is not defined anywhere in the shipped CSS, so it animates nothing and is deliberately left alone.

As with anything keyed to remote claude.ai markup, a claude.ai deploy can rename the selector. It fails soft: the CSS matches nothing and the glow keeps pulsing exactly as it does today.

Contributed by @Felitendo (#210) - thanks!

Links