Bubble AI App Builder vs. mk0r: What Actually Runs
Bubble's AI builds apps inside Bubble's runtime. mk0r's AI builds a real Vite + React + TypeScript project inside a cloud VM, boots from a cached snapshot, and tests itself in a real Chromium. No account, no plugin, no DSL to learn.
The core difference in one sentence
Bubble's AI assistant generates pages, workflows, and data types inside Bubble's visual runtime. Your app lives on Bubble's platform, rendered by Bubble's engine, described in Bubble's DSL. mk0r skips that layer entirely: a Claude agent writes plain React + TypeScript code into a real Vite project running on a sandbox VM.
That means the output of mk0r is the thing developers already know how to read, modify, and host anywhere. There is no migration path because there is nothing proprietary to migrate away from.
What is actually running when you hit the site
When you describe an app on mk0r, a Freestyle VM boots with four processes behind a single proxy on port 3000:
The proxy sends /acp/* to 3002, /mcp/* and /sseto the Playwright server on 3001, and every other request to Vite on 5173. The agent itself uses Playwright to open the app it just wrote and verify it works, which is a loop Bubble's assistant does not have because there is no separate browser to test against.
The exact routing lives in src/core/freestyle.ts, inside the proxyScript constant.
Why it boots fast: the snapshot hash
A cold VM takes roughly 11 seconds to install and start all of those services. mk0r skips that on every session by restoring from a live snapshot.
The snapshot is keyed by a SHA of four script constants concatenated together: baseImageSetup, startupScript, proxyScript, and acpBridgeScript. The resulting snapshot ID is stored in a Firestore collection called freestyle_snapshots. Change any of those scripts and the hash changes, so the next session rebuilds the snapshot once and then caches the new ID.
A GitHub Action (.github/workflows/warm-snapshot.yml) warms the cache on any commit that touches freestyle.ts, so users never pay the 5 to 10 minute rebuild cost themselves.
Try the VM without signing up
No Bubble account, no plugin, no credit card. Describe your app and watch the VM build it.
Start Building →Side by side
| Capability | Bubble AI | mk0r |
|---|---|---|
| Account required | Yes | No |
| Runtime | Bubble engine + Bubble DSL | Vite + React + TypeScript |
| Code export | Limited / plan-gated | Standard project, portable |
| Agent self-tests the build | No | Yes, via Playwright on port 3001 |
| Cold start | Load Bubble editor | VM restores from cached snapshot |
When Bubble is the right tool
Bubble is a mature, fully hosted platform with a built-in database, managed auth, and a visual editor. If you want all of that bundled and you are happy running on their runtime, it is a reasonable choice. The AI assistant speeds up common tasks inside that world.
mk0r is aimed at a different instinct: you want real code, you want it now, and you do not want to create an account to find out whether the idea is worth building. The VM hands you a working project on the first prompt.
Frequently asked questions
Is mk0r the same as Bubble's AI app builder?
No. Bubble's AI assistant generates pages and workflows inside Bubble's own visual runtime, which means your app lives on Bubble's infrastructure and uses Bubble's DSL. mk0r generates a real Vite + React + TypeScript project running in a Freestyle VM, so the output is standard code you can inspect, modify, and export.
Do I need a Bubble account, plugin, or paid plan to try mk0r?
No. mk0r has no signup, no plugin install, and no paid tier gate. You open the site, describe the app, and a VM boots within seconds. There is nothing to connect to Bubble.
How does mk0r boot so fast compared to spinning up a Bubble environment?
Each VM restores from a live snapshot keyed by a SHA of four scripts inside src/core/freestyle.ts (baseImageSetup, startupScript, proxyScript, acpBridgeScript). The snapshot ID is cached in a Firestore collection called freestyle_snapshots, so the VM skips about 11 seconds of cold service boot on every session.
What exactly is running inside the VM that I can see?
A single proxy listens on port 3000 and routes traffic to three services: Vite dev server on 5173 (your app preview), Playwright MCP on 3001 (the agent uses a real Chromium to test what it builds), and an ACP bridge on 3002 (runs the Claude agent subprocess inside the VM). You watch the whole thing over a screencast WebSocket.
Can I export the code, or am I stuck on mk0r like I would be on Bubble?
You can export. The VM scaffolds a plain Vite + React + TypeScript project with Tailwind at /app. It is standard npm + Vite, so you can pull the source and run it in any local environment or deploy it anywhere that hosts static or Node apps.
When should I still use Bubble instead of mk0r?
Use Bubble if you want a fully hosted platform with a visual editor, a built-in database, and managed auth, and you are comfortable staying on their runtime. Use mk0r if you want real code output, prefer describing apps in plain English, and want the AI to run and test the app in a real browser as it builds.
Describe your app in one sentence. Get a real React + TypeScript project running in a VM. No signup.
Build Your App