FlutterFlow and Luna Park both export code and build native apps. FlutterFlow is built on Flutter, Google's mobile framework. Luna Park is built on the web stack: Vue, Node.js, and PostgreSQL.

- **Built for the web.** HTML and CSS pages with SEO tags and a sitemap.
- **Backend included.** Routes, crons, and PostgreSQL, built visually.
- **Every platform.** Web, PWA, desktop, Android, and iOS from one project.

![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 export code and build native apps. The main differences: main platform, backend, and web output.

| | Luna Park | FlutterFlow |
|---|---|---|
| **Main target** | Web, then desktop and mobile | Mobile, then web and desktop |
| **Logic** | Visual scripting graphs, compiled to JavaScript | Action flows, custom Dart code |
| **Backend** | Routes, crons, PostgreSQL | Firebase or Supabase, cloud functions |
| **Web output** | [+HTML and CSS] SEO tags per page | [~Canvas] Flutter web |
| **Code export** | [+Vue + Node.js source] (Pro) | [+Flutter code] ([paid plans](https://www.flutterflow.io/pricing)) |
| **Pricing** | Free, or Pro at €25/month or €300 once | Seats ([source](https://www.flutterflow.io/pricing)) |
| **Platforms** | [=Web] [=PWA] [=Desktop] [=Android] [=iOS] | [=Android] [=iOS] [=Web] [=Desktop] |

## 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.

---

### FlutterFlow

1. Build the page with widgets.
2. Create a Firestore collection or a Supabase table.
3. Add an action flow: create a document or insert a row.
4. Set the access rules in Firebase or Supabase.
:::

::: 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.")
:::

## Web and SEO

Flutter web apps [render to a canvas](https://docs.flutter.dev/platform-integration/web/renderers), not HTML elements. This affects search indexing, load size, text selection, and accessibility. Luna Park generates a Vue app: each page has its own title, description, and social image, dynamic pages included, and the backend serves a sitemap ([SEO](/docs/deployment/seo)).

![The SEO panel of a page](https://luna-park.app/static/assets/seo-BCDFkDXI.png "SEO settings of the Sunset Park home page.")

## Code export

FlutterFlow exports a Flutter project, with a Firebase or Supabase backend to run. Luna Park exports the whole application: Vue frontend, Node.js backend, PostgreSQL schema.

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

## Other differences

- **Server logic.** Luna Park routes use the same graphs as the interface. FlutterFlow server logic goes to cloud functions, written in code.
- **Queries.** Firestore has no joins and limited aggregates. Supabase needs hand-written SQL functions for complex queries. Luna Park builds joins, aggregates, and [transactions](/docs/backend-data/database#specialized-nodes) visually.
- **Ecosystem.** Any [npm package](/docs/integrations/npm) becomes nodes.

## Which one to choose?

::: columns
### Luna Park

- Your product is a web app first.
- Search engines matter.
- You want the backend in the same tool.

---

### FlutterFlow

- Your product is a mobile app first.
- You need many device features or graphics-heavy screens.
- Firebase suits you.
:::

## Before switching

- Luna Park [mobile apps](/docs/deployment/mobile) run the web frontend in a native shell: fine for business apps, not for graphics-heavy ones.
- Until [managed hosting](/pricing) launches in late 2026, you [host the backend](/docs/deployment/deployment).

## From FlutterFlow to Luna Park

| FlutterFlow | Luna Park |
|---|---|
| Page, component | [Page, component](/docs/interface/components) |
| Page state, component state | [Variable](/docs/logic/variables) |
| App state | [Store](/docs/logic/store) |
| Action flow | Logic graph |
| Custom function, custom action | [Function](/docs/logic/scripts) |
| Custom widget | [Plugin](/docs/plugins/introduction) component |
| Firestore collection, Supabase table | [Database](/docs/backend-data/database) table |
| Cloud function | [Route](/docs/backend-data/routes) |
| API call | `Fetch` node |
| Theme | [Design tokens](/docs/styling/overview#design-tokens) |

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