Skip to content

Releases: patrickjaja/claude-desktop-extra

Claude Desktop 1.26832.0 (patch release 3)

Choose a tag to compare

@github-actions github-actions released this 11 Aug 07:08

Claude Desktop 1.26832.0 (patch release 3)

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

Arch Linux (manual package)

# x86_64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0-3/claude-desktop-extra-1.26832.0-3-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0-3/claude-desktop-extra-1.26832.0-3-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.26832.0-3_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.26832.0-3_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.26832.0-3.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.26832.0-3.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.26832.0-x86_64.AppImage
./Claude_Desktop-1.26832.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.26832.0-aarch64.AppImage
./Claude_Desktop-1.26832.0-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) d1b5e1d9d925f4526858cfea3280e0bd9b61784bfa2cc6fa56c1f7023a2ea9d0
Arch pacman (aarch64) f9d8d85b7893c2344727b71c66a654431c4518350a6c38f1277f943fbe76b939
Tarball (x86_64) 639158916ad2dcb88e77a31be4a225b1a33bf3e01067b3683d2f5d1352d3e82b
Tarball (aarch64) 82d415880f88a445be90d1c5ab6be210a8257ec83aa475aafa1394a2a4bb9526
AppImage (x86_64) 6aede026a97500877ef868404a7ca2f74cfad5bab8d74da409cf5b8f1d7247f2
AppImage (aarch64) 554db16a8590eae834355fda8e06f5ab5f9048d42663817ae406c1e9a60c2868
Debian (amd64) aba3d630801cd8f0a40f37957555e3ae70a85baca37830902c3a68d6fceeebe7
Debian (arm64) 69082b55aa5f7e9d9c078ed56716ae1ae5951599772726c471dd446ba3e8e44e
RPM (x86_64) f96663754ced962183a311b5359ec6f67f2b29d1fe2ab06f988bd496974fb39d
RPM (aarch64) 6907be18ff349a5ac1e6738bfa7c38815f3a37e5c19e8f5b0d8698a2058db181

Changes since last release

From CHANGELOG.md, 2026-08-11:

Every release download is attested (#224)

Contributed by Kaj Kowalski (@kjanat). The release job now publishes a GitHub build-provenance attestation for every release asset - tarballs, .deb, .rpm, AppImage, the pacman packages and repo database - before anything goes live, so gh attestation verify --owner patrickjaja <file> works on any download. The step is fail-closed ahead of all publishing: if attestation fails, the release aborts cleanly with every channel still on the previous version. The reproducibility probe now also reuses the release pipeline's own bridge binaries from its cache (restore-only) and prints its digest next to the latest release asset's, so probe and release attestations can cover the very same bytes.

Links

Claude Desktop 1.26832.0 (patch release 2)

Choose a tag to compare

@github-actions github-actions released this 08 Aug 20:44

Claude Desktop 1.26832.0 (patch release 2)

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

Arch Linux (manual package)

# x86_64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0-2/claude-desktop-extra-1.26832.0-2-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0-2/claude-desktop-extra-1.26832.0-2-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.26832.0-2_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.26832.0-2_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.26832.0-2.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.26832.0-2.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.26832.0-x86_64.AppImage
./Claude_Desktop-1.26832.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.26832.0-aarch64.AppImage
./Claude_Desktop-1.26832.0-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) 0b91c41755ebc03a074167ffad8365e41fa6b6f1c0645a0f4a1060804caf9e11
Arch pacman (aarch64) ac34d3939e289d10552c2a3ac3b7fb142240a1fe4c363f00affca60cd1fa36c3
Tarball (x86_64) 6813395c973924c381417cbd60abdfffc2543b653dbe7497b0155a1768433bb6
Tarball (aarch64) 22291af53618b17f4594c17ffd0ee6cec37b3d1e83a173a61e438d3db6416cb7
AppImage (x86_64) f8ab7a21b561ef7a08432031ab7f5168425e0427a4fa9ae7c088892a5bfe9712
AppImage (aarch64) a59a120dbde536868d9a4eb42dc055b2fd7a5f24483ba5eb62c433ba46f58428
Debian (amd64) 7582308185d25711d45b2884f2619d2b73818e3176a4a41f675ba00ea4491329
Debian (arm64) afbee8f7c9322ef668e49ee1a3b3af7e8104edd4be960d81ca11a0a88403b2e5
RPM (x86_64) bdba0a77e0456caea67d49329e7e41a633805f7e5792d8aa7134a29ab6663df3
RPM (aarch64) 52783dbbe93ce03647a3f2922d480fc97c52cad7e9f0093adfef2a7a399f69b2

Changes since last release

From CHANGELOG.md, 2026-08-08:

Claude Desktop v1.26832.0 - upstream switched its minifier, 31 of 45 patches re-anchored

Anthropic's v1.25927.0/v1.26832.0 releases (issue #218) came out of a new bundler toolchain, and the auto-release failed loudly as designed. Three output changes invalidated most of our regex anchors at once: string literals are now backtick template literals (process.platform===`darwin` instead of "darwin"), the "use strict"; prologue is gone from bundle heads (files open with a Sentry preamble), and the code-split bundle gained a second chunk family (index2.chunk-*.js, 130 files, next to 195 index.chunk-*.js).

