demo · v139
Cycle in Fallback
Before v139: writing background: var(--primary, var(--circular)) where --circular referenced itself made the whole property invalid, even when --primary was set. v139 short-circuits — if the first argument resolves, the fallback isn't evaluated at all, so the cycle never bites.
render
tile
verdict
—
the rule
why this matters
Modern design systems write deeply nested var() chains so a single token can cascade through hundreds of components. Pre-v139, a typo in a deep fallback poisoned the whole tree because Chromium walked the fallback even when the primary value was perfectly fine. With short-circuit evaluation Chromium matches the spec and matches Safari/Firefox — and the cost of evaluating a fallback only happens when the fallback actually runs.