Snapcraft Extensions

Snapcraft extensions enable snap developers to easily incorporate a set of common requirements into a snap.

A snap developer creating a GTK+ 3 application snap, for example, can use the gnome-3-28 extension to expose the GTK+ 3 libraries to a snap at build and runtime without the snap developer needing specific deep knowledge about GTK+ 3.

Extensions help:

  • avoid repetitive tasks in the snap building process
  • obviate the need for in-depth knowledge of the target software stack
  • create a standard template for common application requirements
  • reduce the testing and security burden, as they’re tested and updated independently

ⓘ For more details on the snap building process, see Creating a snap.

Using Extensions

All extensions are included with Snapcraft and can be listed with the following command:

$ snapcraft extensions
Extension name    Supported bases
----------------  -----------------
gnome-3-28        core18
kde-neon          core18
...

See Supported Extensions for the full list of extensions.

ⓘ Make sure to use the latest version of Snapcraft to see all available extensions. Install it from the Snap Store.

Further information about any specific extension can be obtained by typing snapcraft extension followed by the extension name:

$ snapcraft extension gnome-3-28
This extension eases creation of snaps that integrate with GNOME 3.28
...

Extensions modify the snapcraft.yaml definition before a build. You can use the expand-extensions command from your project’s root directory to see how the snapcraft.yaml file will look with the extensions applied.

$ snapcraft expand-extensions
name: foliate
...
layout:
  /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0:
    bind: $SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0
  /usr/share/xml/iso-codes:
    bind: $SNAP/gnome-platform/usr/share/xml/iso-codes
apps:
  foliate:
    command: usr/bin/com.github.johnfactotum.Foliate
    plugs:
    - gsettings
    - home
    - desktop
    - desktop-legacy
    - wayland
    - x11
    slots:
    - dbus-daemon
    common-id: com.github.johnfactotum.Foliate.desktop
    desktop: usr/share/applications/com.github.johnfactotum.Foliate.desktop
    command-chain:
    - snap/command-chain/desktop-launch
...

Supported Extensions

These extensions are available in the latest version of Snapcraft.

Extension name Description
gnome-3-28 This extension eases creation of snaps that integrate with GNOME and GTK 3.28
(Snapcraft 3.8+)
kde-neon This extension helps you snap desktop applications that use Qt5 and/or KDE Frameworks
(Snapcraft 3.9+)
2 Likes

@galgalesh thanks so much for this - this is great work which I’ll add to the top-level outline. We’ve currently got someone porting a number of the original Gnome packages to use the new Gnome extension, and they’re also (hopefully) making their own set of notes about the process which we’ll be able to incorporate here.

1 Like

@galgalesh Might want to update this page for what I hope is an edge case…
On Ubuntu Desktop 18.04, when I installed snapcraft with:
sudo apt install snapcraft

If I run “snapcraft extensions”, I get no extensions supported.

I later tried installing it as a snap… but got the same result.
sudo snap install snapcraft --classic

And there is nothing in this page that details how to install gnome extension if it’s not there.

I noticed it when I was following Java applications and ran Snapcraft in the git clone directory.

Hello! Welcome to the forum, and thanks for letting us know about this.

I think the 18.04 deb package for snapcraft is still 2.43.1+18.04, and doesn’t include extensions. But the snap version you installed should (at the time of writing) be snapcraft 3.8, which does.

Maybe there’s confusion in your path (did you apt remove the original snapcraft installation?). Try which snapcraft, it should output the following:

$ which snapcraft
/snap/bin/snapcraft
$ snapcraft version
snapcraft, version 3.8
$ snapcraft extensions
Extension name    Supported bases
----------------  -----------------
gnome-3-28        core18

By comparison, the older apt installed executable will be located as follows, and should be removed before installing the snap.

$ which snapcraft
/usr/bin/snapcraft
$ snapcraft version
snapcraft, version 2.43.1+18.4
$ snapcraft extensions
No extensions supported

Hope that helps.

Thank you for your help! Yes, very confusing. I had first tried the snap and was told I had to use “–classic” flag, which made it sound like the old version, so I went with apt install instead…

So now that I uninstalled both apt and snap, and reinstalled the snap, it was able to build freeplane-1… but I got an error "an error occurred when using ‘multipass’ to query the status of the instance: returned exit code 2: info failed: failed to obtain exit status for remote process “free -b | sed ‘id;3d’ | awk ‘(printf $3)’’: timeout”.

This all seems kind of beta experience so far… not a single tutorial involving snaps/ubuntu mir-kiosk has worked out of the box. I guess a lot is still in flux on these two projects?

Thanks for the feedback! I added a note about using the latest Snapcraft version and I included the required Snapcraft version in the table of extensions.

Ideally, the Snapcraft version from apt should warn you that you’re using an outdated version. @degville is something like this in the works?

Yes, I believe it is, but I’ll make sure with the snapcraft team (Christmas holidays may get in the way of a quick response).

1 Like