All 31 affected patches are re-anchored with quote-tolerant patterns (["`] character classes), so they survive either quoting style. The patch orchestrator and validator now stage both chunk families as one logical bundle. fix_computer_use_linux additionally lost its silent-failure path: a sub-patch that does not match now exits nonzero instead of quietly writing the file back unpatched.

Substantively this release is the same app re-emitted through a new toolchain: the capability map (36 status:"unavailable" entries), the built-in MCP server roster, the Cowork VM probe shapes and every stable feature anchor are count-identical to v1.24012. There is still no native Linux Computer Use backend, so all four bundled bridges stay load-bearing. Upstream did ship new native Linux pieces alongside: a cowork-linux-helper binary and a raw smol-bin.x64.img VM image (the Cowork VM path keeps maturing on Linux), plus a chrome-native-host native-messaging binary for the Claude browser extension.

One sub-patch retired as upstreamed: the .deb now bundles that chrome-native-host binary in resources/, exactly where the packaged app looks for it - so fix_browser_tools_linux no longer redirects the native-host path to the Claude Code host under ~/.claude (that redirect existed only because the binary used to be absent from the official Linux build). Claude in Chrome now runs on upstream's own bundled native host; our patch still adds Chromium, Brave, Vivaldi and Opera discovery, the extension auto-install path and the DevTools opener.

The minifier switch also exposed one latent false success: add_growthbook_overrides anchored its injection on "use strict"; via plain string search, and the only remaining occurrence of that string now sits inside a vendored template literal - the injection landed as inert string content while reporting success. It now prepends at the bundle head and asserts its own injected marker. The other head-injecting patches already used a safe prefix check with a prepend fallback and needed no change; all ten were verified together in orchestrator order, twice for idempotency, with node --check clean on all 326 re-split bundle parts.

Settings → Extra → Deployment follows the new managed-settings schema

The key catalog now carries the six keys upstream added: skillCreationEnabled, trustBootstrapDelivery, endUserAttribution (renamed from all-lowercase enduserAttribution, which remains readable as a legacy key), the inferenceGatewayOidcAuthFlow/inferenceVertexWorkforceAuthFlow sign-in flow enums, and updateViaUpdatesHost (marked @next upstream, listed but not yet active).

Gaming themes: all six spinners redrawn as retro pixel art

The gaming themes' loading spinners were flat single-color glyphs (and the Dragon Ball a flat orange blob). Each is now a proper two-frame pixel sprite in the spirit of its game, drawn from period references on a 14-21px grid: the four PlayStation button symbols orbiting in their classic colors, a Game Boy DMG with a blinking screen, a Final Fantasy Black Mage casting sparkles, Link swinging his sword, a Warcraft peon striking a gold pile, and a shimmering 4-star Dragon Ball. All of them stay flat-fill paths with the existing flip animation, so nothing changes in the renderer.

The Black Mage spinner on the Final Fantasy theme

Feature flag catalog refreshed for v1.26832.0

claude-desktop-extra.jsonc's commented-out flag list gains 14 new flags (among them the CliGovernor throttleEnabled/pressureEvictionEnabled pair, a renderer crash-loop watchdog, and resolveCloudBranch) and drops 4 that upstream removed.

Links

Claude Desktop 1.26832.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 19:50

Claude Desktop 1.26832.0

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

Arch Linux (manual package)

# x86_64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0/claude-desktop-extra-1.26832.0-1-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.26832.0/claude-desktop-extra-1.26832.0-1-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.26832.0-1_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.26832.0-1_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.26832.0-1.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.26832.0-1.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.26832.0-x86_64.AppImage
./Claude_Desktop-1.26832.0-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.26832.0-aarch64.AppImage
./Claude_Desktop-1.26832.0-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) f8829e8ca2add23095096c3ba0748d0f5f7203023b9237f5be496ac71419c4da
Arch pacman (aarch64) d519e93350412c0c9c989fd586fb4eaee03e83fff8d2abd27c0828d2d75964a3
Tarball (x86_64) a07b2aa9d3560e19bda2f86ee697f45799c3bd17af742c50d6368ec56defdbeb
Tarball (aarch64) b60b8156bb6a0fc9cfa9be3c8f1caddfd4513cbf16425e1c1a4e1b9b64850617
AppImage (x86_64) 1a2a7b0bd0000f9f17773584b837993f45d5bf3b685c150c2687c38f196a748d
AppImage (aarch64) 62cb37554dfce7cc0716b348f14902991cc9f60e93b58ade131f03cf6d872a77
Debian (amd64) 3e04e290c58faac9f5e2a525dd91ea5e262af66deecd7bc1ed3107d3f8215fcd
Debian (arm64) adfae80716728e4e98aa7ccf5063104e773d271e1f9252f3ec8c720deb282d12
RPM (x86_64) ef4f953ae4ffa55a01563f659ee8ec46feedfe5f4624eecb64d123ecffe02cb9
RPM (aarch64) 993486789ad0b70005f5c1dfb12adc62343ab7a435b487adca76412297f5e59e

Changes since last release

From CHANGELOG.md, 2026-08-08:

Claude Desktop v1.26832.0 - upstream switched its minifier, 31 of 45 patches re-anchored

Anthropic's v1.25927.0/v1.26832.0 releases (issue #218) came out of a new bundler toolchain, and the auto-release failed loudly as designed. Three output changes invalidated most of our regex anchors at once: string literals are now backtick template literals (process.platform===`darwin` instead of "darwin"), the "use strict"; prologue is gone from bundle heads (files open with a Sentry preamble), and the code-split bundle gained a second chunk family (index2.chunk-*.js, 130 files, next to 195 index.chunk-*.js).

All 31 affected patches are re-anchored with quote-tolerant patterns (["`] character classes), so they survive either quoting style. The patch orchestrator and validator now stage both chunk families as one logical bundle. fix_computer_use_linux additionally lost its silent-failure path: a sub-patch that does not match now exits nonzero instead of quietly writing the file back unpatched.

Substantively this release is the same app re-emitted through a new toolchain: the capability map (36 status:"unavailable" entries), the built-in MCP server roster, the Cowork VM probe shapes and every stable feature anchor are count-identical to v1.24012. There is still no native Linux Computer Use backend, so all four bundled bridges stay load-bearing. Upstream did ship new native Linux pieces alongside: a cowork-linux-helper binary and a raw smol-bin.x64.img VM image (the Cowork VM path keeps maturing on Linux), plus a chrome-native-host native-messaging binary for the Claude browser extension.

One sub-patch retired as upstreamed: the .deb now bundles that chrome-native-host binary in resources/, exactly where the packaged app looks for it - so fix_browser_tools_linux no longer redirects the native-host path to the Claude Code host under ~/.claude (that redirect existed only because the binary used to be absent from the official Linux build). Claude in Chrome now runs on upstream's own bundled native host; our patch still adds Chromium, Brave, Vivaldi and Opera discovery, the extension auto-install path and the DevTools opener.

The minifier switch also exposed one latent false success: add_growthbook_overrides anchored its injection on "use strict"; via plain string search, and the only remaining occurrence of that string now sits inside a vendored template literal - the injection landed as inert string content while reporting success. It now prepends at the bundle head and asserts its own injected marker. The other head-injecting patches already used a safe prefix check with a prepend fallback and needed no change; all ten were verified together in orchestrator order, twice for idempotency, with node --check clean on all 326 re-split bundle parts.

Settings → Extra → Deployment follows the new managed-settings schema

The key catalog now carries the six keys upstream added: skillCreationEnabled, trustBootstrapDelivery, endUserAttribution (renamed from all-lowercase enduserAttribution, which remains readable as a legacy key), the inferenceGatewayOidcAuthFlow/inferenceVertexWorkforceAuthFlow sign-in flow enums, and updateViaUpdatesHost (marked @next upstream, listed but not yet active).

Feature flag catalog refreshed for v1.26832.0

claude-desktop-extra.jsonc's commented-out flag list gains 14 new flags (among them the CliGovernor throttleEnabled/pressureEvictionEnabled pair, a renderer crash-loop watchdog, and resolveCloudBranch) and drops 4 that upstream removed.

Links

Claude Desktop 1.24012.11 (patch release 2)

Choose a tag to compare

@github-actions github-actions released this 07 Aug 08:37

Claude Desktop 1.24012.11 (patch release 2)

This release provides Claude Desktop version 1.24012.11 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.11-2/claude-desktop-extra-1.24012.11-2-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.11-2/claude-desktop-extra-1.24012.11-2-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.11-2_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.11-2_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.11-2.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.11-2.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.24012.11-x86_64.AppImage
./Claude_Desktop-1.24012.11-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.24012.11-aarch64.AppImage
./Claude_Desktop-1.24012.11-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) e7a89e6df2547d66a29dd966cef7de17109470f1b91dbcfa102e29316492b7ed
Arch pacman (aarch64) 360bffcf63f51c1d778269a32f0da1bec6b69fcd4ab292c4655dce40662e2182
Tarball (x86_64) b2ec868f12c42df5ee88718474988334861fd8293bd1b8de7f3788e632772c00
Tarball (aarch64) 0fe76118bb90990fe67d4f32e91c72ebce81be782d26d17066c01d08b7df79c5
AppImage (x86_64) e111ddb3d0cb1b6770f179db946874131e6bdac0b5d1cc707a10a9889e0716bb
AppImage (aarch64) ed5f23c3a9acd6a9f511dbba3cbef969865d0fca3a34fee25a79268973b5ec59
Debian (amd64) adc4353367ddeea2875b8489adaacaf204d39122e9ec00c9460e2d0183eb6983
Debian (arm64) c639f68e617ce17f8053397fcd302d2bc42855c3885c48453d7ef0b5e3453e35
RPM (x86_64) 8ab2f743b65a50d644c4a45fc7e73b5222c01deed9ba6995b8912e84fd4bd7bb
RPM (aarch64) 2d6b071b1fb1b75c72ec06f75de1efdf70eca5639f70ccc34683fda0c54a86c9

Changes since last release

From CHANGELOG.md, 2026-08-07:

Settings → Extra: our switches and Anthropic's flags are now two separate pages

The Features page held two unrelated things: the handful of optional features this project adds, and Anthropic's own 134 rollout flags. They are now one page each.

Community Features holds our switches - Diff view modes, Panel tabs, Calm the Cowork glow, and the new Theme picker hotkey - and gains the same filter box the flag list has, so a growing list stays quick to search. Anthropic Features holds the upstream flag list, the per-flag overrides and the "changes require a restart" notice with its Restart now button, unchanged. Nav order is Themes, Community Features, Anthropic Features, Deployment.

The new Theme picker hotkey switch (config key themePicker, on by default) turns the Ctrl+Shift+T gallery off for anyone who wants that shortcut back for something else. The theme list in Settings → Extra → Themes is unaffected.

Nothing moves on disk: both claude-desktop-extra.jsonc (yours, wins) and claude-desktop-extra.json (written by the UI) keep the same keys in the same places.

The Cowork glow switch named the wrong config file

When coworkGlow is set by hand, the switch locks itself and explains where the value came from - but it named claude-desktop-bin.jsonc, the filename from before the project was renamed. It now names claude-desktop-extra.jsonc, which is the file actually being read.

Patches are grouped by what they are for

patches/ was a flat directory of 45 .nim files where nothing distinguished a Linux bug fix from an optional feature. It is now three:

  • patches/linux/ (32) - Linux compatibility. Always on, nothing to configure.
  • patches/community/ (6) - optional features, each with a switch in Settings → Extra → Community Features.
  • patches/core/ (7) - always-on infrastructure the other two build on: the Extra settings pages, the theme engine, the flag-override mechanism, the multi-profile plumbing.

Patches still apply in basename order, so the split changes classification only, not behavior. scripts/apply_patches.py now pins the total in EXPECTED_PATCH_COUNT and refuses to run if discovery finds a different number - a patch cannot be added or lost without someone saying so. The README documents the recipe for adding a community feature.

The Code tab's side panels can open as tabs instead of a split

Diff, terminal, browser, files, artifacts and background tasks have always shared the panel area as a fixed split, each one shrinking to make room for its neighbours. A new Panel tabs switch (Settings → Extra → Community Features → Layout) turns that into a tab strip instead: each panel gets the full width of the panel area. Open panels the way you always have - the app's own toolbar buttons and its Session actions menu - and each one arrives as a new tab. Ctrl+1-9 jump straight to a tab, and closing one replays it through the panel's own close control, so panel teardown itself is unchanged. The chat column is unaffected.

Switching tabs shows and hides panels rather than rebuilding them, so every panel keeps its state: the diff panel's expanded and collapsed files are still expanded and collapsed when you come back, and the terminal keeps its scrollback and its size. Upstream's own layout is never rewritten to switch - the panels you are not looking at are still in it, just hidden - which is also why a switch is instant instead of taking the second a rebuild used to.

The consequence worth knowing: a hidden panel keeps running. A live preview goes on rendering and a browser tab goes on loading in the background, where closing a split pane would have torn them down. That is what makes them instant to come back to, and it costs some CPU for a preview that never stops moving.

The chat/side boundary stays where you put it. The panel area is sized as if it were a two-pane split - chat versus one panel - and that proportion is remembered per session, so opening or closing a panel no longer moves the boundary. Drag the divider between chat and the panel area to resize, exactly as before; where you drop it is where it stays, on every tab and after a reload.

The tab bar carries the expand control, at its right edge. Expanding spans the active panel across the window, and it stays expanded while you switch tabs, so you can flick between two panels at full width. Upstream discards the other panels while one is expanded, so the panel you switch to while expanded comes back fresh - collapse first if you want to keep where you were. With many tabs open the chips scroll sideways while the expand control stays pinned at the right edge, so it is always reachable.

Opening and closing panels does not disturb the layout. A panel the app has only just inserted is hidden before it can paint, rather than appearing as a second split for a few frames and then being tidied away, so the boundary holds still through the whole operation - measured at zero pixels of movement across every frame of an open and a close, where it previously jumped 165 px for around 90 ms each way.

Off by default, and off is a complete retreat: the tab bar and its styling are removed and upstream's real split layout is simply there again, because it was never replaced. Nothing you had open is lost. Only the active tab and the chat/side proportion are remembered per session - which panels are open is upstream's own record, so opening, closing or reordering panels in its UI is reflected in the tabs.

Because the Code tab is remote claude.ai code, the bar degrades rather than fights: if an update moves the internals it drives, it renders no bar and warns once, leaving the layout exactly as the app left it - and since it never rewrites that layout, the degraded state is just the stock split UI. Everything it reaches into is read-only: the only upstream controls it ever presses are the active panel's own close and expand buttons, and only when you press them. The anchors it depends on are inventoried with re-derivation recipes in baseline/PANEL_TABS_ANCHORS.md, which joins the per-release audit checklist.

Designed, built and hardened by @dels07 in #216 - thanks!

Diff views: the scope dropdown no longer survives a panel swap

Upstream reuses a panel's chrome row when one panel replaces another in the same slot, and the diff-views scope dropdown installed on that row could survive the swap and appear on a view it does not apply to. Installed dropdowns are now revalidated against the row's current view and removed when it no longer qualifies. A pre-existing bug, found and fixed in #216 because panel ta...

Read more

Claude Desktop 1.24012.11

Choose a tag to compare

@github-actions github-actions released this 07 Aug 06:31

Claude Desktop 1.24012.11

This release provides Claude Desktop version 1.24012.11 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.11/claude-desktop-extra-1.24012.11-1-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.11/claude-desktop-extra-1.24012.11-1-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.11-1_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.11-1_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.11-1.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.11-1.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-extra

AppImage (Any Distro)

# x86_64
chmod +x Claude_Desktop-1.24012.11-x86_64.AppImage
./Claude_Desktop-1.24012.11-x86_64.AppImage
# ARM64
chmod +x Claude_Desktop-1.24012.11-aarch64.AppImage
./Claude_Desktop-1.24012.11-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) 490e52168588f9056da78bd68adf04f50dc7b0502a058d899cf9a47874c2062f
Arch pacman (aarch64) c16f19f889e49f87347a00ac2fd0ed3a7bcbf18e2eab0056f9eddf6b35bc31ab
Tarball (x86_64) 9f11a4979ec3f6c58dbb3112a1549ce96074749de26476c7b940d06b0839d62b
Tarball (aarch64) 3842eaaf9ae31fe5e292eb347b2e3460e8f089c8da7a462e11956f75378ec604
AppImage (x86_64) 0842e7afe0919b25697a735bb20f1df8908466928401126e457d505efb09598c
AppImage (aarch64) ecaa4a161964765e379dc8ad9672da4448f4675145a1f19d573a5f18a52c5378
Debian (amd64) 3dcd48dd832c934fcfc2f1e0ac9cd631cd820042332460c796ef978bdad5c90d
Debian (arm64) dde90257b36c209baf7fec948c9b7ed76f3d1c4df65bb3c86127dba2600028f8
RPM (x86_64) 374d16d92880f72ff1d9c09ea91bd80ac182948730bf3766496bc580ef1ab592
RPM (aarch64) 9f2637f91c70fdbf532d89784ed07cc1cccd6bc7c50da63905fe8deb126898dd

Changes since last release

From CHANGELOG.md, 2026-08-07:

The Code tab's side panels can open as tabs instead of a split

Diff, terminal, browser, files, artifacts and background tasks have always shared the panel area as a fixed split, each one shrinking to make room for its neighbours. A new Panel tabs switch (Settings → Extra → Features → Layout) turns that into a tab strip instead: each panel gets the full width of the panel area. Open panels the way you always have - the app's own toolbar buttons and its Session actions menu - and each one arrives as a new tab. Ctrl+1-9 jump straight to a tab, and closing one replays it through the panel's own close control, so panel teardown itself is unchanged. The chat column is unaffected.

Switching tabs shows and hides panels rather than rebuilding them, so every panel keeps its state: the diff panel's expanded and collapsed files are still expanded and collapsed when you come back, and the terminal keeps its scrollback and its size. Upstream's own layout is never rewritten to switch - the panels you are not looking at are still in it, just hidden - which is also why a switch is instant instead of taking the second a rebuild used to.

The consequence worth knowing: a hidden panel keeps running. A live preview goes on rendering and a browser tab goes on loading in the background, where closing a split pane would have torn them down. That is what makes them instant to come back to, and it costs some CPU for a preview that never stops moving.

The chat/side boundary stays where you put it. The panel area is sized as if it were a two-pane split - chat versus one panel - and that proportion is remembered per session, so opening or closing a panel no longer moves the boundary. Drag the divider between chat and the panel area to resize, exactly as before; where you drop it is where it stays, on every tab and after a reload.

The tab bar carries the expand control, at its right edge. Expanding spans the active panel across the window, and it stays expanded while you switch tabs, so you can flick between two panels at full width. Upstream discards the other panels while one is expanded, so the panel you switch to while expanded comes back fresh - collapse first if you want to keep where you were. With many tabs open the chips scroll sideways while the expand control stays pinned at the right edge, so it is always reachable.

Opening and closing panels does not disturb the layout. A panel the app has only just inserted is hidden before it can paint, rather than appearing as a second split for a few frames and then being tidied away, so the boundary holds still through the whole operation - measured at zero pixels of movement across every frame of an open and a close, where it previously jumped 165 px for around 90 ms each way.

Off by default, and off is a complete retreat: the tab bar and its styling are removed and upstream's real split layout is simply there again, because it was never replaced. Nothing you had open is lost. Only the active tab and the chat/side proportion are remembered per session - which panels are open is upstream's own record, so opening, closing or reordering panels in its UI is reflected in the tabs.

Because the Code tab is remote claude.ai code, the bar degrades rather than fights: if an update moves the internals it drives, it renders no bar and warns once, leaving the layout exactly as the app left it - and since it never rewrites that layout, the degraded state is just the stock split UI. Everything it reaches into is read-only: the only upstream controls it ever presses are the active panel's own close and expand buttons, and only when you press them. The anchors it depends on are inventoried with re-derivation recipes in baseline/PANEL_TABS_ANCHORS.md, which joins the per-release audit checklist.

Designed, built and hardened by @dels07 in #216 - thanks!

Diff views: the scope dropdown no longer survives a panel swap

Upstream reuses a panel's chrome row when one panel replaces another in the same slot, and the diff-views scope dropdown installed on that row could survive the swap and appear on a view it does not apply to. Installed dropdowns are now revalidated against the row's current view and removed when it no longer qualifies. A pre-existing bug, found and fixed in #216 because panel tabs made it easy to hit.

Release pipeline: releases can skip the AUR during an extended outage

The AUR preflight added on 2026-08-03 did its job: when the AUR went into maintenance again, the v1.24012.11 auto-release (run 30868900341) stopped before publishing anything, keeping every channel consistent. The right call for a blip - but this maintenance window has lasted days, freezing all channels behind one that is down. The release workflow now takes a skip_aur dispatch input: the AUR preflight and push are skipped, every other channel (GitHub Release, pacman repo assets, Pages apt/dnf repos, README/Nix versions) publishes normally, and the AUR catches up automatically on the next non-skipped release, since the push diffs the PKGBUILD against whatever the AUR currently holds. Unattended auto-releases keep the default false, so the fail-fast preflight still guards them.

Links

Claude Desktop 1.24012.9 (patch release 14)

Choose a tag to compare

@github-actions github-actions released this 03 Aug 09:46

Claude Desktop 1.24012.9 (patch release 14)

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-14/claude-desktop-extra-1.24012.9-14-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-14/claude-desktop-extra-1.24012.9-14-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-14_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-14_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-14.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-14.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) f35533c278a7441c44143fe8a7c2adb835714ef28cf00ce0215f18070f2c94fc
Arch pacman (aarch64) fb24567f75734dea2c32b0af26724b484199342cecc22f2b6d1969e7b5468187
Tarball (x86_64) bac937ed248e3291f91290a674f7c944b434102f89dd65e317732d83f594fe22
Tarball (aarch64) 4cbfa080b7ebb93b3b251c44da15d26fe2872aa6bb954e3f2bdfcc761c35359a
AppImage (x86_64) 7e043478547f92d6fc20eeb0cfb824fc15fdeb867c450d5dc904ba68ce187497
AppImage (aarch64) cdf15c516a151512598db8ae09dc61a4338839192d46e305d05cad2826a2340e
Debian (amd64) ac63c83cec87c1c03cf788b62f618d15ccf8e03aea60c3387794d2be5d0b0d85
Debian (arm64) 4a94a632f489ed434faad398ab320699c48899ac9e91fffc9655a7a6a6f61a67
RPM (x86_64) 72515eccf2eb2fc1ea095425f028edac1d8028dfc5bb88df350fa07d55ee2dc1
RPM (aarch64) f21226a07f90ae4870d833191598f79a42e036bf641821aa0a5fdb8e518f5417

