Runtime Lock-In and Self-Host Depth: A Proposed Axis for Whether AI-Builder Apps Actually Run Off-Platform (August 2026)
A proposed BuilderProof benchmark axis measuring whether the code an AI app builder emits can actually build, run, and be self-hosted off the vendor platform, not just be exported.
On this page
Quick answer (August 2026). Runtime lock-in and self-host depth measures whether the code an AI app builder emits can actually build, run, and be self-hosted away from the vendor's platform. It is the gap between two very different promises: "you can export your code" and "your exported code will run somewhere else." A builder can honestly offer the first and still fail the second, because the code it hands you may expect a managed database, a proprietary auth service, or a runtime that only exists inside the vendor's cloud. This is a proposed BuilderProof axis, not a scored leaderboard. Like every BuilderProof axis it is designed to cover all five commercial builders we track (Bolt, v0, Lovable, Replit, Base44), be reproducible from published rules, and stay open to public revision. Below is the six-signal rubric we propose to score it with.
Why "you can export the code" is not the whole answer
The most common reassurance in this category is code export. It is a real and valuable feature, and we already track a related question in our code ownership and portability leaderboard: do you get the source, under what license, and how idiomatic is it? A separate axis, code portability, asks whether that source reads like a standard project a human could maintain.
Runtime lock-in asks a third, downstream question that neither of those settles: once you have the code, does it stand on its own? An export is only an escape hatch if what comes through the hatch can start without the platform you are trying to leave. In practice the failure is quiet. The zip downloads. The repository syncs to GitHub. Then you run the install and build on your own machine, and the app boots into a wall of missing environment variables, a client pointed at a hostname you do not control, or a server call to an endpoint that only answers inside the vendor's account. The demo worked. The eject did not.
This is a specific, testable form of vendor lock-in. It is worth isolating because it is the one most likely to be discovered late, after a team has already committed, when switching cost is highest.
The principle we score against
We borrow the yardstick from the Twelve-Factor App's backing services factor: "The code for a twelve-factor app makes no distinction between local and third party services." In a clean design, the database, the object store, the auth provider, and the mail service are attached resources reached through configuration. Swapping a managed database for one you run yourself should be a config change, not a rewrite.
That gives us a concrete test for generated apps. If a builder emits code where the backend is reachable only through a hardcoded, vendor-specific path, self-hosting means rewriting. If it emits code where those services are attached through configuration, self-hosting means editing a config file and pointing at your own infrastructure. The distance between those two outcomes is exactly what this axis is trying to measure.
We anchor the "runnable off-platform" end of the scale on documented, standard deployment. A Node-based app, for example, is self-hostable in the ordinary sense when npm run build then npm run start produces a working server on your own host, per the framework's own deployment guidance (Node server, Docker container, or static export). No proprietary wrapper required.
The six signals
We propose scoring runtime lock-in from six independent signals, each observable and each reproducible from published evidence.
-
Runtime dependency. Does the emitted code import or call vendor-only runtime APIs, SDKs, or edge functions that have no off-platform equivalent? A hard dependency here caps the score regardless of anything else, because the code cannot even build cleanly outside the platform.
-
Backend self-hostability. Can the app's stateful services (authentication, database, file storage, server functions) be repointed at self-hosted or standard third-party equivalents through configuration alone, in the backing-services sense above? Or is the backend a managed service with no self-host path?
-
Off-platform build and run. Following only the vendor's own instructions, does a clean checkout install, build, and start on a plain machine or container without the vendor's cloud in the loop? We treat a successful
install / build / startin a fresh container as the pass condition, with the command transcript as evidence. -
Documented eject or self-host path. Does the vendor publish an actual self-hosting or eject guide, dated and versioned, or is "export" left as an undocumented dump that the user has to reverse-engineer? Documentation quality is part of the escape hatch working.
-
Hidden platform glue. Does the exported app retain hardcoded calls back to vendor endpoints, telemetry beacons, or license or entitlement checks that break, leak, or silently degrade once the app runs outside the platform? This is where an export that "builds fine" can still be tethered.
-
Eject completeness. At the moment you leave, can you take the schema, the data, and the secrets or config alongside the code, so the self-hosted instance is actually whole? This borders our data-layer portability axis, which is about live data mobility during normal operation; here the narrower question is whether a one-time eject leaves you with a runnable, complete copy.
Proposed levels
We collapse the six signals into four levels so a reader can place a builder at a glance, while keeping the per-signal detail underneath for anyone who wants to dispute a single line.
- Level 0, tethered. No meaningful export, or the exported code cannot build or run without the platform. The escape hatch does not open.
- Level 1, partial eject. Code or front end exports and builds, but the backend is a managed service you cannot self-host. You leave with half an app.
- Level 2, standard-stack eject. Standard framework output with backing services swappable by configuration. The app runs on your own infrastructure after config changes, not code changes.
- Level 3, self-host by default. A documented, reproducible, full self-host path with no vendor runtime dependency. Leaving is a supported operation, not an act of archaeology.
Measurement protocol (v0.1)
The protocol is deliberately boring so that anyone can rerun it and challenge the result.
- Read each vendor's export, eject, and self-host documentation, recording the URL and the date retrieved, because these behaviors change often.
- Generate one reference app per builder from an identical prompt, using the same feature set (auth, a database table, a file upload, one server action) so the backend surface is comparable.
- Export or download the code by the vendor's supported path, then attempt the off-platform build and run inside a clean container with no vendor credentials beyond what the docs say are portable.
- Record, per signal, what passed and at what level, with the exact commands and logs attached.
- Publish the full transcript so the score is reproducible and every line is open to public revision.
We are honest about the current limit of this axis, because it is the same limit every documentation-derived BuilderProof axis carries: until we run the hands-on harness across all five builders, the placements below are hypotheses read from public materials, not verdicts from a controlled run. Converting this axis from documentation-derived to harness-measured is on our roadmap precisely because runtime lock-in is one of the axes where reading the docs and running the eject can disagree.
What the public materials suggest, and why we still have to run it
Read symmetrically and dated to August 2026, the five builders already look like they would spread across the levels rather than cluster, which is the main reason the axis is worth formalizing.
Some builders market full-stack generation and hosting of the app they produce, which tends to make the platform experience seamless and the off-platform story less obvious. Others sync a standard front-end codebase to a Git repository while pairing it with a managed backend, which cleanly separates the two promises: the front end may eject well while the backend stays on the vendor's service. At least one builder's own materials describe code export alongside a managed backend, and independent write-ups report that the backend itself is not self-hostable, which is the export-is-not-runnable tension in its purest form. And a builder that emits UI components rather than a deployable full-stack app is answering a different question entirely, one where "self-host the backend" may not apply because there is no generated backend to host.
We are naming the pattern, not the placements, on purpose. Each of those descriptions is a hypothesis this axis exists to confirm or overturn with a reproducible run, and vendor behavior in this category shifts month to month. That is exactly why a fixed, published rubric is more useful than a snapshot opinion.
How to contribute
BuilderProof axes are community-editable. If you have run an eject on any of the five builders, the most useful thing you can send is a transcript: the vendor doc you followed with its date, the exact install and build commands, and where it succeeded or stopped. Counter-evidence is as welcome as confirmation. A proposed axis becomes a scored one when the reproducible runs exist, and this is one where real-world eject transcripts move it fastest.
BuilderProof is an independent, methodology-first benchmark of AI app builders. We score from published rules, cover all five commercial builders, and keep every axis open to public revision.
Written by
BuilderProof Editorial TeamThe BuilderProof lab publishes reproducible, community-editable benchmarks and methodology proposals for AI app builders. Axes are scored from documentation-derived rubrics and open to public revision.
Cite this benchmark
BuilderProof Editorial Team. "Runtime Lock-In and Self-Host Depth: A Proposed Axis for Whether AI-Builder Apps Actually Run Off-Platform (August 2026)". BuilderProof, August 2026. https://www.builderproof.org/benchmarks/runtime-lock-in-self-host-depth-axis-proposal-august-2026.
@misc{builderproof-runtime-lock-in-self-host-depth-axis-proposal-august-2026,
title = {{Runtime Lock-In and Self-Host Depth: A Proposed Axis for Whether AI-Builder Apps Actually Run Off-Platform (August 2026)}},
author = {{BuilderProof editorial team}},
year = {2026},
month = {aug},
howpublished = {\url{https://www.builderproof.org/benchmarks/runtime-lock-in-self-host-depth-axis-proposal-august-2026}},
note = {BuilderProof, builderproof.org}
}Frequently asked questions
Is runtime lock-in the same as code ownership or code portability?
No. Code ownership asks whether you get the source and under what license. Code portability asks whether that source is standard and maintainable. Runtime lock-in and self-host depth ask a downstream question neither settles: once you have the code, can it actually build, run, and be self-hosted without the vendor platform? A builder can pass ownership and portability and still fail here if the exported app expects a managed backend that only exists in the vendor cloud.
Why does exporting the code not automatically avoid vendor lock-in?
Because export and runnability are different promises. The code can come out cleanly and still refuse to run elsewhere: it may call vendor-only runtime APIs, point at a managed database or auth service you cannot self-host, or keep hardcoded calls back to the platform. The escape hatch only counts if what comes through it can start on its own.
How do you propose to measure this across all five builders?
Generate one comparable reference app per builder from an identical prompt, export it by the vendor supported path, then attempt a clean install, build, and start inside a fresh container using only what the docs say is portable. Score six signals: runtime dependency, backend self-hostability, off-platform build and run, documented eject path, hidden platform glue, and eject completeness. Publish the full transcript so anyone can reproduce or dispute it.
Are the builder placements in this post final scores?
No. This is a proposed axis, not a scored leaderboard. Until the hands-on harness runs across all five builders, any per-builder observation is a documentation-derived hypothesis, not a verdict. Runtime lock-in is one of the axes where reading the docs and running the eject can disagree, which is exactly why it needs a reproducible run.
What is the cleanest signal that an app is genuinely self-hostable?
Following the Twelve-Factor backing-services principle: the stateful services (database, storage, auth, mail) are attached through configuration, so swapping a managed service for one you run yourself is a config change rather than a rewrite. Combined with a documented standard build and start on your own host, that is a Level 2 or better on our scale.
Related benchmarks
AI App Builder Code Ownership, Benchmarked (2026): The Portability Leaderboard
A documentation-sourced, single-axis leaderboard scoring how easily you can export and own the code from five AI app builders. v0 and Bolt lead at 8, Lovable and Replit at 7, Base44 at 4.
Code-portability: a v2 axis proposal (June 2026)
We are proposing a fifth BuilderProof axis to score whether an AI app builder ships code that can leave the platform. Five sub-axes, 0 to 100, provisional cohort scores included.
Publication dates corrected on four June 2026 benchmark pages
A date audit found four benchmark pages carrying a publication timestamp earlier than the registration of builderproof.org itself. The dates are corrected, the method is unchanged, and the two lookups that verify the claim are written out in full.