FlutterFlow to production: ship the downloaded Dart, not the last Run Mode tap
FlutterFlow is a visual Flutter UI builder: you compose widgets, bind Firebase or Supabase, drop Custom Actions, and tap Run Mode. That loop is excellent for proving a journey on a device. It is the wrong finish line once customers need App Store Connect or Play Console seats you hold, security rules you can read without opening the editor, and a rollback that is not “reopen FlutterFlow and rebuild.” Production starts when Code Download or GitHub compiles an IPA or AAB you can resign without the project.
CodeCross LLC treats flutterflow-to-production as the moment a FlutterFlow widget tree leaves Run Mode: Firebase or Supabase credentials live outside the editor, Custom Actions compile in a Dart checkout you own, and Code Download or GitHub is the release artifact. Proof is signup through one write on a TestFlight or Play internal build. If shipping still requires opening FlutterFlow to press Test, the binary is not owned.
What Run Mode hides
A green device preview is not a binary you can resign
FlutterFlow hides packager, signing, and rule review while the widget tree sells the idea. Real testers expose client-readable Firebase keys, Custom Actions that skip Firestore or RLS, and a store upload that only exists because someone still has the FlutterFlow project open.
Keys that only survived FlutterFlow project settings
Firebase or Supabase values pasted for Run Mode fail the first production ticket. Injection belongs in CI or a vault, not in a shareable FlutterFlow project every editor can open.
Custom Actions skip the security-rule review
A Dart snippet that “just works” in Run Mode often writes around Firestore rules or Supabase RLS. Production needs the same record surviving a guessed document ID.
Signing still lives on one laptop plus FlutterFlow
If the only IPA or AAB comes from the editor’s TestFlight/Play button, you do not own the key. Code Download plus your App Store Connect and Play seats are the bar.
Closing the editor stops the next store upload
Availability that requires FlutterFlow’s build cloud is still a lab. Production compiles from GitHub or a local Flutter toolchain when the project is paused.
The Code Download pass we actually run
Bind Firebase or Supabase, then sign a binary you control
Keep the widget tree that already converts. Move compile authority to Code Download or GitHub. FlutterFlow remains a UI workshop until TestFlight or Play internal succeeds from that checkout.
01
Prove a clean Flutter build from Code Download
Another engineer runs `flutter pub get` and `flutter build` on the extracted Dart. If the only runnable surface is Run Mode, you still have a demo.
02
Put Auth and rules off the FlutterFlow project pane
Firebase Auth or Supabase sessions live on a project you admin. Rules are reviewed in the console or repo, not inferred from widget visibility.
03
Give Custom Actions a named Dart owner
Each load-bearing action gets a file, a test, and a person. Anonymous editor snippets are not a backend.
04
Upload from your store seats, not the editor button
TestFlight and Play internal tracks accept an IPA or AAB compiled from GitHub. FlutterFlow’s one-click store push is optional after that.
How to
Move a FlutterFlow app onto a binary you can resign
UI-builder to owned Flutter. The output is a TestFlight or Play internal build compiled from Code Download that completes signup and one write.
Step 01
Treat Run Mode as journey evidence, not store proof
Keep the FlutterFlow-shaped screens if navigation still matches what operators will pay for. Do not treat the editor’s Test button as the release record.
Step 02
Take Code Download or GitHub and boot it locally
Confirm a clean checkout builds without FlutterFlow-only assets you cannot name. Record the Flutter SDK pin. Editor-only hosting hooks come off the critical path here.
Step 03
Move Firebase or Supabase secrets off the project pane
Inject credentials outside FlutterFlow. Point Auth redirects and write APIs at projects you admin. Review Firestore rules or Supabase RLS against guessed IDs.
Step 04
Complete signup, session issue, and one write on a device build
A real tester finishes the FlutterFlow journey on TestFlight or Play internal with durable account state. That is first value — not another widget added in the editor.
Step 05
Name who can resign the next IPA or AAB
App Store Connect and Play seats stay on the company. Code Download must compile without the person who built the first widget tree.
Read next
Proof, the essay, and sibling intents
These pages are already on the site. Use them to pressure-test the bet before a call.
Why does FlutterFlow Run Mode alone fail a production readiness check?
Run Mode proves widgets render and a happy-path Firebase or Supabase call returns. It does not prove you own signing keys, can rotate API keys without every FlutterFlow editor seeing them, or can upload TestFlight without reopening the project. If Custom Actions still write around rules and the only IPA comes from the editor button, you have a convenient builder—not a durable binary.
How should Firebase versus Supabase be chosen once FlutterFlow leaves the editor?
Keep the backend FlutterFlow already bound if rules, backups, and a named data owner exist. Prefer Firebase when the project already uses Auth, Firestore, and Cloud Functions the team can administer. Prefer Supabase when SQL, RLS, and edge functions are the contract. Document which project production uses so on-call does not discover a second FlutterFlow-attached database during launch.
What must be true of Custom Actions before a TestFlight or Play cutover?
Each mutating Custom Action must live in the downloaded Dart with a test that rejects another user’s ID. Secrets those actions read must come from --dart-define or a vault, not from FlutterFlow App State defaults. If an action only exists as an editor snippet, it is not ready for a store binary.
How do you prove the FlutterFlow-shaped product is production-grade without rewriting widgets?
Run the core signup → session → write path on a TestFlight or Play internal build compiled from Code Download. Confirm crash symbols upload, Auth fails closed when rules are wrong, and closing FlutterFlow does not block the next archive. If those hold, the widget tree stays; the control plane has matured.
Sign a FlutterFlow binary you can build without the editor.
Bring Code Download and the core journey. We will say harden Custom Actions, leave Run Mode, or rewrite a slice — before another widget lands only in FlutterFlow.
“What impressed us most about CodeCross was their ability to deeply understand our vision and translate it into a complete digital solution. Unlike many agencies that just focus on technical delivery, CodeCross approached our project like true partners.”