Changes since last release

From CHANGELOG.md, 2026-08-03:

Launching from a panel or menu no longer freezes startx/xinit desktops

On a session started with startx/xinit instead of a display manager, launching Claude Desktop from a panel button or the applications menu suspended the entire desktop: the window mapped blank, nothing redrew, only the pointer and VT switching kept working. The desktop on such a session runs on a VT and shares one process group, and the app's Claude Code integration probes the user environment with an interactive login shell (bash -l -i -c '... env'). Bash's job-control init finds that shell in a background process group of its controlling terminal and raises SIGTTIN against the whole group - which on a startx session is xfce4-session, the window manager, the panel and everything else. Terminal launches were always fine, because there the launcher is the foreground job.

The launcher now detaches via setsid before exec, but only when it is genuinely a background job on a controlling terminal (tpgid exists and differs from pgid). Display-manager sessions (tpgid == -1) and foreground terminal launches (tpgid == pgid) are untouched - terminal users keep live output and Ctrl-C. On a detached launch the app's stdout/stderr now lands in ~/.cache/claude-desktop/stdout.log (2 MiB rotation) instead of an unreadable VT, which also makes issue reports from menu-launched sessions possible. CLAUDE_KEEP_TTY=1 restores the old behaviour.

Root-caused (down to the wchan do_signal_stop capture) and fixed by Marco Bucchiarone (@Eresy) in #213 - thanks!

