Thanks to automatic updates, the tools that make up the snap ecosystem are constantly upgrading and evolving in the background, and this can make it difficult to track changes and new features as they appear.
Below, we outline some of the more significant recent changes to these snap-related tools and their associated documentation:
- Snap daemon: snapd, the core of the snap ecosystem, responsible for the day-to-day running, installation, management and removal or your snaps
- Snapcraft: the command line tool that easily builds snaps from a huge range of sources
- Documentation: where you’ll find everything from quickstart guides to in-depth technical specifications
The current stable version of snapd is 2.49 (released 4th March 2021).
The snap-based Ubuntu Core 20 (UC20) operating system reached its milestone 1.0 release in February 2021, and recent snapd development have improved its encryption preferences, enabled devmode snaps when using
--dangerous and added support for the Little Kernel (LK) bootloader.
To stop downloads blocking updates, snapd 2.49 now monitors download speeds and can cleanly abandon slow downloads, and the snap try command now works within LXD containers.
Additional recent new features include better XDG desktop portal support, improvements to the CUPS interfaces, and our initial support for disk space awareness. For devices, there’s a new
snap reboot command to help a system boot into a recovery mode, and there’s now an option to disable
console-conf when initialising an Ubuntu Core device.
There’s also a variety of new interfaces, including system-packages-doc to help read system documentation, the uinput interface to access user devices from
/dev/uinput, and the system-source-code interface to allow snaps access to the host’s kernel config, source code and headers.
Another new feature, an experimental gdbserver option, can help when a snap is crashing or not behaving as expected.
$ snap run --experimental-gdbserver test-snapd-tools-core18.echo "hello gdb"
The above compliments the
snap run --gdb option that can already be used to debug executables running within a snap environment. For more information, see gdbserver option.
A lot of recent work in snapd has been to integrate and support
core20, a new base for snap deployment and development. It’s built on the most recent Ubuntu 20.04 LTS (Focal Fossa) release, and brings with it many of the same advantages.
This work has also been integral to the creation of Ubuntu Core 20, the next generation of Ubuntu-built-from-snaps. Ubuntu Core 20 features full disk encryption via TPM, a recovery mode and recovery chooser, along with enhanced Raspberry Pi support. See Ubuntu Core 20 for more details.
For more details on what’s planned for each snapd release, see the snapd roadmap.
The current stable version of Snapcraft is 4.5.4 (released 5th March 2021).
Many plugins and extensions have been updated to work with the
core20 base during the 4.5.x release cycling, including of snapcraft. There’s a new gnome-3-38 extension, and ports of the qmake and python plugins to version 2 of the plugin specification. Non-Linux sources now include bzr, hg and svn repositories, and files with 7z and zip compression.
The Snapcraft 4.x update overhauled the plugin system to version 2, which included lots of work to re-engineer older plugins to with the
core20, and a new
package-repositories schema to add additional repositories and components.
Snapcraft 4 also promoted the
--use-lxd option to stable, allowing you to build snaps within an LXD container for faster and less-resource heavy builds.
See Snapcraft release notes for a more detailed look at recent Snapcraft releases.
The latest updates to our documentation include pages Debuging snaps with snap try, Progressive releases, which enable you to deploy your snap in phases, and Package repositories to add extra package sources to your snap build.
We’ve also made some tentative first steps to produce a troubleshooting page to help users identify the most common issues and hopefully their solutions. And with the recent additions of Flutter and ROS (1 and 2) extensions, the list of Snapcraft extensions has grown enough to warrant a separate page, which we’ve called Supported extensions.
For snap developers, we’ve added a guide to help build Flutter applications, a page to describe the differences between Public, Private and Unlisted snaps, the technical details behind our Security policy and sandboxing, and some guidance for Debugging snaps. The latter has been expanded to include details on using the excellent (and snap embedded) gdb and gdbserver.
We’ve also added an example implementation and, some real-world example scripts, to the Add snap configuration documentation. This hopefully makes adding configurable options to your own snaps easier.
Most of this documentation can be collaboratively discussed and changed on the respective topic in the doc category of the Snapcraft forum. See the documentation guidelines if you’d like to contribute.