Skip to content

fix(desktop): drop bundled official palettes from core - #604

Merged
tomymaritano merged 1 commit into
developfrom
cursor/remove-bundled-official-themes-f22a
Aug 25, 2026
Merged

fix(desktop): drop bundled official palettes from core#604
tomymaritano merged 1 commit into
developfrom
cursor/remove-bundled-official-themes-f22a

Conversation

@tomymaritano

@tomymaritano tomymaritano commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Named palettes no longer ship inside the desktop. OFFICIAL_THEMES is empty; Settings → Themes shows the tokens.css default plus installed plugin themes only. Retired bundled ids (dripnex-parchment, dripnex-wave, …) fall back to that default so a saved palette cannot leave a blank UI.

Satellite repos (dripnex/theme-*) are unchanged. No marketplace. AuthGate untouched.

Type of Change

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

Related Issues

Product rule: themes ship as satellite git repos (dripnex/theme-<slug>), pack/tag/Release tarball, Inkdrop-style. Do not add palettes to the desktop core.

Checklist

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

What changed

  • Emptied OFFICIAL_THEMES so Parchment/Wave/Night/Harbor Dusk/Solarized/Gruvbox/Glass/Midnight/Ember/Ion/Matcha/Phosphor/Fog are not registered without installing.
  • Settings still lists Default from tokens.css. Installed theme.json packs are scanned into the picker (including the Settings window, which has no PluginHost).
  • If appearance.activeThemeId is one of the retired dripnex-* ids, restore clears it instead of waiting for a palette that will never load.
  • Frosted settings-card chrome keys off data-frosted instead of dripnex-glass.

Tests

  • officialThemes.test.ts: 10 passed (empty core list, retired-id fallback, installed pack registration).
  • pnpm test: 19/19 tasks successful (@dripnex/desktop 342 tests).
  • Typecheck passed on push.
Open in Web Open in Cursor 

Named palettes ship as satellite packs. Settings → Themes now shows the
tokens.css default plus installed plugin themes, and retired bundled ids
fall back to that default instead of a blank UI.

Co-authored-by:  Tomás Maritano <tomymaritano@gmail.com>
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 10 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: d769b479-5c15-4a6c-bd8d-d91b578f8e07

📥 Commits

Reviewing files that changed from the base of the PR and between f9dd6ec and 01aef85.

📒 Files selected for processing (8)
  • apps/desktop/src/main/userHackFiles.ts
  • apps/desktop/src/renderer/hooks/useOfficialThemes.ts
  • apps/desktop/src/renderer/pages/settings/components/SettingsCard.module.css
  • apps/desktop/src/renderer/pages/settings/sections/ThemesSection.tsx
  • apps/desktop/src/renderer/themes/__tests__/officialThemes.test.ts
  • apps/desktop/src/renderer/themes/officialThemes.ts
  • docs/plugins/install-path.md
  • docs/themes/LOG.md

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.

@tomymaritano
tomymaritano marked this pull request as ready for review August 25, 2026 03:26
@github-actions
github-actions Bot enabled auto-merge (squash) August 25, 2026 03:26
@github-actions
github-actions Bot disabled auto-merge August 25, 2026 03:26
@tomymaritano
tomymaritano merged commit 761bbbe into develop Aug 25, 2026
20 of 21 checks passed
@tomymaritano
tomymaritano deleted the cursor/remove-bundled-official-themes-f22a branch August 25, 2026 13:15
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 0.19.1 🎉

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 only showed Default after Browse-installing satellite
packs (`dripnex/theme-dune`, limestone, walnut, ash, …). Those packs
ship `manifest.json` + `dist/index.js` and call `registerTheme()` in
`activate()` — they do not ship `theme.json`. Settings has no
PluginHost, so `activate()` never ran there and `parseInstalledThemes`
only read `scan().themes` (always `[]`).

This harvests `registerTheme` from scanned plugin source in the renderer
(including Settings) so installed packs appear in the picker and
selecting one sets `activeThemeId`. `OFFICIAL_THEMES` stays empty;
Default (`tokens.css`) stays first; retired bundled `dripnex-*` ids
still fall back to Default.

## Type of Change

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

## Related Issues

Follow-up to #604 (empty official palettes). Theme.json on satellites is
a later pack-contract change, not this PR.

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

- `parseInstalledThemes` still prefers `theme.json` when present.
- If `scan().themes` is empty, load `dist/index.js` and collect palettes
from `context.registerTheme` via a stub PluginContext (no Settings
PluginHost).
- Malformed `theme.json` / throwing `activate()` skips that pack and
does not crash the picker.
- Picker order is Default (id `null`) then harvested palettes.

## Tests

- JS-registered pack (`themes: []`, `registerTheme` in `activate`)
appears; selecting it sets `activeThemeId` to `dripnex-dune`.
- Default remains first (`themePickerIds`).
- Empty `OFFICIAL_THEMES`, retired-id fallback, missing/malformed
`theme.json` do not crash.
- Disabled packs are skipped; `theme.json` still wins when both exist.

## Screenshots

N/A — desktop Settings picker; covered by unit tests that replay the QA
scan shape.
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a
href="https://cursor.com/agents/bc-b1ff19c4-64b6-4c04-9831-43072ee62099?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-b1ff19c4-64b6-4c04-9831-43072ee62099&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>

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
github-actions Bot pushed a commit that referenced this pull request Aug 26, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
## 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

- [x] 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

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

- **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.
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a
href="https://cursor.com/agents/bc-b1ff19c4-64b6-4c04-9831-43072ee62099?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-b1ff19c4-64b6-4c04-9831-43072ee62099&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>

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