Computer Use executor: remaining probe/timing exec calls converted to argument arrays

The residual shell-string execSync calls in js/cu_linux_executor.js now run through execFileSync with argument arrays: the systemd-detect-virt VM probe, the which-based command cache, the pgrep -x ydotoold daemon check, and the ydotool hold-key sleep. None of these carried attacker-controlled input (the model-supplied paths were already converted 2026-07-13), so this is defensive consistency, not a vulnerability fix. The now-unused _exec/_execBuf shell helpers are gone.

Contributed by @anupamme (#212) - thanks!

Post-merge follow-up: the PR also whitespace-split COWORK_SCREENSHOT_CMD into an execFileSync argument array, which would have broken quoted arguments and pipes in user templates (e.g. grim -g "{X},{Y} {W}x{H}" {FILE}). That variable is a user-supplied command template from the user's own environment - shell evaluation is its documented contract and carries no injection surface - so the follow-up commit restores it verbatim.

Links

Claude Desktop 1.24012.9 (patch release 13)

Choose a tag to compare

@github-actions github-actions released this 02 Aug 09:22

Claude Desktop 1.24012.9 (patch release 13)

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-13/claude-desktop-extra-1.24012.9-13-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-13/claude-desktop-extra-1.24012.9-13-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-13_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-13_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-13.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-13.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) a52719298ec7eeca6fe750f3b477a281af0975765a49ab734501e5a534951568
Arch pacman (aarch64) 84a8dda9eff57683c68585820d82ab267f0cf7dde776a4c2892c28e7aeff4b24
Tarball (x86_64) b81ceb83ace6e8684d9b76f8a1bc3f2f12de7fa9d78c9e05e36f8d41b0cc68bf
Tarball (aarch64) 2edc2fc5aed11478493a139cd372e5d581c52f95ea2a53fbba1cdb443396bf13
AppImage (x86_64) f9e7aef9a6760ead9b755baa985f78b9015600bea01e5b54045c0ea95cef0965
AppImage (aarch64) e48aba5e92cddde2ab5410f65f9e2cb157b03c3ec0920f9f22fdfe81f92f4816
Debian (amd64) 439238179a3d085bba80697597630b8d98739c09e8912d1a22266c3aeb9ff3fb
Debian (arm64) babb7efbb71081f8bd25c80001da4073bc82d9dab853296ad6b6133f9e25dac8
RPM (x86_64) 30f33a7b0f428866f1768cc6d1e75b4f6b38f058be4fe064e1f5a5162bb078ac
RPM (aarch64) 891aeda8972a35561e4b1c1513dea2c17dad3375a5be6652f4bac3ba149949fe

