2023 is halfway done, and BeeWare continues to make steady progress. 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.
As with Q1, our focus in Q2 was on Toga testing. This has been a mammoth project; but it's finally nearing completion. All but 2 widgets (Canvas and DetailedList) have 100% branch coverage on macOS, iOS and GTK, while Android and Windows are only 5 more widgets behind (ScrollContainer, SplitContainer, OptionContainer, Table and Tree). Along the way, we've identified and resolved lots of inconsistencies in widget APIs, and resolved countless bugs. We've also fully documented every widget, ported the test suite to Pytest, and added type annotations in the code (mostly for documentation purposes, rather than formal validation). We've also completed testing and coverage of a lot of the non-widget functionality that wasn’t strictly planned for this quarter - features like Images, Icons, Validators, application paths, and colors; plus a lot of tests (and bugfixes) in the core widget layout. We've also got the start of some tooling that can be used to test the Web backend.
Unfortunately, we haven't been able to do any substantial Toga planning. Once Toga's code is at 100% testing coverage, we'll be in a much better place to develop those plans. We also haven't been able to add any native cross-platform hardware support.
Our Q3 goals are:
- Finalize Toga's test suite. By the end of Q3, we should have 100% branch coverage on every line of Toga's core, and on the macOS, Windows, GTK, Android and iOS backends.
- iOS Binary packaging We've been made aware that Apple is rejecting Briefcase packaged iOS apps from the iOS App Store because of a package layout issue associated with binary modules. This is a very high priority to fix.
- Kotlin upgrades The upcoming Android Studio release is switching to Kotlin as its preferred language for new Gradle configuration files; we need to upgrade Chaquopy's tooling to support this.
- Add full support for Java inheritance In the process of building Toga's test suite, it's become clear that a number of features can only be implemented by subclassing Java base classes. Chaquopy's ability to subclass is currently limited; to unlock all the features of Android, we need to resolve this limitation.
Longer term goals
Our longer term goals are also largely unchanged. Toga 1.0 remains an important goal; once we're at 100% test coverage, we will be in much better place to provide estimates about Toga 1.0. Upstreaming is an area where we have some good news - as a result of discussions at Pycon US, we've received support for raising iOS and Android to the status of Tier 3 supported platforms in CPython, with the initial goal of having this in place for Python 3.13. You should expect to see movement on upstreaming towards the end of this year, and early next year. A forge for mobile packages is also remains an important goal; the completion of upstreaming work will make the goal of building a forge much more viable.
At the end of Q2 2023, Toga's testing journey is nearing completion... but there's still lots of work to be done. However, the groundwork that we've been doing over the last 6 months has put us in a very strong position to develop Toga and the rest of the BeeWare ecosystem going forward.