Flet 1.0 Released: Build Production Web, Desktop and Mobile Apps in Python Only
Source material Open source material ↗

Once “Python Only” Meets Production, the Promise Changes

The Flet team has released Flet 1.0, an open-source Python framework for building interfaces. Developers write Python, Flet renders Material and Cupertino controls through Flutter, and the same source can be packaged for iOS, Android, Windows, macOS, Linux, and the browser. The SDK requires Python 3.10 or newer. Flet 1.0.0 is available on PyPI under the Apache 2.0 license, and the installation entry point is pip install 'flet[all]'. Its target problem is concrete: enable teams that do not use Dart, Swift, Kotlin, or JavaScript to ship one application across several environments.

For a technical leader, however, the relevant test for 1.0 is not whether a cross-platform interface can be written. Frameworks of this kind can make a unified development syntax look like a unified delivery environment. The more important change is where Flet places its evidence for production readiness: in builds, runtime packaging, native dependencies, and tests against packaged applications. It has not removed cross-platform complexity. It is trying to move that complexity out of business code and into an engineering chain that can be executed repeatedly.

Eight Targets Are Not Eight Buttons, but a Release Matrix

Flet’s CLI accepts eight target types: apk, aab, ipa, ios-simulator, windows, macos, linux, and web. The resulting artifacts cover six platforms, but that does not mean delivery is a single build-button operation. Framework unit tests cover Python 3.10 through 3.14 and also exercise the Flutter side. Control and example integration tests check behavior and compare screenshots, while native-library tests run Python binary packages on Android and the iOS simulator.

More importantly, the test chain extends toward the form that users actually receive. Build integration tests compile applications for six platforms across the supported Python versions. The flet test command can launch a packaged application and drive it on five native platforms, including Linux ARM64. Application teams can write their own integration tests with pytest and run them against packaged builds through flet test. Android and iOS also support screenshot comparison. That turns “cross-platform support” from a compatibility statement in documentation into a matrix that can be placed inside CI.

The Real Boundary Moves from Controls to Python Dependencies and Native Runtimes

Flet 1.0’s cross-platform reach will ultimately be constrained by dependencies rather than by the number of controls. Its package index lists more than 100 packages, including NumPy, pandas, Matplotlib, Pillow, SciPy, scikit-learn, cryptography, and pydantic-core. The mobile-forge pipeline automates wheel builds for iOS and Android. This shows that parts of the Python ecosystem are being brought to mobile, but it does not mean every package works on every target. The material explicitly states that availability still depends on the particular package and platform, especially for dependencies with native libraries.

The runtime design shows what Flet is taking on for the application team. Python 3.12, 3.13, or 3.14 is bundled with the application, while web builds use the corresponding Pyodide release. In native applications, dart-bridge lets Python and Dart communicate inside one process without sockets and provides dedicated channels for binary data. Android packaging can load Python packages directly from the APK instead of extracting them first, and bytecode compilation is enabled by default. These choices may reduce overhead in communication and loading paths, but they also make diagnosis more dependent on Flet’s packaging logic, the target platform, and the coverage of the test suite.

Declarative UI Eases State Management but Makes the Event Loop a Migration Risk

Flet 1.0 keeps both declarative and imperative styles. Declarative UI describes the interface as a function of application state and organizes it into reusable components, allowing the framework to process the interface again when state changes. The imperative style still lets event handlers mutate controls directly. Flet Studio and the Flet mobile application are themselves declarative Flet applications, so this is not merely an experimental interface described in the documentation.

A declarative model does not make performance concerns disappear. Flet now tracks changed properties and skips unnecessary comparisons. Its 0.83 benchmarks reported up to a 6.7-fold improvement in control diffing, but that is an internal framework optimization, not an unconditional guarantee for application code. For users migrating from 0.28, the more dangerous issue is the event loop. Earlier handlers ran on separate threads, while 1.0 moves them onto the application event loop. Blocking I/O or computation in a synchronous handler can therefore freeze the interface. Migration requires reviewing handlers and, where necessary, moving work to asynchronous handlers or threads.

AI Tooling Shortens the Search Path but Cannot Replace Build Evidence

Flet also connects versioned documentation to an AI-assisted development workflow. The Flet MCP server can provide AI coding assistants with version-specific API information and help locate examples, icons, and CLI options. Flet Studio runs in the browser with a built-in AI agent, and projects can be downloaded for local development. For a cross-platform framework, this can reduce the search cost between API versions, build commands, and component usage, particularly when a team is quickly adding an interface layer to existing Python code.

MCP, however, provides queryable knowledge and tool entry points, not execution evidence on a target platform. It cannot prove that a particular Python binary package works on a specified device, nor can it replace permission checks, performance observation, screenshot regression, or event-loop tests on packaged applications. Technical leaders should treat Flet as an engineering path for centralizing cross-platform complexity, not as a shortcut around native toolchains. Before adoption, map dependencies and Python versions for every target, run the real application on the hardest platform, and then place flet build and flet test in continuous integration. Only that process can distinguish maintainable delivery capability from a cross-platform promise that works only in a demonstration environment.