Changes since last release

From CHANGELOG.md, 2026-08-01:

The Code tab's diff panel gets view modes - and stops comparing against the wrong branch

The diff panel had one view: everything between the remote default branch and your working tree. Committed work and uncommitted edits arrived in one undifferentiated list, so "what have I actually committed on this branch" and "what did Claude just change" were questions the panel could not answer.

A dropdown in the panel's own header row now switches between three scopes:

  • Working tree - what the panel always showed.
  • Branch changes - committed work only, from the fork point to HEAD.
  • Latest turn - what changed during the most recent conversation turn, untracked files included.

Nothing is re-rendered. Rather than draw a second diff view, this rewrites the arguments of the app's own git IPC and lets the stock renderer draw every mode - so syntax highlighting, virtualized scrolling, theming and line comments work in Branch changes exactly as they do in Working tree. Refs are handed over as full SHAs, because the app resolves a name by trying origin/<ref> first and would otherwise turn HEAD into origin/HEAD and diff a commit against itself.

The diff panel now finds the branch you actually branched from

Upstream takes the base branch from the remote default (origin/HEAD) and nothing else. In a repository whose default is develop, a branch cut from master is measured from whatever old commit develop and master last shared, so the panel lists files nobody on the branch has touched - and the breadcrumb names a branch the diff was never computed against.

