Build1 publisher3 min readPublished
Flet 1.0 puts synchronous event handlers on the application's event loop
Feodor Fitsner rebuilt Flet's internals before attaching a stable version number, so the release that arrived on September 15 is also the one that stops running the 0.28 code his users already wrote.
The Engineer · Build desk

What happened
- Feodor Fitsner released Flet 1.0 on September 15th, the first stable version of his open-source framework for building web, desktop and mobile applications from a single Python codebase.
- The rewrite behind it moved controls to Python dataclasses, added a declarative interface alongside the imperative one, introduced automatic UI updates and replaced JSON on the Python-to-Dart wire with MessagePack.
- Flet's migration guide says 1.0 is not a drop-in replacement for 0.28, and the stable release gathers renamed APIs, a revised service model and the removal of older compatibility shims.
- Fitsner says 1.0 is ready for production applications, pointing to automated tests over the Python SDK, Flutter controls, packaged applications and device interactions on desktop and mobile.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost Existing users pay for the stable label in engineering time, because a 0.28 application has to be reworked API by API before it runs on 1.0.
- capability A team with no frontend skills can ship a data-heavy internal tool to Android, since packaged builds bundle Python 3.12, 3.13 or 3.14 and Flet maintains mobile builds of NumPy, pandas, Pillow, SciPy and cryptography.
- decision Anyone picking a Python UI stack now weighs Flet against Kivy and Qt for Python with the breaking changes already behind the version number.
- exposure Fitsner's route to revenue runs through the planned Studio and Fletbase services, so paid maintenance of an Apache-licensed framework depends on products that have not shipped.
In Flet 0.28, a synchronous event handler went to a thread pool, so a function that read a file or waited on a network response did not hold up the interface. Version 1.0 runs synchronous handlers directly on the application's event loop [11]. Blocking work inside a handler now freezes interface updates until the developer converts it to asynchronous code or moves it onto a thread of their own [11]. Porting an existing application means reading every handler for calls that block.
Flet came out of Pglet, an earlier web framework designed around several programming languages, and those inherited decisions became a constraint once Flet went Python-centric and added mobile and desktop targets [4]. In the June 2025 alpha announcement, Fitsner described mounting technical debt and architectural complexity, then explained that he had chosen a ground-up rewrite while the community was still small enough to absorb breaking changes [5]. He is a longtime .NET developer who founded the continuous-integration provider AppVeyor in 2011 [3], and he started Flet in 2022 [2]. In packaged native applications, an in-process bridge has removed sockets from the channel between Python and Dart [14].
Flet says changes to its interface-diffing system produced gains of up to 6.7x in its own benchmarks [13]. For that number to reach your application, the diff has to be your bottleneck: a large control tree, frequent partial updates, and a device where the Flutter renderer Flet draws through [7] and the Python-to-Dart hop are not already the limit. Startup is measured separately. In a July 5th GitHub issue, one developer reported cold starts of roughly 10 to 13 seconds for an Android application built with Flet 0.85.3, covering a single application and predating the final release [15].
The published evidence of use is open-source reach. The repository had about 16,800 GitHub stars and 692 forks at publication [16], and Flet reports more than 9 million PyPI downloads, 100 contributors, 1,000 merged pull requests and 6,000 Discord members [17], which averages roughly ten merged pull requests per contributor [21]. Flet has not published revenue, paying-customer counts or the number of applications distributed through app stores [18].
Deployment shape still differs by target. On the web, Flet can run Python in the browser through Pyodide and WebAssembly, or keep Python on a server and send interface updates to the client [9].
In my view the stable label is worth taking at face value for new projects, because Fitsner took the breaking changes before he attached it. The cost sits with the people who wrote against 0.28. I would start new work on 1.0 and schedule the port of an existing application for a quarter when someone can own it.
What to watch
- Cold-start measurements for Android builds on 1.0 from developers other than the author of the 0.85.3 issue.
- Whether Studio and Fletbase ship with pricing, and what they require from the open-source core.
- Whether Flet publishes app-store distribution or paying-customer figures alongside its download counts.