COMMAND REFERENCE

fxcss upgrade

bash
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 again

upgrade 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-nord and the new version renamed or dropped that sheet, the @import would simply stop resolving and the option would turn itself off. upgrade names the loss and makes you choose instead.
  • Selectors the new version needs and your Firefox lacks — with --audit, which runs the same check as fxcss audit against 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.

console
$ 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.