Skip to main content

Default bundled Python version is now 3.14

note

This guide is accurate as of Flet 0.86.0. Later releases might add new APIs or additional migration paths.

The breaking changes and deprecations index lists the guides created for each release.

Summary

Flet 0.86.0 introduces multi-version bundled CPython support to flet build and flet publish. The bundled Python interpreter is now selected per build (see Choosing a Python version) and the default is the latest supported stable — currently CPython 3.14. Earlier Flet releases implicitly bundled CPython 3.12 via the single-version serious_python 1.x.

Apps that depend on Python packages whose pre-built wheels aren't yet available for 3.14 (typically packages with C/Rust extensions that haven't caught up to the new ABI) need to pin a previous Python version.

Background

Multi-version Python support landed in #6577 and is tracked by the central registry in flet_cli/utils/python_versions.py. The supported short versions are 3.12, 3.13, and 3.14 (each pinned to a specific CPython patch + Pyodide release on the registry side).

The default flips to the latest stable so new projects get the most recent Python by default. Existing projects without a pin start picking it up too on their next build.

Migration guide

You can pin a different Python version in three equivalent ways. Use whichever fits your project layout.

Add or update [project].requires-python:

[project]
requires-python = ">=3.12,<3.13"

flet build parses the specifier and picks the highest supported short version that satisfies it. So >=3.12,<3.13 resolves to 3.12, >=3.13,<3.14 resolves to 3.13, and >=3.14 resolves to 3.14 (the default).

Pin via the CLI flag

Pass --python-version on every invocation:

flet build apk --python-version 3.12
flet publish --python-version 3.12

The CLI flag overrides anything in pyproject.toml.

Pin via environment variable

Export SERIOUS_PYTHON_VERSION in the shell that runs flet build:

export SERIOUS_PYTHON_VERSION=3.12
flet build apk

Useful in CI pipelines where you don't want to thread the flag through every job.

Timeline

  • Changed in: 0.86.0

References