Reading view

PSA for anyone on Oxygen 6: the builder validates your page more strictly than the front end, and it will lock you out silently

If you've moved to Oxygen 6, here's a failure mode that cost me a week and isn't in the docs anywhere.

Oxygen 6 is a full rewrite on the Breakdance engine. Your page design lives in the _oxygen_data post meta as JSON, not in template files. Two separate things read that JSON: the PHP renderer that serves the page, and the builder's client-side schema. The builder is much stricter.

So you get pages that serve perfectly to visitors, look right in every screenshot, and refuse to open for editing with Validation Error: IO-TS decoding failed. No line number, no field name.

In my case, every numeric property is stored as {number, unit, style}. The style key is what actually compiles, so a raw clamp() with unit: "" renders fine. But unit is validated against an enum, and "" isn't in it. One value. And because selectors are shared site-wide, that single bad entry locked the builder on every page at once.

How to find it: walk your _oxygen_data JSON for any unit: "". The only place that's legitimate is line_height, which genuinely is unitless. Anything else is a builder failure waiting to happen.

Two more in the same family, if you're debugging blind:

- .breakdance .woocommerce SELECTOR matches nothing. Both classes sit on <body>, so it's never a descendant. Style WooCommerce through the .bde-* wrappers instead — and verify with element.matches() rather than trusting that the rule is in the file.

- WrapperLink outputs href="#". Your classes still apply, so it looks perfect and every link is dead. Use ContainerLink.

The general lesson beyond Oxygen: with any builder that keeps state in the database, "the front end renders" isn't proof the page is intact. Verify against the editor.

I've been keeping notes on this stuff while building a client site — happy to share if it'd help anyone.

submitted by /u/budaloco
[link] [comments]
  •  
❌