Skip to main content

Publishing your app

Flet Studio builds your app for Windows, macOS, Linux, Android, iOS and the web in the cloud, and can deliver it to an app store — no Flutter, Xcode or Android SDK to install. Open it with the Publish button in the app bar, or Publish in the app's Manage menu.

Publish at a glance​

Publish is organized by platform. Its menu lists All platforms, then Android, iOS, Windows, macOS, Linux and Web, each with its state (✓ published, ! needs you, ✕ the last run failed) or how many runs are going.

All platforms shows every platform with its state; open one to publish or update it. A platform's page, and All platforms too, has three tabs:

TabOn a platform's pageOn All platforms
OverviewA card for each place the app goes on that platformEvery platform with its state
ActivityThat platform's runsEvery run of the app, filterable by platform
SettingsThe platform's settings, and its signing keyShared settings: the defaults every platform starts from

Where your app goes​

Each card is a place the app goes:

PlatformCards
AndroidGoogle Play (its testing tracks and Production, and the store listing) and Android app (APK) (an APK, and the app's download page). See Android apps and Google Play
iOSApp Store & TestFlight, Test on your devices (an install link for your registered iPhones and iPads) and iOS Simulator. See iOS apps
Windows, macOS, LinuxThe app for that system (Windows: an installer and a portable .zip; macOS: a disk image; Linux: a .tar.gz), and the app's download page. Windows has the Microsoft Store too. See Desktop apps
WebThe app's files, to host on your own server. See Web apps

A card shows its next step until it's set up: Connect Google Play, Create APK, Create Windows app, … Once something is published, it shows what's live, with Update to publish the app as it is now: Create (or Publish) the first time, Update after that.

While a run is going, its card shows what it's doing ("Building Version 1.0.0 · Build 13…") and its button waits. Open the line for the run's details.

Start a run​

A card's button opens the action's screen:

  • The settings it needs, such as the app's name and package name, open at the top; the rest of the platform's settings are further down. Changes are saved to the app as you make them.
  • Version and build for this run.
  • What signs the build, and the store account it uses.
  • Anything to set up first, shown in red at the bottom until it's done.
  • What the run costs per minute, and your balance.

Then click the action's button. The run's details open and follow it live.

Version and build number​

  • Version (e.g. 1.2.0) is prefilled from your app's pyproject.toml. If you change it, the new version is saved to pyproject.toml when the run starts.
  • Build number is one counter for the whole app, shared by all platforms, and Studio assigns the next one to each run. It's what stores use to tell builds apart (Google Play's version code, Apple's build). You can override it for one run with the pencil, but never below the next automatic number. Publishing to Google Play starts it above the highest one Google Play already has.

Credits​

Builds run on cloud machines and use credits, the same balance as the AI agent. Each kind of machine (Linux, Windows, Mac) has a price per minute, shown on the action's screen, and a 4-minute minimum.

  • A run starts only if your balance covers its minimum. Waiting in the queue and getting a machine ready are free.
  • The minimum is charged when the build starts on the machine. After that, each minute is charged as it begins.
  • If your credits run out during a run, the run stops, and the minutes it used stay charged.
  • Uploading to a store after the build is free.

If a build machine fails in the middle of your run, contact Flet support and we'll make it right. See Settings › Usage & billing for your balance, plans and credit packs.

When a run or an agent request needs more credits than you have, its screen offers a pack of 10,000 credits for $20 and, on Explorer, a free 7-day Creator trial with 500 bonus credits. Checkout brings you back to the same screen.

Plans​

ExplorerCreator
PriceFree$30 a month, or $300 a year
Credits a month50010,000
Credit packs ($20 for 10,000)YesYes
Build for Android (APK), iOS (your own devices), web, Windows, macOS, LinuxYesYes
Google Play, App Store and TestFlight, Mac App Store, Microsoft Store—Yes
Code signing and notarization (Windows, the Mac disk image, an App Store .ipa)—Yes
GitHub sync—Yes
Builds at a time12
Longest build15 minutes30 minutes
Download page releases kept7 days1 year
Run files kept7 days90 days
Run logs and steps kept30 days1 year
Agent chats kept30 days after their last use90 days after their last use
AgentProPro and Expert

On Explorer, Windows and Mac apps are built unsigned: they open with a warning (see Open the app) and can't go on the download page. APKs are always signed, and iOS install links work on Explorer.

Free trial. Try Creator for 7 days, monthly or annual: a card is required, and you get 500 bonus credits on top of Explorer's 500 a month (the 10,000 start with your first payment). Start plan now in Settings › Usage & billing ends the trial early and gives you the 10,000 credits at once; cancelling before the trial ends costs nothing, and you keep the bonus. Each account, and each card, can have one trial.

Build settings​

Your app's build settings live in its pyproject.toml, under [project] and [tool.flet]: the same file flet build reads.

  • All platforms › Settings (Shared settings) applies to every platform: name, version, description, icon, splash screen, and more.
  • Each platform's Settings tab adds its own settings (Android's SDK versions and permissions, iOS's bundle ID, ...) and can override a shared one for that platform only. It says how many settings differ from Shared settings.

Changes there are written to pyproject.toml, and edits you (or the agent) make to the file show up there. See Publishing a Flet app for every setting.

Signing keys and publishing accounts are never stored in your app's files. See Signing keys and publishing accounts.

Run details​

Open a run from its card or from Activity:

  • Status, cost, version and duration. A run can be canceled while it waits or builds.
  • Artifacts: the files it produced, to download.
  • Errors and warnings, each linked to the step it came from.
  • Steps: what the build did, each with its own log. Times are shown in your local time. Download log saves the whole log as a text file, with the steps' titles as headers and times in UTC.

Downloads expire​

Studio keeps a run's files for 7 days on the Explorer plan and 90 days on Creator, and at most the last three successful runs of each action. After that, the card says Download expired: Update to get the files again. A run's log and steps are kept 30 days on Explorer and 1 year on Creator; the run itself stays in Activity. What's on a store stays there, and so does the app on its download page while it's up.

Queued runs​

Runs wait in a queue when all build machines for a platform are busy, or when your plan's limit of runs at a time is reached. A run that waits more than an hour is canceled without charge.

When a build fails​

The run's Errors and warnings point at the step that failed: open it for its log. Common causes are code that fails when the app is packaged (it runs before the first screen), a dependency that has no build for the platform, or a setting the platform rejects.

The AI agent can help: ask it why the build failed. It reads the run's steps, errors and log, fixes what's in your app (code, dependencies, settings), and tells you to start the run again.

Questions​

Does a build work the same as the preview?​

Not always. The preview runs your app in the browser with Pyodide, so it can only use pure-Python packages and those built for Pyodide. A build packages your app with real Python for the platform: packages with native code work there if they have a build for it — see Python packages built in Flet for Android and iOS.

Can I build on my own computer instead?​

Yes. Download the app with Download app as .zip file in the app bar, then use flet build. It reads the same pyproject.toml settings.