It doesn't feel like it's been three months since our last roadmap update... but here we are, in April 2023. 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.
Our focus this quarter has been on testing; however as with our last report, our progress has not been as significant as we hoped it would be. Getting the first tests in place has proved to be much more complex than we anticipated. In order to test widgets at all, we've had to set up all the infrastructure that will be necessary to test every other widget, such as defining the probes to inspect colors and fonts, and to ensure that the GUI framework has finished applying changes before performing a test assertion. The process of building the first tests has exposed a number of problems deeply embedded in the core of Toga - problems that either aren't observable or are easily masked when you're writing an application as a user, but can't be avoided when you're writing a test suite that will run fast and needs to have repeatable behavior. We're also testing the limits of the features exposed by each platform - and everything we do needs to be repeated on 5 GUI toolkits with 5 completely different views of the world.
The good news is that as of the end of Q1, we're finally getting traction on the problem. We're about a quarter of the way through the widgets by count. Admittedly, we've been tackling the simpler widgets first - but the lessons learned (and bugs fixed) making those simple widgets work should make testing the more complex widgets easier. There's also some commonality in the more complex widgets - for example, TextInput, PasswordInput and NumberInput are all essentially the same widget, so once tests are built for one of them, the other 2 should fall out reasonably easily.
We have also been able to release Toga v0.3.0. This release was almost 5 years in the making.
Q1 saw some unexpected improvements to Briefcase. We've had persistent problems supporting AppImage and Flatpak as packaging formats; during Q1, we couldn't avoid these problems any longer, so we introduced a System packaging backend, and made this the new default for Linux apps. We're now able to produce native system packages for Briefcase apps, supporting almost every Debian, Red Hat or Arch derived distribution. These packages are already proving more stable: we had no major issues during a recent tutorial at Everything Open 2023, despite a wide variety of Linux distributions in the room - something that we've never been able to say about AppImage.
However, once again, that means there's a lot left on the Q1 TODO list. Toga documentation is being slowly updated as we audit each widget; however, we haven't made any changes to the example apps; we haven't been able to do any substantial Toga planning; and we haven't been able to add any native cross-platform hardware support.
Our short term goals are, therefore, largely unchanged from last quarter:
- Testing - Completing the Toga GUI testing suite will again be our primary focus for the quarter.
- Planning - Once we've got the test harness in place, we'll be in a much better position to evaluate what work remains to get to v1.0.
- Documentation - The process of systematically building a test suite also gives us an opportunity to update the API documentation for each widget as we go. There's still lots of documentation required on top of the API guide, but complete API documentation will be a big start.
- Cross-platform hardware - Cross-platform support for device hardware (especially mobile) is one of the banner features that makes mobile device support worthwhile. Providing proof that this hardware support is easy to use will be a key demonstrator for BeeWare as a platform.
Longer term goals
Our longer term goals are also largely unchanged. Upstreaming, Toga 1.0, and a forge for mobile packages are all important goals for the BeeWare ecosystem. However, we don't expect to make any significant progress on most of these goals until we have solidified Toga's testing story. We should, however, see at least the first signs of progress on upstreaming BeeWare's work on mobile as a result of PyCon US, where we'll have a chance to raise issues directly with the Python core team.
Providing a robust GUI testing framework for Toga has definitely proven to be a lot more complicated than we originally thought. The good news is that as of the end of Q1 2023, we're finally starting to make good progress on testing. We hope that by the time of our next status update, we're able to report that we're nearing the end of our testing journey, and we can turn our focus to other areas of interest.