Base detection now scores candidates - origin/HEAD, main, master, develop, trunk and the branch's own upstream - by how few commits separate each candidate's merge-base from HEAD, and takes the closest fork point. Nothing hardcodes a branch-naming scheme, and a repository whose default really is the closest fork point is left exactly as upstream had it. The breadcrumb is corrected with the comparison, so the label always names the branch the diff was computed against.

To pin a base by hand:

git config branch.<branch-name>.cdbBaseBranch master

Everything degrades to the stock panel rather than breaking, and each refusal is logged once with its reason. Git runs on fixed argument vectors in the directory observed on the session's own CLI spawn, never one supplied by the page, and every ref and path is checked before it reaches a command. A diff or file over 2 MiB is refused rather than served truncated: collection is killed mid-stream, so a partial patch presented as a complete one would be a wrong answer that looks like a right one.

Latest turn keeps its snapshot per repository, and says so when it has none

Latest turn compares two git write-tree snapshots taken from a temporary index at each turn boundary - no commits, no stashes, no refs, and untracked files included. Snapshots are kept per repository, because the app spawns its CLI for other directories (plain $HOME among them) every few seconds.

When a repository has no turn recorded yet, the Latest turn entry is disabled and explains itself on hover - the menu does not offer a scope that would show you something else. Sending one message arms it.

The diff view modes are opt-in, behind their own switch

Everything above is off by default. A Source control switch at the top of Settings -> Extra -> Features turns it on, and leaving it alone is the supported way to use this build: the feature reshapes a first-party surface - it rewrites the arguments of Anthropic's own git IPC and corrects the base branch the stock panel compares against - and that is worth asking for rather than assuming. A fresh install therefore behaves exactly like the official one.

Off is a genuine retreat, not a hidden control: no dropdown, a byte-for-byte pass-through, no base-branch correction (the breadcrumb names upstream's own base again), no turn snapshots, and every remembered mode reset to Working tree. Both directions apply live, with no restart.

The modes arm per repository, once a CLI session has been observed in it, so turning the switch on mid-session leaves the dropdown reading Working tree until the next message lands. That wait is deliberate: the file list and the content of each file in it are gated on the same fact, so the panel can never show one from the branch and the other from the working tree.

The setting is diffViewModes in claude-desktop-extra.json; "off" is the absence of the key, so only an explicit opt-in ever writes anything. Set it by hand in the .jsonc and the switch shows itself as locked rather than silently disagreeing with the file.

Expand or collapse every file in the Code tab's diff panel

The diff panel opens one file at a time. A new button in the panel's own header row, between the scope dropdown and the ⤢/✕ controls, does the whole list at once.

Expanding is not a single sweep, and cannot be: the app fetches each file's patch lazily as it scrolls into view, and a file whose patch has not arrived has a disabled header that cannot be expanded at all. So one press expands everything already loaded and stays armed - files keep expanding as you scroll and their patches land. Press again to collapse everything and turn that off. Collapsing runs bottom-up on purpose: the app scrolls each file into view as it closes, so top-down would leave you staring at the bottom of the diff.

It never fights you. A file you collapse by hand stays collapsed, even while the button is armed. Changing the diff scope disarms it, so a large branch diff is never dumped open unasked, and closing the last open file by hand disarms it too - the button then reads Expand again rather than promising a Collapse it no longer offers. Closing the panel, or expanding it to fullscreen, tears the old instance down instead of leaving it running invisibly.

The button is a clone of its neighbouring control, so it inherits the panel's hover, focus ring and theme rather than approximating them, and its caret glyph comes from Anthropic's own icon font - but only after two checks agree it will actually draw: the font is loaded, and a canvas ink probe finds ink at both codepoints it can paint (the expand caret and the collapse caret). That font renders nothing at all for an unmapped codepoint, so a codepoint that shifts in a future release would silently produce an invisible button - and when the font is missing altogether, the browser substitutes one whose tofu box the ink check alone would read as success. Either check failing leaves the hand-drawn SVG in place.

Part of the existing Diff view modes switch (Settings → Extra → Features), still off by default. A new headless-Chromium suite, scripts/test-diff-views-expand-dom.mjs, covers placement, the ARIA contract, both ...

Read more

Claude Desktop 1.24012.9 (patch release 12)

Choose a tag to compare

@github-actions github-actions released this 31 Jul 20:09

Claude Desktop 1.24012.9 (patch release 12)

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-12/claude-desktop-extra-1.24012.9-12-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-12/claude-desktop-extra-1.24012.9-12-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-12_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-12_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-12.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-12.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) f9aaa3e2ca3c3de5089ac4c9ffd8607c627c7e4d29a768c87d3860446d1468b3
Arch pacman (aarch64) 0c643ec01c4e25f28f4e7fe1706de71a0710da5295873ec97dc9ac2ea84e0c32
Tarball (x86_64) 9374de74ffbb604625add39231c61fdf3948449593ceee1c7c118ef7dd426d1a
Tarball (aarch64) 52c4e822f68246aaab8c432e3cba964fddd44dae28ea06ac20a7acfdd170782c
AppImage (x86_64) 529ac2a9fadd458bafc691d40de1ebcba5cf89ca35ec001b254a76c1890d5020
AppImage (aarch64) f3085e1e1616547e5d71bd4b9df8d3b9756272da42d50d20f0c4881b979a4f78
Debian (amd64) 7353a9669cf2c722b4bd0464cf698b7b08bf592ecec4a6b4a0c7cf474ab492f1
Debian (arm64) 4f3396ca8d5b230f6c7cf73a4945391345079c0c4495abc7336a2c037eb08865
RPM (x86_64) c4af9cc28f358a4d1a85b4a3fcc18f262b825050678e44b7c42e20ea248307d3
RPM (aarch64) b3b96b8cbdf4c9dcd3b69f07417112b66cb68607f0d2a75293d2a4794dd5383e

