NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1917 most downloaded on pub.dev
Linux implementations of the serious_python plugin
Last release 11 days ago
26 Sep 2026
Release timing varies
gaps range from 9 days to 2 months
Nearly every release is documented
notes for 54 of 54 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
55 releases · first in 2023
Stop splitting exclude and cleanup globs on commas; prepare 5.0.0 by @FeodorFitsner in #253
Full Changelog: v4.7.2...v5.0.0
fix(darwin): re-sign linker-signed macOS native modules while staging by @ndonkoHenri in #251
One column per month.
Full Changelog: v4.7.1...v4.7.2
DartBridge.hardExit, and re-pin python-build to 20260908 by @FeodorFitsner in #248
Full Changelog: v4.7.0...v4.7.1
dart_bridge to 1.10.0. CPython versions remain 3.12.14 / 3.13.15 / 3.14.7. (python-build#42)Full Changelog : v4.6.0...v4.7.0
Full Changelog: v4.6.0...v4.7.0
dart_bridge to 1.9.0, whose libdart_bridge.so adds the serious_python_hard_exit export behind DartBridge.hardExit. No CPython versions change from 4.6.0 - 3.12.14 / 3.13.15 / 3.14.7 are unchanged.fix: pass --no-input and bounded timeouts to pip by @ndonkoHenri in #246
--no-input and bounded timeouts to pip by @ndonkoHenri in #246Full Changelog: v4.5.1...v4.6.0
html.parser.HTMLParser parsing (gh-153030) and quadratic behaviour in xml.etree.ElementTree XPath index predicates (gh-152674), among others. 3.13.15 and 3.14.7 still bundle libexpat 2.8.2; only 3.12.14 carries 2.8.3 with the CVE-2026-72522 fix — see the serious_python 4.6.0 notes.dart_bridge to 1.8.0.Bump to 4.5.1: sign and verify both XCFramework layers by @FeodorFitsner in #245
Full Changelog: v4.5.0...v4.5.1
dart_bridge to 1.7.1. Both exist to sign the Apple XCFrameworks on both layers (see serious_python_darwin 4.5.1); no Python version moved from 20260729 (3.12.13 / 3.13.14 / 3.14.6), and nothing about Linux changed.Bump to 4.5.0: preserve provider XCFramework signatures through staging by @FeodorFitsner in #244
Full Changelog: v4.4.2...v4.5.0
dart_bridge to 1.7.0. Both exist to provider-sign the Apple XCFrameworks (see serious_python_darwin 4.5.0). Nothing about Linux changed: no Python version moved from 20260727 (3.12.13 / 3.13.14 / 3.14.6), and libdart_bridge-linux-*.so is byte-identical to 1.6.1 — verified, not assumed.Bump to 4.4.2: Xcode build-provenance keys in iOS framework Info.plists by @FeodorFitsner in #242
Full Changelog: v4.4.1...v4.4.2
Info.plist (see serious_python_darwin 4.4.2); no versions moved and the Linux runtime is unchanged from 20260726.Bump to 4.4.1: OpenSSL privacy manifest for iOS _ssl/_hashlib by @FeodorFitsner in #241
Full Changelog: v4.4.0...v4.4.1
serious_python_darwin 4.4.1); no versions moved and the Linux runtime is unchanged from 20260725.Bump to 4.4.0: dart_bridge as a dynamic framework on Apple platforms by @FeodorFitsner in #240
Full Changelog: v4.3.6...v4.4.0
dart_bridge 1.5.1 → 1.6.1). 1.6.1 is an Apple-only packaging change (see serious_python_darwin 4.4.0); the Linux runtime is byte-identical to 20260720.Bump to 4.3.6: Windows UTF-8 startup fix (dart_bridge 1.5.1, python-build 20260720) by @FeodorFitsner in #238
concurrent.interpreters / InterpreterPoolExecutor) by @ndonkoHenri in #239Full Changelog: v4.3.4...v4.3.6
dart_bridge 1.5.0 → 1.5.1). 1.5.1 is a Windows-only UTF-8 startup fix (see serious_python_windows 4.3.6); the Linux runtime is functionally unchanged from 20260719.Nothing published for this version
Bump to 4.3.4: Android flet debug stale-code fix (flet #6682) by @FeodorFitsner in #235
flet debug stale-code fix (flet #6682) by @FeodorFitsner in #235Full Changelog: v4.3.3...v4.3.4
ModuleNotFoundError: No module named '_pyrepl' on Python 3.14. _pyrepl was pruned from the bundled Linux stdlib as a dev-only / interactive-REPL module, but CPython 3.14's pydoc (and pdb) import it at module load — so any app importing pydoc/pdb/pytest, or a dependency that does (e.g. NLTK → pydoc), crashed at startup. _pyrepl is no longer pruned. Re-pins the bundled python-build snapshot to 20260719 (previously 20260714). (flet-dev/serious-python#236)Fix Windows build failure on non-UTF-8 locales (C4819/C2220) by @FeodorFitsner in #234
Full Changelog: v4.3.2...v4.3.3
serious_python_linux_plugin.cc — GCC reads UTF-8 sources by default so there was no build impact, but it mirrors the Windows fix (flet-dev/flet#6686). Version bump aligning with the serious_python_* 4.3.3 release; no Linux-affecting runtime changes.Bump to 4.3.2: python-build 20260712 (Android mimalloc seccomp crash, mobile _pyrepl restored) by @FeodorFitsner in #230
Full Changelog: v4.3.1...v4.3.2
20260714; aligns with the serious_python_* 4.3.2 release. The release contains only Android/iOS runtime fixes — no Linux-affecting changes.Version bump aligning with the serious_python_* 4.3.1 release.
serious_python_* 4.3.1 release.Bump dart_bridge to 1.5.0 (python-build snapshot 20260708): multiprocessing child-interception exports (serious_python_is_mp_invocation / serious_pyth
dart_bridge to 1.5.0 (python-build snapshot 20260708): multiprocessing child-interception exports (serious_python_is_mp_invocation / serious_python_main), consumed by the flet build template's main.cc via dlopen("libdart_bridge.so"). Relevant on Linux since Python 3.14 made forkserver (which execs sys.executable) the default start method. See the serious_python 4.3.0 notes.PYTHONINSPECT=1 is no longer set by any platform implementation. It had no effect on the embedded interpreter, but it leaked into the process environment where any real interpreter child (e.g. a serviced multiprocessing worker) would inherit it and hang in interactive mode after its command completed.Bump the bundled python-build snapshot to 20260701; aligns with the serious_python_* 4.2.1 release. The Linux runtimes are byte-identical to 20260630
20260701; aligns with the serious_python_* 4.2.1 release. The Linux runtimes are byte-identical to 20260630 (the release only rebuilds the iOS runtime).Bump the bundled python-build snapshot to 20260630 (dart_bridge 1.4.1); aligns with the serious_python_* 4.2.0 release.
20260630 (dart_bridge 1.4.1); aligns with the serious_python_* 4.2.0 release.Version bump aligning with the serious_python_* 4.1.1 release.
serious_python_* 4.1.1 release.Version bump aligning with the serious_python_* 4.1.0 release.
serious_python_* 4.1.0 release.prepareApp() returns /app; the app's Python sources ship unpacked next to the bundled stdlib + site-packages (no first-launch extraction). The CMakeLi
prepareApp() returns <exeDir>/app; the app's Python sources ship unpacked next to the bundled stdlib + site-packages (no first-launch extraction). The CMakeLists copies SERIOUS_PYTHON_APP into the bundle.serious_python_* 4.0.0 release.Breaking change: requires Flutter 3.44.2.
libdart_bridge.so (from flet-dev/dart-bridge 1.4.0, DT_RPATH $ORIGIN) instead of a socket transport.CMakeLists.txt resolves the Python version from the generated python_versions.properties (a snapshot of python-build's manifest.json): SERIOUS_PYTHON_VERSION selects the version; the full version and build date derive from the table, with SERIOUS_PYTHON_FULL_VERSION / SERIOUS_PYTHON_BUILD_DATE left as escape hatches. Downloads continue to use python-build's date-keyed release scheme.getPlatformVersion method.Breaking change: default bundled Python version is now 3.14 (was 3.12). The plugin downloads python-linux-dart-3.14- .tar.gz from flet-dev/python-buil…
python-linux-dart-3.14-<arch>.tar.gz from flet-dev/python-build and bundles libpython3.14.so.1.0 unless SERIOUS_PYTHON_VERSION=3.12 is set in the build environment.PYTHON_VERSION in linux/CMakeLists.txt reads from SERIOUS_PYTHON_VERSION, and all python3.12 / libpython3.12.so.1.0 / lib/python3.12 paths are derived from it. The plugin source receives the version via a SERIOUS_PYTHON_VERSION compile-time macro so the runtime module path matches the bundled distro.Cache downloaded Python distribution tarballs (python-android-dart- - .tar.gz) across builds. The downloadDistArchive_* Gradle tasks now write to a pe
python-android-dart-<py>-<abi>.tar.gz) across builds. The downloadDistArchive_* Gradle tasks now write to a persistent cache directory — $FLET_CACHE_DIR/python-build/v<python_version>/ if the env var is set, otherwise ~/.flet/cache/python-build/v<python_version>/ — and use onlyIfModified true + useETag "all" so subsequent builds issue a conditional GET (If-None-Match / If-Modified-Since) against objects.githubusercontent.com instead of re-downloading 30–100 MB per ABI per build. When the upstream release republishes a tarball at the same URL (e.g. a Python patch update under the existing v<py> release), the validators flip and the cache refreshes automatically; otherwise the build skips the download entirely. tempAndMove true guards against partial downloads being kept in the cache (flet-dev/flet#6555, #208) by @FeodorFitsner.Breaking change: --platform argument value Pyodide has been renamed to Emscripten to match what platform.system() returns in the Pyodide runtime, so P…
--platform argument value Pyodide has been renamed to Emscripten to match what platform.system() returns in the Pyodide runtime, so PEP 508 markers like platform_system != 'Emscripten' work consistently.Fix web packaging to skip site-packages when appropriate (#199).
site-packages when appropriate (#199).Disable user-site packages in pip environment (#195).
Android: Add debug logs and deduplicate FFI imports.
Add zipDirectoryPosix to create POSIX-compliant app archives on Windows.
serious_python plugin build.WINDIR path for bundled DLLs in CMake.* Fix logging on Android.
Redirect Python output to logcat.
Make zipDirectory call asynchronous.
Fixed iOS framework identifier generation.
archive to ^4.0.7.16 KB memory page support for Android 15+ (by @ReYaNOW).
Fix: Hidden files in site-packages are skipped when building macOS app.
.dist-info directories (#164).Breaking change: multiple --requirements options of package command must be passed as --requirements DEP_1 --requirements DEP_2 ... (or -r DEP_1 -r DE…
--requirements options of package command must be passed as --requirements DEP_1 --requirements DEP_2 ... (or -r DEP_1 -r DEP_2 ...) instead of -r DEP_1,DEP_2,... to support dependency specifications with commas, e.g. pandas>=2.2,<3.Fix serious_python to work on macOS 12 Monterey and built with Xcode 14.
serious_python to work on macOS 12 Monterey and built with Xcode 14.Set MinimumOSVersion to 13.0 for generated Python frameworks.
MinimumOSVersion to 13.0 for generated Python frameworks.python.bundle to pass App Store verification.--cleanup option replaced with two separate --cleanup-app and --cleanup-packages options.--cleanup-app-files and --cleanup-package-files to specify a list of globs to exclude files and directories from app and site packages.--skip-site-packages option to skip site packages installation for faster re-builds.--arch option accepts a list now.Fixed: xcframeworks migration script didn't work for sub-directories.
xcframeworks migration script didn't work for sub-directories.Added com.flet.serious_python_android.PythonActivity holder class with mActivity holding a reference to an app MainActivity. Needed for plyer.
com.flet.serious_python_android.PythonActivity holder class with mActivity holding a reference to an app MainActivity. Needed for plyer.MAIN_ACTIVITY_HOST_CLASS_NAME environment variable with the name of activity holder class name (com.flet.serious_python_android.PythonActivity).MAIN_ACTIVITY_CLASS_NAME environment variable with a class name of an app MainActivity.ANDROID_NATIVE_LIBRARY_DIR environment variable with the path to a directory containing app .so libraries. Needed for patching ctypes.find_library.SERIOUS_PYTHON_ALLOW_SOURCE_DISTRIBUTIONS environment variable that should contain a comma-separated list of packages to allow installation from source distribution.site-packages to xcframeworks migration script supports both library.so and library.{something}.so.Added Java loadLibrary to Android plugin to support pyjnius (#128).
loadLibrary to Android plugin to support pyjnius (#128).Copy site-packages/flutter contents to SERIOUS_PYTHON_FLUTTER_PACKAGES.
site-packages/flutter contents to SERIOUS_PYTHON_FLUTTER_PACKAGES.SERIOUS_PYTHON_ALLOW_SOURCE_DISTRIBUTIONS variable to allow pip installing from source distributions.Remove PYTHONOPTIMIZE=2 to make CFFI work.
PYTHONOPTIMIZE=2 to make CFFI work.Copy .so libraries from {site-packages}/opt to jniLibs.
.so libraries from {site-packages}/opt to jniLibs.Remove --only-binary when packaging for desktop platforms
New packaging, not based on Kivy and with pre-built binary packages.
Added namespace definition to Android Gradle build.
namespace definition to Android Gradle build.runPython() method to support running Python script.
runPython() method to support running Python script.flet_example to catch program output and errors, sys.exit() support.package command to read dependencies from pyproject.toml.--exclude option for package command - to exclude directories and files from Python app package.
--exclude option for package command - to exclude directories and files from Python app package.package command.--verbose flag - verbose output.
--verbose flag - verbose output.--mobile flag - (removes .so) from app dest archive.--web flag for packaging for pyodide.--find-links option for installing pip dependencies from alternative sources (indexes).--dep-mappings for rewriting flet dependency to either flet-embed or flet-pyodide.--req-deps for adding required dependencies like flet-embed or flet-pyodide.--platform option for use with sitecustomize.py to tweak pip to pull platform-specific packages.Simplified Python initialization on Android.
* Python 3.11.6.
Bumping version after fixing pubspec.yaml.
Initial release of serious_python_linux package.
serious_python_linux package.Your coding agent can read these notes before it upgrades. Set up the MCP server →