Supported plugins

The following plugins are currently supported by Snapcraft. See Snapcraft plugins for more details in how they’re used, and to create your own, see Writing local plugins.

ⓘ From Snapcraft 4.0 onwards, if the working directory contains a Snapcraft project, the default behaviour is to show only the plugins available for either its specified base or the latest available supported base (currently core22 ). See Base snaps for more details.

Programming languages

Go

Plugin name Description Base support
go integrates projects written in Go and using the go get package installer core24
core22
core20
core18
godeps integrates projects written in Go and using the godep dependency tool core18

Java

Plugin name Description Base support
ant Ant build system integration, commonly used by Java projects core24
core22
core20
core18
gradle integrate projects built using the Gradle build tool with your snaps core18
maven build system integration with Maven, commonly used by Java projects core24
core22
core18

Node.js/JavaScript

Plugin name Description Base support
gulp build parts from projects using the gulp.js streaming build system core18
npm create parts that use Node.js and/or the JavaScript package manager, npm core24
core22
core20
nodejs create parts that use Node.js and/or the JavaScript package manager, npm core18

Python

Plugin name Description Base support
conda used for parts incorporating the Conda open source package manager system core24
core22
core20
core18
python used for parts incorporating projects written with Python 2 or Python 3 core24
core22
core20
core18

Other languages

Plugin name Description Base support
crystal build parts from projects written in the Ruby-like Crystal language core20
core18
dotnet integrates with Microsoft’s .NET SDK to build core runtime parts core24
core22
core18
flutter easily build and deploy parts for the expressive Flutter UI toolkit core24
core22
core18
ruby built parts from projects written in Ruby and its Gemfile dependency bundler core18
rust build parts from projects written in Rust and using Cargo for dependency management core24
core22
core20
core18

Build tools

Plugin name Description Base support
autotools integrates projects that use the common Autotools suite with your snaps core24
core22
core20
core18
cmake integrates projects that use the common CMake build tool with your snaps core24
core22
core20
core18
make integrates projects using the commonly found make build system core24
core22
core20
core18
matter-sdk integrates projects that use the Matter SDK, commonly used for Matter applications core24
core22
meson integrate projects build using the Meson build system into your snap core24
core22
core20
core18
qmake integrates projects using the qmake build tool, commonly by Qt-based projects core22
core20
core18
scons integrates projects that use the SCons construction tool core24
core22
core18
waf integrate projects using the Waf build automation tool core18

Platforms

Linux kernel

Plugin name Description Base support
kbuild build parts that use the Linux kernel build system (kBuild) core18
kernel derived from the kbuild plugin and used to build your own kernel core18

Robot Operating System (ROS)

Plugin name Description Base support
ament uses ament_cmake to build parts for version 2 of the Robot Operating System (ROS 2) core18
catkin build catkin-based parts, typically used with version 1 of the Robot Operating System (ROS 1) core20
core18
catkin-tools alternative method for building projects using version 1 of the Robot Operating System (ROS 1) core20
core18
colcon build colcon-based parts, typically used with version 2 of the Robot Operating System (ROS 2) core22
core20
core18

Tools

Plugin name Description Base support
dump simply dumps the contents from the specified source core24
core22
core20
core18
nil useful for parts with no source to import core24
core22
core20
core18
plainbox-provider create parts containing a Plainbox test collection known as a provider core18
1 Like

Hello,

Is it possible to add the links to the examples for each plugin in their respective section on this document?

Thanks

Yes, good idea - I’ll add them to the plugin specific pages. These are also going to link back to the snapcraft.yaml syntax doc that will go up first.

The jdk plugin has been removed, https://github.com/snapcore/snapcraft/pull/2376, but it is still mentioned in the docs as a supported plugin.

I spent quite some time trying to figure why I couldn’t get it to work. Why was it removed and what should one use instead?

1 Like

Sorry about this being out-of-date, and thanks for bringing it to our attention. I’ll remove the references and check with the snapcraft team about what’s best to use in its absence.

Currently, with Snapcraft 7 and Core22, if I run “snapcraft plugins” inside a project directory that selects a base of core 22, the output claims core22 plugins, but the list is merely what you would get for core20:

# snapcraft plugins
Displaying plugins available for 'core22'
autotools  catkin-tools  colcon  crystal  go    meson  npm     qmake
catkin     cmake         conda   dump     make  nil    python  rust
#

At what point will this command actually recognize core22 as a valid plugin base?

# snapcraft plugins --base core22
Usage: snapcraft plugins [OPTIONS]
Try 'snapcraft plugins -h' for help.

Error: Invalid value for '--base': 'core22' is not one of 'core18', 'core20'.

Might need to update this list for core22 plugins – running “snapcraft plugins --base=core22” shows that at least ant and flutter have core22 plugins.

Very good point, thank you. I’ve now audited and updated both for core20 and core22.

I want to suggest this entire page should be redone, but I’m not sure how yet. One bit of confusion is that if you open the “Plugins” tab, you get a small number (5) of subpages, but over on the main page, there are clearly way more than five plugins, so the reader is going to wonder why those five plugins are so special that they get their own sub-tab as opposed to all of the plugins on the page itself.

I suggest defining “Plugins” with three subtabs, “core18”, core20" and “core22” for a couple reasons. First, someone working on a snap will have chosen a base snap, so they won’t care about all of the other information in that table – they’ll want to know only about the plugins for their choice of base.

On a more selfish note, as the new version of SC101 will restrict itself to core22, I’d like to be able to provide a link that takes the student to just those plugins, and not have to dig their way through links to other bases.

Finally, I would simplify that page by simply deleting all the “DESCRIPTION” stuff – any explanation of what a plugin does can be on that plugin’s page itself.

Thanks for the suggestion, and I think splitting the plugin navigation into per-core is a really good idea. I’ll create a task to do this. I’m not sure about dropping the description column - I think it can help with orientation when a plugin name isn’t descriptive enough but I’ll see what it looks like.

I was on the fence with dropping the description, but I think it can be reduced to just a few words to keep it on a single line.

1 Like

There is now a core22 kernel plugin, which I suspect bears little resemblance to the core18 plugin by the same name.

Snapcraft now supports a core22 kernel plugin, https://github.com/snapcore/snapcraft/blob/main/snapcraft/parts/plugins/kernel_plugin.py. I’m not sure if there’s any value in that core18 plugin at this point.

Thanks - I had made a note of this not being documented (internally). I’ll let @dboddie know.