Skip to content

fix(desktop): install theme packs from Settings → Themes - #617

Merged
github-actions[bot] merged 1 commit into
developfrom
cursor/themes-one-click-install-2099
Aug 26, 2026
Merged

fix(desktop): install theme packs from Settings → Themes#617
github-actions[bot] merged 1 commit into
developfrom
cursor/themes-one-click-install-2099

Conversation

@tomymaritano

Copy link
Copy Markdown
Collaborator

Summary

Settings → Themes now has In use and Available palettes. Click Install on Limestone (or any category === "theme" pack) to download the GitHub release tarball, move the card to In use, and activate it — without leaving Themes. Other package stays on Plugins → Install.

Continues #616 (JS registerTheme harvest already on develop). OFFICIAL_THEMES stays [].

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Related Issues

Follow-up to #616 / #604. Theme.json on satellites is still a later pack-contract change.

Checklist

  • I've read CONTRIBUTING.md
  • Tests pass locally (pnpm test)
  • Build succeeds (pnpm build)
  • PR targets develop branch (not main)

What changed

  • In use: Default (tokens.css) first, then installed packs (including JS registerTheme palettes). Click selects; selected = outline.
  • Available palettes: live GET /plugins rows with category === "theme" that are not installed. Heading + hint. Card is name, one-liner, v{version}, primary Install. No fake preview. No Plugins redirect.
  • Install always uses registry bundleUrl via installFromUrl. Never api.github.com git/contents.
  • Success: {Name} installed. + requestReload / dripnex:plugins:refresh + activate. Fail: Couldn't install {Name}. Use Plugins → Install → Other package if this keeps failing. Card stays Available.
  • Catalog fail: inline Couldn't load palettes. + Retry; fallback COMMUNITY_CATALOG now includes extras past Fog (Sakura, Limestone, Walnut, Ash, Quartz, Cove, Velvet, Ink, Pine, Saffron, Dune, Noir).

Tests

  • Default first; JS-registered pack appears in In use and leaves Available.
  • Available lists uninstalled theme-category rows.
  • Install target is the GitHub release bundleUrl.
  • Fallback catalog includes extras past Fog.

Screenshots

N/A — desktop Settings; covered by unit tests.

Open in Web Open in Cursor 

Add In use / Available palettes on the Themes screen so Limestone
installs and activates in one click from the GitHub release tarball.
Expand the offline COMMUNITY_CATALOG past Fog so extras still appear
when the registry API is down. OFFICIAL_THEMES stays empty.

Co-authored-by:  Tomás Maritano <tomymaritano@gmail.com>
@tomymaritano
tomymaritano marked this pull request as ready for review August 26, 2026 01:59
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 45 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6ae2895f-1563-44e9-8d3d-68efa405f20c

📥 Commits

Reviewing files that changed from the base of the PR and between 6dc1bad and 42b87a6.

📒 Files selected for processing (7)
  • apps/desktop/src/main/plugins/githubInstall.ts
  • apps/desktop/src/preload/api/plugins.ts
  • apps/desktop/src/renderer/pages/settings/sections/AppearanceThemes.module.css
  • apps/desktop/src/renderer/pages/settings/sections/ThemesSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/__tests__/communityCatalog.test.ts
  • apps/desktop/src/renderer/pages/settings/sections/plugins/communityCatalog.ts
  • apps/desktop/src/renderer/pages/settings/sections/themes/AvailablePaletteCard.tsx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions
github-actions Bot enabled auto-merge (squash) August 26, 2026 01:59
@github-actions
github-actions Bot merged commit 4556de3 into develop Aug 26, 2026
19 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 0.19.2 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

github-actions Bot pushed a commit that referenced this pull request Aug 26, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
## Summary

Settings → Themes → Install was quitting the Linux AppImage immediately
after a successful pack download. The pack landed on disk
(`data/plugins/theme-limestone`) and showed as In use after relaunch;
the process still exited on the Install click.

Install-complete now harvests and activates the palette in Settings
first, then broadcasts `plugins:reload`. That reload is a send-only IPC
— not `process.exit`, `app.quit`, `win.close`, or `webContents.reload`.
PluginHost syncs by plugin id so a newly installed theme pack is
activated without unloading every other plugin (the remount that raced
palette activation). Incremental sync sorts the full desired set first
so a new dependent of an already-active plugin still activates, and a
dependent whose base left the scan is unloaded.

`OFFICIAL_THEMES` stays empty. Browse / Other package is unchanged. No
version bump.

## Type of Change

- [x] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update

## Related Issues

Follow-up to #617 (QA on 0.19.2 AppImage: Install Limestone quits the
process).

## Checklist

- [x] I've read [CONTRIBUTING.md](../CONTRIBUTING.md)
- [x] Tests pass locally (`pnpm test`)
- [ ] Build succeeds (`pnpm build`)
- [x] PR targets `develop` branch (not `main`)

## What changed

- **Install-complete path:** `finishThemePackInstall` refresh → harvest
→ activate → `requestReload`. Settings stays on Themes; Limestone can
move to In use without a relaunch.
- **`plugins:requestReload`:** `reloadPluginWindows()` sends
`plugins:reload` to living windows only.
- **PluginHost:** incremental load/unload by id; full deactivate only on
unmount. `planPluginHostSync` sorts `next` before the diff so
already-active dependencies remain visible.

## Tests

- Reload does not call `process.exit` / close / destroy; settings +
notes windows stay alive.
- Install-complete order is harvest + activate, then reload; windows
still alive after that path.
- Adding a theme pack does not unload already-active plugins.
- New extension whose base is already active is activated; extension
whose base left the scan is unloaded.
- `pnpm test`: 19/19 tasks, including desktop 384 tests and plugin-api
259 tests.
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a
href="https://cursor.com/agents/bc-36f1100b-5aa1-4640-8154-6a580ed004c5?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-web-light.png"><img
alt="Open in Web" width="114" height="28"
src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a
href="https://cursor.com/background-agent?bcId=bc-36f1100b-5aa1-4640-8154-6a580ed004c5&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img
alt="Open in Cursor" width="131" height="28"
src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Plugins now update incrementally, activating newly added plugins and
removing unavailable ones without restarting the app.
* Theme pack installation now refreshes installed themes, activates the
selected theme when available, and updates plugin windows automatically.
* **Bug Fixes**
* Improved plugin reload handling to avoid closing, restarting, or
disrupting active windows.
* Reload requests safely skip unavailable windows and continue notifying
remaining active windows.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants