Bubble and Luna Park both build full-stack apps without code. Bubble runs your app on its platform. Luna Park compiles it into a Vue and Node.js application that you own and host anywhere.

- **Your code.** Download the full app as Vue and Node.js.
- **Flat price.** One license, whatever your traffic or users.
- **Full logic.** Loops, functions, typed data, and npm packages.

![Sunset Park in the Luna Park editor](https://luna-park.app/static/assets/builder-DAXbtfYB.png "Sunset Park, a demo site built with Luna Park.")


## At a glance

Both build full-stack apps without code. The main differences: code ownership, pricing, and hosting.

| | Luna Park | Bubble |
|---|---|---|
| **Logic** | Visual scripting graphs, compiled to JavaScript | Workflows, run by Bubble's engine |
| **Database** | PostgreSQL: joins, aggregates, transactions | Bubble database: searches with constraints |
| **Backend** | Routes and crons | Backend and scheduled workflows |
| **Code export** | [+Vue + Node.js source] (Pro) | [-No] ([source](https://manual.bubble.io/account-and-marketplace/application-and-data-ownership)) |
| **Hosting** | [+Anywhere] Managed hosting in late 2026 | [-Bubble only] |
| **Pricing** | Free, or Pro at €25/month or €300 once | Plan + usage ([workload units](https://manual.bubble.io/help-guides/workload/understanding-workload)) |
| **Platforms** | [=Web] [=PWA] [=Desktop] [=Android] [=iOS] | [=Web] [=Android] [=iOS] |
| **Ecosystem** | [~Young] | [+Very large] plugins, templates, agencies |

## Example: a waitlist form

Visitors enter their name, email, and favorite ride, and get a ticket number.

::: columns
### Luna Park

1. Place the fields and a button, each field bound to a variable.
2. On click, a graph sends the variables to a backend route and shows the ticket.
3. The route inserts a row in the `Waitlist` table and returns its id.

---

### Bubble

1. Place the inputs and the button.
2. Create a `Waitlist entry` data type.
3. Add a workflow: "When button is clicked", then "Create a new thing".
4. Protect the data with privacy rules.
:::

::: gallery
![The click logic of the waitlist form](https://luna-park.app/static/assets/logic-C66duI84.png "On click: read the fields, call the route, show the ticket.")

![The Join Waitlist backend route](https://luna-park.app/static/assets/route-DQo3hM8a.png "The route: receive the body, insert a row, return its id.")
:::

## Code export

Each node compiles to a line of JavaScript, each component to a Vue component. The app has no Luna Park runtime. A Bubble app only runs on Bubble.

![The waitlist component compiled to Vue](https://luna-park.app/static/assets/code-BUYWx0sG.png "The waitlist, compiled to Vue and TypeScript.")

## Other differences

- **Costs.** Bubble bills [workload units](https://manual.bubble.io/help-guides/workload/understanding-workload) for queries, workflows, and API calls. A Luna Park app costs what its server costs, at any traffic.
- **Logic.** Graphs have loops, functions, typed data, and any [npm package](/docs/integrations/npm) as nodes. Bubble falls back on plugins or JavaScript.
- **Queries.** One query can join tables, group rows, and compute aggregates. [Transactions](/docs/backend-data/database#specialized-nodes) save several changes or none.
- **Platforms.** One project exports web, PWA, and native apps for Windows, macOS, Linux, Android, and iOS.

![The Waitlist table in the editor](https://luna-park.app/static/assets/database-BIq5wdGO.png "PostgreSQL, in the editor and in production.")

## Which one to choose?

::: columns
### Luna Park

- You want to keep your code.
- Your logic will get complex.
- You want flat costs as traffic grows.
- You need desktop apps.

---

### Bubble

- You never want to manage a server.
- Your logic stays simple.
- You need a large ecosystem today.
:::

## Before switching

- Until [managed hosting](/pricing) launches in late 2026, you [host the backend](/docs/deployment/deployment): Node.js and PostgreSQL.
- Fewer templates and plugins exist. [npm packages](/docs/integrations/npm) fill many gaps.

## From Bubble to Luna Park

| Bubble | Luna Park |
|---|---|
| Page, reusable element | [Page, component](/docs/interface/components) |
| Custom state | [Variable](/docs/logic/variables) |
| Workflow | Logic graph |
| Backend workflow | [Route](/docs/backend-data/routes) |
| Scheduled workflow | [Cron](/docs/backend-data/cron) |
| Data type | [Database](/docs/backend-data/database) table |
| Option set | [Configuration](/docs/logic/scripts#configuration-files) file |
| Privacy rules | Route [guards](/docs/backend-data/auth#protect-routes) |
| API Connector | `Fetch` node |
| Plugin | [Plugin](/docs/integrations/plugins) or [npm package](/docs/integrations/npm) |

::: info
Based on Bubble as of October 2026. See [bubble.io](https://bubble.io) for current features and prices.
:::
