Skip to content

Releases: flet-dev/flet

v0.86.0.dev2

v0.86.0.dev2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Jul 23:45
4e70321

What's Changed

New Contributors

Full Changelog: v0.86.0.dev1...v0.86.0.dev2

v0.86.0.dev1

v0.86.0.dev1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jul 19:47
ff08962

What's Changed

  • fix(ci): version flet-mcp like the other packages on publish by @FeodorFitsner in #6633
  • fix(build): preserve flutter-packages on incremental builds (--skip-site-packages) by @FeodorFitsner in #6634

Full Changelog: v0.86.0.dev0...v0.86.0.dev1

v0.86.0.dev0

v0.86.0.dev0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jul 18:28
967da28

What's Changed

  • Multi-version Python support (3.12 / 3.13 / 3.14) by @FeodorFitsner in #6577
  • fix(flet-secure-storage): bump flutter_secure_storage 10.0.0 -> 10.3.1 to fix macOS data-protection keychain (-34018) on unsigned/dev apps by @EH-MLS in #6591
  • feat(cli): flet clean command + deprecate --clear-cache flag of flet build by @ndonkoHenri in #6590
  • fix(typing): explicit handler signatures in PubSubClient by @Iaw4tch in #6564
  • chore: More docs + code improvements by @ndonkoHenri in #6589
  • fix(android): pickFirsts libc++_shared.so to unblock multi-plugin Flet apps by @ndonkoHenri in #6571
  • Update CONTRIBUTING.md hello.py example to use modern ft.run() and ft.Page/ft.Text instead of deprecated `flet.app by @Federicorao in #6582
  • feat(FilePicker): add compression_quality and cancel_upload_on_window_blur to pick_files() by @ndonkoHenri in #6573
  • feat: add flet-spinkit extension package wrapping flutter_spinkit ^5.2.2 by @InesaFitsner in #6596
  • Integrate dart-bridge into flet-0.86 (in-process FFI transport, multi-version Python, native-mmap, DataChannel) by @FeodorFitsner in #6601
  • Lift app packaging into serious_python + SPM-by-default darwin builds by @FeodorFitsner in #6608
  • Support Android TV in device info retrieval by @bl1nch in #6604
  • 在android_sdk.py中令cmdline-tools-url检测到windows使用arm64架构时返回与x64相同的下载链接 by @xiaocai2011 in #6617
  • Custom boot screen by @FeodorFitsner in #6616
  • feat(flet-ads): ConsentManager for AdMob UMP consent by @ndonkoHenri in #6615
  • Rich progress bars for client and pyodide downloads by @FeodorFitsner in #6618
  • feat: flet test on-device integration testing + CI matrix by @FeodorFitsner in #6623
  • Pin python-build 20260630 (armeabi-v7a for 3.13/3.14); serious_python 4.2.0 by @FeodorFitsner in #6628
  • Add flet-mcp: MCP server for LLM agents by @FeodorFitsner in #6624
  • ci: zizmor security checks by @ndonkoHenri in #6602
  • Bump serious_python 4.2.1 / python-build 20260701 by @FeodorFitsner in #6630

New Contributors

Full Changelog: v0.85.3...v0.86.0.dev0

v0.85.3

Choose a tag to compare

@github-actions github-actions released this 08 Jun 01:56
bb993fa

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

v0.85.3.dev1

v0.85.3.dev1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Jun 22:03
95d105d

What's Changed

  • feat(build): cache flet-build-template.zip; share FLET_CACHE_DIR with Gradle by @FeodorFitsner in #6558
  • feat(build): support custom entries in AndroidManifest via pyproject.toml by @FeodorFitsner in #6559

Full Changelog: v0.85.3.dev0...v0.85.3.dev1

v0.85.3.dev0

v0.85.3.dev0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Jun 21:38
f885891

What's Changed

  • docs(studio): add Flet Studio landing page and docs section by @FeodorFitsner in #6523
  • docs(studio): give Studio its own footer column by @FeodorFitsner in #6524
  • Tests and screenshots for Featured apps; fix for palette editor color picker by @InesaFitsner in #6521
  • fix: add CMake definition to silence MSVC coroutine deprecation error by @ihmily in #6525
  • docs(studio): Flet Studio launch post + updated gallery links by @FeodorFitsner in #6534
  • Flet Studio update and skip builds for website/tools-only changes by @FeodorFitsner in #6537
  • fix(router): pop to previous view, not the outlet layout URL by @FeodorFitsner in #6533
  • Renamed titles of basic examples by @InesaFitsner in #6535
  • docs: inject example headings dynamically from pyproject.toml metadata by @InesaFitsner in #6544
  • Fix build web template: drop canvaskit artifacts, bump Pyodide to 0.27.7 by @FeodorFitsner in #6549
  • refactor: rename and normalize example folder and package names by @InesaFitsner in #6545
  • fix: honor AppView.FLET_APP_HIDDEN in Windows and Linux desktop runners by @ihmily in #6527
  • feat(build): allow attributes on Android entries by @FeodorFitsner in #6551
  • fix(flet-audio): replaying Audio after completion under ReleaseMode.RELEASE raises TimeoutException by @ndonkoHenri in #6538

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

v0.85.2

Choose a tag to compare

@github-actions github-actions released this 25 May 17:32
bd5e16f

What's Changed

  • fix: reject session reuse when existing connection is still active by @ihmily in #6513
  • feat(router): add modal/recursive Route flags + chain-based pop by @FeodorFitsner in #6516
  • docs: add 0.85.2 changelog entry for #6513 session reuse fix by @FeodorFitsner in #6518
  • docs: add release migration-guide page for breaking changes and deprecations by @ndonkoHenri in #6517

New Contributors

Full Changelog: v0.85.1...v0.85.2

v0.85.1

Choose a tag to compare

@github-actions github-actions released this 13 May 16:35
88ac763

Bug fixes

  • Fix TooltipTheme.decoration so it applies to controls using ft.Tooltip(...) when the tooltip does not explicitly set decoration or bgcolor (#6432, #6482) by @ndonkoHenri.
  • Fix flet-geolocator.Geolocator reliability on web and desktop: get_last_known_position() no longer crashes with TypeError: argument after ** must be a mapping, not NoneType and now returns Optional[GeolocatorPosition]; get_current_position() no longer hangs forever on web (Dart-side workaround for the upstream geolocator_web 4.1.3 inMicroseconds/inMilliseconds timeout typo) and uses sensible web defaults (time_limit: 30s, maximum_age: 5m); the previously-dropped configuration argument now actually reaches getCurrentPosition on the Dart side; the position stream is gated behind a registered on_position_change/on_error handler (with cancel-on-update to prevent leaks); and platform exceptions (LocationServiceDisabledException, PermissionDeniedException, PermissionDefinitionsNotFoundException, PermissionRequestInProgressException, PositionUpdateException, TimeoutException) are now translated into actionable error messages and surfaced to Python as RuntimeError without the default Exception: prefix (#6487) by @FeodorFitsner.
  • Fix PEP 508 markers on flet's oauthlib/httpx deps not actually excluding those packages under Pyodide: the flet build web package platform has been renamed from Pyodide to Emscripten to match platform.system() inside the Pyodide runtime, and the markers now use platform_system != 'Emscripten', so the exclusion works both via flet build and a direct micropip.install("flet") in a Pyodide REPL. Requires serious_python >= 1.0.0, which is now pinned in the flet build template (#6492) by @FeodorFitsner.

v0.85.0

Choose a tag to compare

@github-actions github-actions released this 08 May 22:15
b1499da

What's Changed

New features and improvements

  • Add configurable built-in, custom, hidden, and normal/fullscreen-specific controls to flet-video; Video.take_screenshot() for capturing video frames; and Video.on_position_change/Video.on_duration_change events (#6463) by @ndonkoHenri.
  • Add declarative ft.Router component for @ft.component apps with nested routes, layout routes with outlets, dynamic segments, optional segments, splats, custom regex constraints, data loaders, active link detection, authentication patterns, and manage_views=True mode for view-stack navigation with swipe-back gestures and AppBar back button on mobile (#6406) by @FeodorFitsner.
  • Add ft.use_dialog() hook for declarative dialog management from within @ft.component functions, with frozen-diff reactive updates and automatic open/close lifecycle (#6335) by @FeodorFitsner.
  • Add scrollable, pin_leading_to_top, and pin_trailing_to_bottom properties to NavigationRail for scrollable content with optional pinned leading/trailing controls (#1923, #6356) by @ndonkoHenri.
  • Add scroll support to ResponsiveRow for responsive layouts whose content exceeds the available height (#2590, #6417) by @ndonkoHenri.
  • Add issues property to CodeEditor (along with Issue and IssueType types) for displaying code analysis error markers in the gutter, with analysis performed on the Python side (#6407) by @FeodorFitsner.
  • Add Page.pop_views_until() to pop multiple views and return a result to the destination view (#6326, #6347) by @brunobrown.
  • Make NavigationDrawerDestination.label accept custom controls and add NavigationDrawerTheme.icon_theme (#6379, #6395) by @ndonkoHenri.
  • Add local_position and global_position to DragTargetEvent, deprecating x, y, and offset (#6387, #6401) by @ndonkoHenri.
  • Added PCM16 streaming to AudioRecorder, including on_stream chunks and direct upload support via AudioRecorderUploadSettings (#5858, #6423) by @ndonkoHenri.
  • Add Page.theme_animation_style for customizing the duration and curve of the theme cross-fade between theme and dark_theme (or disabling it with AnimationStyle.no_animation()), exposing Flutter's MaterialApp.themeAnimationStyle (#6476) by @FeodorFitsner.

Bug fixes

  • Fix control diffing for controls nested inside @value dataclass objects so they keep the nearest control parent/page context, and restore optional structured properties that are cleared to None and later set again (#6463) by @ndonkoHenri.
  • Fix Page and View vertical centering when scrolling is enabled, including hidden scrollbars, so short content remains centered in the viewport (#6446, #6450) by @ndonkoHenri.
  • Reduce Linux memory retention when repeatedly removing flet_video.Video controls by linking media_kit video apps against mimalloc in run and build flows (#6164, #6416) by @ndonkoHenri.
  • Fix flet build and flet publish dependency parsing for project.dependencies and Poetry constraints with </<=, and add coverage for normalized requirement handling (#6332, #6340) by @td3447.
  • Fix CodeEditor background not filling the entire area when expand=True (#6407) by @FeodorFitsner.
  • Handle unbounded width in ResponsiveRow with an explicit error, treat child controls with col=0 as hidden, and clarify Container expansion behavior when alignment is set (#1951, #3805, #5209, #6354) by @ndonkoHenri.
  • Fix find_platform_image selecting incompatible icon formats (e.g. .icns on Windows) by ranking glob results per target platform (#6381) by @HG-ha.
  • Fix page.window.destroy() taking several seconds to close Windows desktop apps when prevent_close is enabled (#5459, #6428) by @ndonkoHenri.
  • Fix Page.show_drawer(), close_drawer(), and root/top view accessors (appbar, drawer, navigation_bar, controls, ...) failing with TypeError under Page.render_views() by unwrapping component-wrapped views and normalizing single-view returns (#6413, #6414) by @FeodorFitsner.
  • Fix auto_scroll on scrollable controls silently doing nothing unless scroll was also explicitly set (#6397, #6404) by @ndonkoHenri.
  • Fix Flet web returning index.html with a 200 OK for missing asset files; requests for paths with a file extension other than .html now return a proper 404, while route-like paths still fall back to index.html for SPA routing (#6425) by @ndonkoHenri.
  • Fix Lottie failing to load local asset files on Windows desktop (and unreliably on other desktop platforms), so animations referenced by src="file.json" from the app's assets/ directory now display correctly (#6386, #6426) by @ndonkoHenri.
  • Fix Page.on_resize and Page.on_media_change not firing after mobile orientation changes (#6457, #6423) by @ndonkoHenri.
  • Fix flet pack desktop packaging so Windows and Linux bundles include the expected client archive, and Windows taskbar pins point to the packed app instead of the cached flet.exe (#5151, #6403) by @ndonkoHenri.
  • Fix environment variable priority in flet build template: inherit from Platform.environment and use putIfAbsent for FLET_* variables so pre-set system env vars are not overwritten (#6394) by @Bahtya.
  • Fix NavigationBarDestination.selected_icon rendering wrongly when provided as an Icon control (#6460, #6468) by @ndonkoHenri.
  • Fix 3- and 4-digit hex color shorthand (e.g. #c00, #fc00) rendering as invisible by expanding them to their full 6/8-digit forms (#6419, #6421) by @ndonkoHenri.
  • Fix LineChartEvent.spots returning undecoded MessagePack extension values instead of LineChartEventSpot objects (#6443, #6468) by @ndonkoHenri.
  • Fix LineChart (and other charts) silently dropping custom ChartAxisLabel entries whose value matched a tick only after floating-point rounding (e.g. 0.1, 0.2, 0.3) by switching label lookup to a tolerance-based comparison scaled to the axis interval (#6445, #6459) by @KangZhaoKui.
  • Fix absolute-path src (e.g. Image(src="/images/foo.svg")) breaking on web when the app is mounted at a non-root URL, pass data:/blob: URIs through the asset resolver unchanged, preserve origin-relative semantics when assets_dir is unset, and add a window.flet.assetsDir JS-interop bridge so embedding hosts can supply assets_dir to the top-level FletApp (#6470) by @FeodorFitsner.
  • Fix unbounded browser memory growth in MatplotlibChart on Flutter web (CanvasKit/WASM) during animations by replacing the Canvas + capture() rendering path with a dedicated MatplotlibChartCanvas widget that composites matplotlib diff frames in CPU memory; also fixes Safari async PNG decode (EncodingError: Loading error.), a render/figure.savefig() race that crashed the toolbar Download, and pan/zoom playback lag from buffered pointer events (#6473) by @FeodorFitsner.
  • Fix Duration fields (and other int-typed properties) silently decoding to 0 when given a Python float (e.g. Duration(seconds=2.0) causing Page.theme_animation_style to end instantly) by coercing double to int in the Dart-side parseInt (#6478, #6480) by @FeodorFitsner.

Documentation

  • Improve CrocoDocs API reference rendering with formatted signatures, modern type annotations, and cleaner cross-reference labels for extension packages ([#6442](ht...
Read more

v0.85.0.dev4

v0.85.0.dev4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 May 03:42
e0352ad

What's Changed

Full Changelog: v0.85.0.dev3...v0.85.0.dev4