fxcss upgrade
fxcss upgrade # take the newest version of what you have
fxcss upgrade --check # report only; exit code says what it found
fxcss upgrade --audit # check the new version against your Firefox first
fxcss upgrade --compare # see it before deciding: installed vs new, rendered
fxcss upgrade --ref v2.1.0 # somewhere specific
fxcss rollback # …and back againupgrade updates the installed theme, not Firefox itself. It re-installs the theme the profile already has, at whatever is newest
of the kind it tracks: an install that took a release moves to the newest
tag, one that followed a branch moves to that branch's current commit, and one
pinned with --ref does not move at all unless you say so.
It stops rather than surprise you, in three places:
- Files you edited yourself. Every install records a sha256 per file, so
an upgrade knows which ones you have since changed and refuses to write over
them until
--force. Files you added are never touched either way. - Options that vanished. If you installed
--with theme-nordand the new version renamed or dropped that sheet, the@importwould simply stop resolving and the option would turn itself off.upgradenames the loss and makes you choose instead. - Selectors the new version needs and your Firefox lacks — with
--audit, which runs the same check asfxcss auditagainst the fetched copy before anything is installed.
--compare renders what is installed and what the upgrade would install —
the profile's own chrome/, local edits and carried-over sheets included, not
a re-fetch of what the manifest says — and diffs them before the confirmation
prompt, printing where the before/after images landed. It completes the three
questions an upgrade can answer about a theme with no API: do the selectors
still exist (--audit), has the user edited anything (always checked), and
what actually changes on screen (--compare). Needs Pillow and a local
Firefox, like shot.
--check changes nothing and answers with its exit code, for cron, launchd or
CI: 0 up to date, 1 an upgrade is available, 2 it cannot be told
(no install here, an unreachable repo, or a manifest too old to say what it
tracked). fxcss deliberately ships no scheduler of its own — this is the piece
you point yours at.
$ fxcss upgrade
profile: default-release (~/Library/…/8f2h1kqp.default-release)
installed: AdamXweb/WhiteSurFirefoxThemeMacOS @ v1.6.3
upstream: v2.0.0 — 2026-08-16
fetching v2.0.0 …
keeping optional sheets: theme-nord
Upgrade to v2.0.0? [Y/n]
upgraded to v2.0.0
the previous version is kept as chrome.backup-20260817014202
Restart Firefox to see it. `fxcss rollback` puts the previous version back.