My experience with Linux Snaps

As I was getting closer to finishing my first Linux app, I needed a way to distribute the final app to other Linux users; so I started searching for ways to do that. I found multiple ways, such as using a .deb (which is a Debian flavored file type), Snap, Flatpak, and AppImage.

There was also the option to generate an executable using PyInstaller and then using a simple compression utility to tar up the executable and its dependencies. In other words, no installation would be required – the user would just untar a file, and then run the executable. I didn’t like this approach, however, because I found it awkward.

So I decided to research Snap, Flatpak, and AppImage. I actually didn’t have any particular preference for any of the 3 formats. I would have been happy with any of them. It was a while ago that I did the search, but I discovered more basic tutorials that steered me in the right direction with Snaps, than with Flatpak and AppImage.

My goal was to simply package my app, and distribute it. I didn’t want to spend tons of time packaging my app, because I wanted the app to get to my end-users quickly. The choice for me was based on how easy it was to package my app, and Snap seemed to fit that requirement.

So the choice seemed clear to me – I decided I was going to use Snap. It was easy to get started with basic tutorials, but it was not easy to finalize and fine-tune the final package. The tutorials were enough to get me started, but they lacked in-depth tutorials, so I constantly found myself asking in the Snapcraft forum, asking about various things related to Snaps. Fortunately, the forum was very helpful and I was able to package up OpenResizer as a Snap.

I really like the Snap format, because of its containerization and because it’s so easy to install/uninstall apps.

So now after packaging my first Snap, I can say that I’m happy I went with the Snap format. The Snap Store is useful and packaging apps with Snapcraft is also nice.

OpenResizer is available in the Snap Store, and my next project will probably end up becoming a Snap package as well.