Using Python for Mobile Development: Kivy vs BeeWare Mobile application development on Android and iOS wasn’t Python’s strong suit in the past—but things might be changing…

What about using Python for mobile app development? Historically, Python didn’t have a strong story when it came to writing mobile GUI applications. In fact, Android and iOS development was pretty much out of the question with pure Python alone. That’s a shame— Thankfully, there have been a number of developments in recent years that vastly improved the outlook on using Python for writing mobile apps. In this article we’ll take a look at a few modern options for mobile application development with Python. There are two frameworks I’d like to call out specifically: Kivy and the BeeWare project. If you prefer video, check out the embedded video below with a quick five minute walkthrough of both projects and the philosophies behind them:

Kivy – Cross-platform Python GUIs Kivy an open-source Python library for developing cross-platform GUI applications. It allows you to write pure-Python graphical applications that run on the main desktop platforms (Windows, Linux, and macOS) and on iOS & Android. Now, every time I hear about a new GUI toolkit I always want to know how “native” it feels—I believe that great GUI application should play to the strengths of the platform they run on. For example, when I’m using my iPhone I want consistency across the apps I use. It feels jarring to use an app that was designed with user interface patterns from another platform. Kivy comes with a custom-built UI toolkit that provides it’s own versions of buttons, text labels, text entry forms, and so on. This means these widgets are not rendered using the native platform UI controls. This has pros and cons: On the one hand this guarantees consistency and portability of your app from one platform to another. But on the other hand it also means that your Android app won’t really look and feel like an Android app… Depending on the kind of app you have in mind, this might not be a problem at all, however. For most games, for example, the “nativeness” of the UI isn’t very important. The same is true for certain kind of niche apps like graphical MIDI controllers for making music. But for other types of apps this has a huge impact on usability. So, if you can work with a non-native UI toolkit in your apps then Kivy is a great choice. It allows you to write mobile applications using your Python programming skills without having to learn another platform-specific language like Apple’s Swift. You can learn more about Kivy at https://kivy.org

The BeeWare Project – Native Python Mobile Apps The second Python GUI and mobile development framework I want to tell you about is called the “BeeWare” project. It offers you a set of tools and an abstraction layer you can use to write native-looking mobile and desktop applications using Python. The key difference between Kivy and BeeWare is that BeeWare programs use the native UI toolkit of the platform they run on, whereas Kivy apps use a custom UI toolkit that uses the same controls across all platforms. With BeeWare, the UI controls your app uses will be the buttons, check boxes, and form elements provided by the underlying operating system. This means you can build apps that look and feel 100% native to each specific mobile (and desktop) platform. Sounds great, right? The only downside is that the BeeWare project is still relatively new and currently under heavy development lead by Pythonista Russel Keith-Magee. As with any framework that hasn’t had a chance yet to mature for years this means more work for you as a developer due to (potentially frequent) API changes, bugs, and lack of features. Nevertheless, I’d encourage you to read up on BeeWare, it’s a really exciting project. You can learn more about it here: https://pybee.org/project/using/