~7 min read · Opinion
Every developer tool says "no lock-in" on its landing page. It's the cheapest promise in software — easy to write, almost never tested, and by the time you find out it wasn't true, you've already built six months of work on top of it.
So instead of saying it, here's the test we hold ourselves to. One question, and it's the only one that matters.
Stop using the tool tomorrow. Is your project still standard, shippable code that runs without it?
That's it. Not "can you export." Not "is there a migration path." Those are consolation prizes you accept after you've already been locked in. The real question is whether the tool ever inserted itself into your source in the first place.
Run that test against most visual editors and the answer is no:
The pattern: every one of them either never touched your real code, or touched it in a way you can't undo. Sovereignty is the opposite of both — the tool works on your real source, and leaves nothing behind when it goes.
We call this principle developer sovereignty, and we made it a concrete guarantee, not a vibe:
The code processed by CrossUI Studio is standard React code. We promise not to embed any proprietary runtimes, closed-source dependency packages, or any logic "traps" that cannot run outside the platform into your source files. If you stop using CrossUI Studio, your project remains a standard React project — no migration effort required.
Three things that are not in your files after Studio touches them:
package.json that only resolves through us.What's left in your repo is what a senior engineer on your team would have typed by hand. That's the whole point.
Most tools can't make this promise because of how they're built. If a tool owns a rendering model — its own representation of your component tree — then "saving" means serializing that model back to code. Serialization is lossy. The tool writes what it knows and discards what it doesn't, which is why exported code looks subtly foreign and why re-emitting a file strips your comments.
Studio is built the other way around. Your source code's AST is the single source of truth, and every surface — the canvas, the inspector, the code editor — is just a view over that AST. We never hold a parallel model that has to be flushed back to disk. When you change a prop on the canvas, we patch the one AST node that changed and write back only the bytes that moved.
The consequence you can see in git diff: a padding change is one line. Indistinguishable from what you'd have typed. And because we never owned anything but a view, there's nothing to take with us when you leave — the source was always yours, the whole time.

It's tempting to read "no lock-in" as a defensive footnote — a thing you promise so buyers feel safe. But for the teams we care about, it's the product.
A senior engineer evaluating a visual tool isn't asking "is this fun to use." They're asking "what does this do to my codebase, my git history, my code review, six months from now." A tool that leaves the source clean and exits without a trace is one they can actually adopt, because adopting it costs nothing to reverse. The reversibility is the trust.
And it compounds outward. Template authors won't ship a tool to their buyers that traps those buyers. Agencies won't hand a client a codebase they can't maintain without a subscription. Sovereignty isn't just your guarantee — it's theirs to pass on.
No lock-in doesn't mean no commitment. While you use Studio, you do connect it to your repo or a local folder — that's the price of real two-way sync, and we think it's worth it. What it means is that the commitment is revocable at any moment, for free. Close the folder, cancel the plan, delete your account: your project doesn't notice. It was standard React before Studio, during Studio, and after.
That's the test. Run it on every tool you adopt — including ours.
About CrossUI Studio — A visual IDE for React & MUI. Code and canvas stay in two-way sync on the same AST: edit code and the canvas updates live; click an element on the canvas, edit its props visually, and the code changes with a surgical one-line diff. No build, no localhost — it runs in the browser, works on your real Git repo or a local folder, with no vendor lock-in.
The "exit test" is a much stronger framing than "no lock-in." Most products talk about migration after you're already dependent on them. Asking whether the project remains standard, maintainable code if you stop using the tool tomorrow turns portability into something you can actually evaluate instead of just trust.
I really like the "exit test" because it reframes the discussion from features to resilience.
It reminds me of something I have seen in WordPress over the years. The healthiest sites are often not the ones with the most powerful tools. They're the ones that adapt without falling apart. Tools come and go, developers change, and requirements evolve, but the site remains understandable and maintainable.
To me, that is a useful design principle beyond developer tools. A good system should make adoption easy, but it should also make leaving possible without turning the past into technical debt.
The ability to exit gracefully is a feature in its own right.