Changes since last release

From CHANGELOG.md, 2026-07-31:

Settings → Extra → Deployment: a 1P/3P switch, and the whole 3P config as toggles

Third-party inference was a one-way door. Turning it on took a root shell to place /etc/claude-desktop/managed-settings.json, and getting back to a personal claude.ai login took knowing that deleting that file is not enough - the app keeps its own stored 3P config and boots from that, so the only way out was a launcher flag or hand-editing JSON in a directory most people never look at.

The new Deployment panel makes both directions a button. It has:

  • The mode switch. 1P / 3P, showing what the running session is, what the next start will use, and which config source decided that. It writes upstream's own deploymentMode key, which overrides a stored 3P configuration - so a machine that got stuck in 3P is one click and one restart from personal again, with nothing deleted.
  • The configuration, as a form. Every key of the managed-settings schema this build accepts, grouped the way upstream's own schema groups it: provider and credentials, model list, surfaces (Chat/Cowork/Code), workspace and egress allowlists, disabled built-in tools, connectors and extensions, plugins, telemetry, update policy, usage limits, branding, bootstrap. Booleans are switches, enums are selects, lists are one-per-line, and a key you never touch stays absent from the file so Claude Desktop keeps its own default. Provider-specific fields stay hidden until that provider is selected.
  • The stored configurations. The panel edits the applied entry of the same store upstream's 3P Setup wizard uses, so the two show each other's values. Its Active configuration picker switches between them - and picking None boots 1P while leaving every file on disk.
  • A raw JSON editor for anything the form does not cover, which rejects a key this build does not know instead of writing a file the app would then ignore whole.
  • Undo for everything. Each set key has a clear chip, the mode switch has one that forgets the saved choice so the stored configuration decides again, and the section heading has a clear all (two clicks, because it throws work away) for a handful of toggles flipped by mistake. Clearing never deletes a configuration file - the entry stays listed and can be filled in again.

Everything is written to your own profile directory (~/.config/Claude-3p/, per profile), 0600 in a 0700 dir, using only files upstream already reads - so no sudo, and no patch to the app's startup path. Stored credentials are write-only: the panel can replace one but never displays it, and it will not hand one to the claude.ai page it renders in. Two keys stay read-only there and remain yours to deploy through the policy file: disableDeploymentModeChooser, which is precisely what locks a machine into 3P, and managedMcpServers, whose entries can start a process. A valid /etc/claude-desktop/managed-settings.json still wins over all of it; the panel says so and turns read-only.

Also in this release: betaFeaturesEnabled no longer exists upstream. If your policy file still carries it, remove it - one unrecognized key makes Claude Desktop discard the entire managed file. docs/third-party-inference.md documents the new route and this trap.

Themes: Built-in and Community are one "Common" section

Whether a palette ships as a built-in or came from the community collection is a packaging detail, not something to pick a theme by - so the two sections are now one Common list, alphabetically, in both the Settings panel and the Ctrl+Shift+T picker. Your themes and Gaming are unchanged.

The Extra panels link the config file behind them

Each panel ends in the file it is really about, as a link: click the path to open it in your editor, or the folder button to show it in your file manager. Files that do not exist yet open their containing folder rather than failing. Themes names the file a click there actually persists to, which depends on which of claude-desktop-extra.jsonc / .json exists; Features links the .jsonc - the file you edit by hand, and the one whose flag ids win over the panel. The page asks for a location by name and never sends a path, so it cannot ask the desktop to open anything but our own files.

Links

Claude Desktop 1.24012.9 (patch release 9)

Choose a tag to compare

@github-actions github-actions released this 30 Jul 13:00

Claude Desktop 1.24012.9 (patch release 9)

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-9/claude-desktop-extra-1.24012.9-9-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-extra/releases/download/v1.24012.9-9/claude-desktop-extra-1.24012.9-9-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-9_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-9_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-9.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-9.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) e3453d453785a359278adf46c5310b89cd2639f334828062ceb7e8cf16756290
Arch pacman (aarch64) 1912505c8fb95f33451885386848e798aeb0c03088de8c32482dedc3fa5c4dce
Tarball (x86_64) 3867ca3f220406f9991c8a60020b59c64e93e7e5014872ac8611902fbbd75ec5
Tarball (aarch64) 7bc1af36621f31790d18ab1b45e1c63d4c3d7f8efdd6143b84381c68b14c6f7f
AppImage (x86_64) 7beb6977b38bde9c54f29723400b14fee84a8af9e84a1356e74bdfe769f6c111
AppImage (aarch64) acddb5c13ed16559a1fe0cb26410ee8f414ec61e9773051d818a434c22db49b8
Debian (amd64) 0916eba83c5ca760da00acf8b0978466665c6da0c0f066da0f2bb19da8627172
Debian (arm64) bb8c9e156e4c4b173fa26fcc6f455031b87b0989d9a56f0ef5a98b9bfd26c0c4
RPM (x86_64) f14fdb83b1297d7125ff9f10959e522d0ac8290a23aeee1257bc9b3920575f68
RPM (aarch64) ba435ea2db89749ce1a75f08dab36fac57a1f09986a81e127d52a26914d04e03

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!

