Flet v0.85.3 Release Notes

Release Date: 2026-06-08 // 8 days ago
  • What's Changed

    ๐Ÿ‘Œ Improvements

    • ๐Ÿ‘ Allow [tool.flet.android.permission] values to be TOML inline tables in addition to booleans โ€” each key = "value" entry adds an android:<key>="<value>" attribute to the generated <uses-permission> element, unlocking modifiers like android:maxSdkVersion and android:usesPermissionFlags that real-world Android permissions (e.g. Bluetooth LE) require. The boolean form and the --android-permissions CLI flag are unchanged; a non-empty inline table is always emitted, an empty table ({}) is treated as false, and invalid value types fail the build with a clear error (#6550, #6551) by @FeodorFitsner.
    • โž• Add [tool.flet.android.provider] for declaring custom <provider> entries in the generated AndroidManifest.xml. Each table key is the provider's android:name; entries become android:<key>="<value>" attributes on the generated element. A reserved meta_data sub-table emits nested <meta-data> children (scalar values render as android:value="โ€ฆ"; inline-table values render as android:<k>="<v>" so android:resource="@xml/โ€ฆ" works). false / {} skip the entry; true and invalid value types fail the build with a clear error. The built-in androidx.core.content.FileProvider block is unchanged (#6556, #6559) by @FeodorFitsner.
    • โฌ†๏ธ Upgrade the bundled Pyodide runtime in the flet build web template from 0.27.5 to 0.27.7 (includes micropip 0.9.0) (#6549) by @FeodorFitsner.
    • โฌ‡๏ธ Drop generated web/canvaskit/ build artifacts (canvaskit.js/.wasm/.symbols and the chromium/ and skwasm/skwasm_st variants) from the flet build web template โ€” these are produced by the Flutter web build and should not have been committed into the cookiecutter template (#6549) by @FeodorFitsner.
    • Cache the downloaded flet-build-template.zip across builds. The build template is bound to an exact Flet version and is immutable, so on every flet build / flet debug after the first, the CLI now uses a previously-downloaded zip from $FLET_CACHE_DIR/build-template/v<flet-version>/ (defaulting to ~/.flet/cache/build-template/v<flet-version>/) instead of re-fetching it via cookiecutter. The CLI also exports FLET_CACHE_DIR into the child Gradle process, so serious_python_android >= 1.0.1 lands its Python dist tarballs (python-android-dart-<py>-<abi>.tar.gz) in the same cache root by default โ€” fixing the multi-minute "Creating app shell" / downloadDistArchive_* delay on every Android debug build. Custom --template URLs and the local-dev template path are unchanged (#6555, #6558) by @FeodorFitsner.
    • ๐Ÿ— Bump the bundled build template's serious_python dependency from 1.0.0 to 1.0.1 so Android builds pick up the new persistent Python-tarball cache + conditional-GET revalidation introduced in serious_python 1.0.1 (#6558) by @FeodorFitsner.

    ๐Ÿ› Bug fixes

    • Fix flet.Router's default on_view_pop navigating to the wrong URL when an outlet=True layout sits between two views in manage_views=True mode. Popping such a view now targets the previous view entry's resolved URL โ€” skipping outlet layouts and componentless grouping routes โ€” instead of chain[-2], which could equal the current view's URL and strand the page route, making the next navigation to it a no-op (#6533) by @FeodorFitsner.
    • ๐Ÿ›  Fix flet-audio.Audio.play()/seek() timing out when replaying after playback had completed: under the default ReleaseMode.RELEASE the source is freed on completion and is now re-prepared on replay (#6536, #6538) by @ndonkoHenri.
    • Fix ft.run(view=ft.AppView.FLET_APP_HIDDEN) briefly flashing the native window in the top-left corner during Windows desktop startup. The Windows runner now respects FLET_HIDE_WINDOW_ON_START and skips the first-frame Show() call so the window stays hidden until page.window.visible = True, matching the Linux desktop behavior; the same fix is applied to the flet build windows template runner so generated apps behave consistently. On Linux, pre-show window placement actions (page.window.center(), page.window.alignment) are now deferred until the window first becomes visible to avoid an analogous flash, and the window's focused state is preserved when a prevent_close handler cancels a close attempt (#5897, #5914, #6527) by @ihmily.

    Full Changelog : v0.85.2...v0.85.3


Previous changes from v0.85.3.dev1