Kivy Blows Chode

And It Does So with Its Teeth

Have you ever slaved away for half a day in a hot kitchen to prepare a delicious meal for a dinner party, set the table perfectly, waited for your guests' arrivals, and then, when the drinks have been poured and everyone's mouths are watering, tripped and had the platter crash and shatter on the floor? That's what building an app in Python with Kivy is like -- a great dish in the kitchen converted into an inedible mess on the floor.

This is what packaging Kivy apps is like.

But, Kivy lets you program multiplatform apps in Python!

Ah, yes, the elevator pitch of Kivy: "Don't build your app in Java, C++, and ObjectiveC! Instead, use Kivy to build your app in one intuitive language and in one 'intuitive' framework. Then, package it for all of the major platforms!" Oh, yeah, just a few other things if you actually want to do that last thing:
  • Get fucking ready to run virtual machines on multiple operating systems because Kivy's packaging processes (plural) don't use a single interface for completed apps, unlike every other multiplatform framework in common use today.
  • Also, I hope you wax your carrot to the fantasy of following labyrinthine instructions to turn a simple 5MB app into a 600MB shit pile of .DLL dependencies, Cython code, and a single .EXE that can't run outside of the folder holding them all.
  • That is, of course, if you even get that far and one of the hundreds of packaging errors, with no central documentation to help you resolve them, doesn't slam your boner into a car door first!
  • Let's not even broach the topic of having no in-built ability to compress your Kivy app's Windows build into a single executable, thus giving anyone who unpacks your .MSI access to all of your source code and media files.
  • Finally, want to sign that .APK, perchance? Well, that'll require a ticket to our half-hour donkey show, featuring Buildozer burro as he attempts to ram his provided Keystore into your virgin app.

Aw, you just need to find some help, is all.

Oh, yeah? Where? Kivy's official Discord, Reddit, GitHub, and LinkedIn have hardly any active users in any one of them, and they're all run by the same handful of programmers, none of whom are available to walk me or anyone else through this unbearable process that they've cobbled together.

Even when I'm willing to pay hundreds of dollars to get my most recent app packaged reliably for two platforms, no one has stepped up because, apparently, this framework has the pro dev appeal of a hospital fire.

What's even worse is getting burned twice by this shit show! I've now got two fully functional Kivy apps that only run from the console of a Python IME. The first one I totally redid in Cordova/PhoneGap; and, while it's nothing spectacular, at least packaging it for separate platforms and updating it aren't a fucking nightmare. That I so naïvely returned to this framework over a year later, thinking, "Surely, they've un-shit this packaging process by now!" only to disappoint myself. It's miraculously gotten shittier.

If it's so terrible, why did you use Kivy, at all?

Because Kivy's not terrible during the development phase. There's a learning curve, and the Kivy markup language should be avoided like the plague. However, when the coding's done, the Python programs which use Kivy's framework will run. Unfortunately, that's what also makes it suck so much chode. Kivy teases a fully functioning app, GUI and all. Then, right at the moment of delivery, all of that hard work amounts to nothing. It's a big middle finger to all of the labor that goes into apps' creation.

This isn't exactly unique to Kivy, though. Pygame, BeeWare, TKinter, SDL2, and all the rest are evidently awful for multiplatform app development. Many are touted as "proofs of concept" for multiplatform apps until the time comes to port the damned things. At that point, nothing "just works," and everything "just sucks," which ought to prove that the concept is a failure. Python's 30 years old (as of this writing), yet it has yielded zero Pythonic means of distributing packaged programs across platforms, which is why we'd opt to code multiplatform apps in Python in the first place! JavaScript syntax is fuck-ugly and many of its conventions amount to a turd sandwich, but at least React Native, Ionic, PhoneGap, and the lot don't disappoint at the moment of truth.

I don't build apps to get edged, Kivy. I build apps to reach completion. Your project has been around since 20-fucking-11! If it's not up to snuff by now, then snuff it.