84 community color palettes now ship with the package

Alongside the seven curated built-in themes, the theme patch now bundles 84 palettes converted from the Noctalia community-palettes collection - Rose Pine, Gruvbox, Everforest, Kanagawa, Solarized, Tokyo Night, the Catppuccin accent variants and many more. Each one is a full dual light/dark token set, so "activeTheme": "rose-pine-moon" is all a config needs and Claude's own light/dark toggle keeps working. Theme resolution order is your own themes entries first, then the built-ins, then the community palettes, so a theme you author under the same slug replaces the bundled one instead of colliding with it.

The conversion is done by scripts/generate-community-themes.mjs, which maps each palette's Material-ish roles onto our CSS tokens, fixes border polarity (community palettes follow surface polarity; claude.ai needs the opposite), substitutes button-label colors that would be unreadable on their own accent, and renders one swatch card per palette. It is deterministic and takes the collection path as its argument, so refreshing after the upstream collection changes is a single command. The role-to-token mapping is documented in the script's header.

themes/PALETTES.md is the visual catalog: all 97 bundled palettes with their swatch cards and slugs, an index, and notes on the ones with deliberately unusual variants (the AMOLED palettes' pure-black backgrounds, the muted mid-tone light variants of Everforest and the Kanagawa pair).

Six gaming themes and a Gaming category

Six palettes drawn from games ship alongside the curated built-ins: PlayStation (PS1 console ...

Read more

Claude Desktop 1.24012.9 (patch release 8)

Choose a tag to compare

@github-actions github-actions released this 30 Jul 11:26

Claude Desktop 1.24012.9 (patch release 8)

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-bin/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-bin/releases/download/v1.24012.9-8/claude-desktop-extra-1.24012.9-8-x86_64.pkg.tar.zst
# ARM64
sudo pacman -U https://github.com/patrickjaja/claude-desktop-bin/releases/download/v1.24012.9-8/claude-desktop-extra-1.24012.9-8-aarch64.pkg.tar.zst

Debian/Ubuntu (APT Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/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-8_amd64.deb
# ARM64
sudo apt install ./claude-desktop-extra_1.24012.9-8_arm64.deb

Fedora/RHEL (RPM Repository — recommended)

curl -fsSL https://patrickjaja.github.io/claude-desktop-bin/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-8.x86_64.rpm
# ARM64
sudo dnf install ./claude-desktop-extra-1.24012.9-8.aarch64.rpm

NixOS / Nix

nix run github:patrickjaja/claude-desktop-bin

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) c394d44d600d754cfa393de43bc682fcda47c864c588627ffd9938a749b00f32
Arch pacman (aarch64) 51dc249523a8c885f6bdb102a5bda09c2f72b2f1e37badd4fbf4fdf747531834
Tarball (x86_64) c75ce95450e814d879ff66db7f5fb35ccfc22094a67ba220aee1c125bc4295e6
Tarball (aarch64) 7bcc867a412c9501a0f28a5d0ff437f15025eeb8545e773deacbb48594cf85e2
AppImage (x86_64) c36aa190d4a824d3260bdc4aed452cc4fe45b2da9568bfd6d9b8f11e92a2bb9f
AppImage (aarch64) 36dbf61f9ac368f29f0f2a627deb6aca2ffc1163555d856ace8ed302ac6050ed
Debian (amd64) b3e58a1d9d59cb7a293280ad47c530acc779d803f1ff06f0cf60f27f074b8906
Debian (arm64) 137b3c704f070c7f01f4663d329b3e4d986d23a1c6c0be2f2df221912cf7a471
RPM (x86_64) 57d4b75a345cc94eededb3f3520f0a50d9913a4420f7384d8a805bd616a44304
RPM (aarch64) 684ffe6e6322aea94569ed15c1f315b0ce801674bb73a40c77ab5db6b5807966

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 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!

84 community color palettes now ship with the package

Alongside the seven curated built-in themes, the theme patch now bundles 84 palettes converted from the Noctalia community-palettes collection - Rose Pine, Gruvbox, Everforest, Kanagawa, Solarized, Tokyo Night, the Catppuccin accent variants and many more. Each one is a full dual light/dark token set, so "activeTheme": "rose-pine-moon" is all a config needs and Claude's own light/dark toggle keeps working. Theme resolution order is your own themes entries first, then the built-ins, then the community palettes, so a theme you author under the same slug replaces the bundled one instead of colliding with it.

The conversion is done by scripts/generate-community-themes.mjs, which maps each palette's Material-ish roles onto our CSS tokens, fixes border polarity (community palettes follow surface polarity; claude.ai needs the opposite), substitutes button-label colors that would be unreadable on their own accent, and renders one swatch card per palette. It is deterministic and takes the collection path as its argument, so refreshing after the upstream collection changes is a single command. The role-to-token mapping is documented in the script's header.

themes/PALETTES.md is the visual catalog: all 97 bundled palettes with their swatch cards and slugs, an index, and notes on the ones with deliberately unusual variants (the AMOLED palettes' pure-black backgrounds, the muted mid-tone light variants of Everforest and the Kanagawa pair).

Six gaming themes and a Gaming category

Six palettes drawn from games ship alongside the curated built-ins: PlayStation (PS1 console gray over charcoal blue-black, PlayStation-blue accent, status colors borrowed from the controller's button symbols), Game Boy (DMG shell gray with magenta buttons in light, pea-green LCD in dark), Final Fantasy (parchment cream over the classic menu blue with a crystal-gold accent), Zelda (forest green and gold), Warcraft (parchment gold and Alliance blue, with orc-green success) and Dragon Ball (sky and white over deep blue, bright orange accent). They resolve at built-in rank, so "activeTheme": "gameboy" is all a config needs, and they are authored in js/gaming_themes.json.

They are grouped by a new category field rather than by which registry they come from, so they get their own divider-separated Gaming section in both the Ctrl+Shift+T picker and Settings -> Extra -> Themes. Mario carries the same category, so it moves into that section too - seven cards in all. A theme of your own can join it with "category": "gaming".

Every bundled palette now has its own loading spinner

The spinner reshape used to be a built-in-only luxury. All 84 community palettes now carry one too, drawn from the palet...

Read more