Skip to main content
Publish your work with two commands, and nothing broken reaches a universe. What lands is live in every canvas at once.

Ship

Publishing runs from the terminal. Design assets never deploy through the core platform.
  1. Preview in mock. Exercise every state from the prop defaults and the state picker.
  2. Preview in live. Stream real data through it and watch the stream log stay clean. The preview runs the production path, so this is the release test (studio).
  3. Publish.
login is a one-time browser sign-in to the universe you are publishing to, and publishing is a specific permission on your account. Edits to something already published apply live. Anything brand new has to be published before a workflow can use it.

What the lint checks

deploy studio runs the lint first and stops on any error, so nothing broken leaves your machine. Every message cites the page that owns the rule, so there is nothing here to memorise. The rules themselves are taught where you use them: Reference is the generated field list behind all of it.

Caught as you type

The schema at design/_schema/unoverse.schema.json validates every definition in your editor, before the lint ever runs. It is structural, with no false positives, and it flags a missing envelope field, an unknown primitive, a broken Switch or Each, and any condition beyond eq, ne, in and truthy. Wire it once through the YAML extension, which Quick start covers in one snippet. Without it you meet these mistakes at publish rather than at the keystroke.

What only you can judge

No linter decides these. Audit every artifact against them before calling it done. Structure
  • Structure is earned: flat if it can be, with folders only when the shape demands them
  • Few shallow discriminants rather than boolean soup, and same-shape states collapsed into one data-driven state
Data
  • Every bind has a prop or key with a default, and the defaults are realistic content
  • Derived values are computed in the workflow and arrive as plain fields
State (State)
  • Reactions are name-matches on the public state, and setAppValue writes chrome keys only
  • Locked state is projected rather than simulated: lifecycle flags, callState, host chrome
Templates and apps (Templates · Apps)
  • No component is named in a directed part, and no component-type rules sit in a slot
  • A component owns its own size and states, and the app owns only the framing
  • whenToUse is outcome-first, in the words a user would say
Style (Styles and tokens)
  • Semantic tokens only, with no invented component-named tokens

Next steps

Troubleshooting

Symptom, cause and fix for the mistakes that recur.

Reference

Every field the lint checks, generated from the schemas.