2025Q1 Roadmap
Progress in Q4 was slower than anticipated, but there have been some notable success in achieving BeeWare's overall project goals. As always, this roadmap should be read as a guide to what we aim to focus on over the coming quarter, rather than a hard commitment of features that will be made available on a specific deadline.
Q4 progress¶
Our goal for Q4 was to have at least one third-party package producing Android and iOS packages as part of their release process. We were unable to achieve this goal, for four reasons.
Firstly, we underestimated the chain of downstream dependencies that needed to
be addressed before it would be possible to submit mobile packaging PRs to
upstream projects. We correctly identified pip and cibuildwheel as two
projects that would need to be updated; however, we didn't anticipate that those
projects would themselves have upstream dependencies and issues that would
require patching. The process of coming up to speed with the development tooling
of multiple upstream projects, navigating the review processes of each of those
projects, and sequencing changes over multiple projects so they are easier to
merge has taken much longer than we anticipated.
Secondly, we underestimated how much work would be needed on the target projects themselves to make them ready for mobile support. We picked Pillow as one of our target projects because of its complex chain of binary dependencies. However we soon discovered that the way those binary dependencies were compiled for macOS required significant alteration before working on an iOS patch would be possible.
Third, the release of Xcode 16 included an unexpected surprise - it broke the mechanism we were using to gather results from test suites running on the iOS simulator. This required a significant change in CPython; however, as a result, we now have a much better mechanism for collecting test results, and the test harness the CPython uses to run its own tests can now be used to run test suites for any other Python project.
Lastly, we were presented with an opportunity to work closely with the PyScript team on web support, to the benefit of both projects. This redirected some of the resources that we originally anticipated would be used for Android binary packaging. However, it does mean that some significant improvements to Toga's web backend have been made, with more on the horizon in the new year.
Despite these challenges, we have made significant progress. pip now includes
full support for iOS wheel tags. The patch adding a major feature to
cibuildwheel that is a pre-requisite for iOS support has been accepted; we've
been told this patch should be merged within days. We've submitted changes to
Pillow that allow macOS builds to be completely isolated from Homebrew, and the
patches required to support cross-platform builds of Pillow's binary
dependencies have been merged. This leaves 2 patches that need to be merged - a
patch to cibuildwheel adding support for building on iOS; and the patch to
Pillow adding an iOS build configuration. These patches have been prepared, and
are mostly ready for submission upstream; using these patches, it is possible to
fully build and test Pillow wheels for iOS with cibuildwheel.
Q1 priorities¶
In Q1, we will continue to work on binary packaging for mobile platforms. We
will continue to work on landing the patches to cibuildwheel and Pillow for
iOS support; once that work has concluded, we hope to start making the analogous
changes required to support Android.
Q1 will also see the continuation of our collaboration with PyScript. The major focus for BeeWare in this work will be Toga's Web backend - and in particular, Toga's testing infrastructure. We're not currently able to run Toga's testbed project on the web backend (or the Textual backend, for that matter). We have some ideas for how this could be addressed; these ideas may not be fully realized by the end of Q1, but we hope to at least have a concrete plan, and maybe even a prototype in place.
Lastly, with the CPython 3.14 development process well underway, there are two projects that we intend to work on, with the goal of having this work incorporated into Python 3.14. The first is the creation of official "embedded" distributions of CPython for more platforms. Python already produces an embedded build for Windows, and Briefcase is able to use this distribution as part of the process of creating Windows binaries. We hope that Python 3.14 will contain analogous builds for macOS, iOS and Android, removing the need for BeeWare (and other projects) to maintain independent CPython builds. We've had some initial discussions with the CPython release team; we hope that by the end of the quarter, we'll have a plan for how to deliver this work.
The second CPython feature we'd like to address is handling of cross-platform
virtual environments - that is, creating a virtual environment that can
"pretend" it is running on a different host platform. This is necessary for
cross-platform builds, which require the ability to create an isolated PEP 517
build environment that can run Python on the local machine, but report
platform-identifying information as if it were running on the target machine. A
version of this cross-environment virtualization has been necessary to support
cibuildwheel; however, it would be desirable to upstream this work so that it
can be standardized as part of a stock Python environment. We hope to start
discussions about this with the CPython core team in the near future.
Longer term goals¶
Once we've got a strong story for packaging third-party packages for iOS and Android, we'll be able to turn our focus back to Toga, and the work needed to make iOS and Android compelling app development platforms. There's a number of navigation and data organization widgets that need to be developed; we also need to improve documentation of some common development patterns that are sources of common questions in BeeWare support channels.
We'll should also be in a position to start working on the long list of projects
in the Python ecosystem that would benefit from having iOS and Android support
upstream. cryptography, numpy and pandas will be the highest priority for
this work, but there's a very long tail of useful projects that have binary
modules; ideally they'd all have iOS and Android support.