Snap documentation

Snaps are Linux app packages for desktop, cloud and IoT that are self-contained, simple to install, secure, cross-platform, and dependency-free.

They update automatically and typically run within a confined and transaction-based environment. Security and robustness are their key features, alongside being easy to install, easy to maintain and easy to upgrade.

Snaps help desktop users effortlessly install and run apps like Spotify or Slack. They help sysadmins run servers like NextCloud, developers to package and distribute their work to the global Snap Store, and they help everyone build and deploy IoT devices running Ubuntu Core.

From Linux and maker space tinkerers, to the robotics, automotive and signage industries; from your desktop to a deployment of thousands, snap can handle it.

Creating your own snap?

Take a look at our Snapcraft build-tool documentation.

In this documentation

Tutorials
Get started - a hands-on introduction to using snap packages for new users
How-to guides
Step-by-step guides covering key operations and common tasks
Reference
Technical information - specifications, APIs, architecture
Explanation
Concepts - discussion and clarification of key topics

Project and community

Snap and Snapcraft are members of the Ubuntu family. They’re both open source projects that welcome community involvement, contributions, suggestions, fixes and constructive feedback.

Thinking about using snap for your next project? Get in touch!

Navigation

Navigation
Level Path Navlink
0 Snap documentation
0 what-is-new What’s new
0 Using snaps
1 snap-tutorials Snap tutorials
2 quickstart-tour Quickstart tour
2 installing-snapd Install the daemon
3 installing-snap-on-almalinux AlmaLinux OS
3 installing-snap-on-arch-linux Arch Linux
3 installing-snap-on-debian Debian
3 installing-snap-on-elementary-os Elementary OS
3 installing-snap-on-fedora Fedora
3 installing-snap-on-linux-mint Linux Mint
3 installing-snap-on-manjaro-linux Manjaro Linux
3 installing-snap-on-raspberrypi Raspberry Pi OS
3 installing-snap-on-opensuse openSUSE
3 installing-snap-on-pop Pop!_OS
3 installing-snap-on-rocky Rocky Linux
3 installing-snap-on-ubuntu Ubuntu
1 snap-howto Snap how-to guides
2 Work with snaps
3 managing-updates Manage updates
3 interface-management Connect interfaces
3 configuration-in-snaps Configure snaps
3 commands-and-aliases Apps and aliases
2 Manage snaps
3 snapshots Create data snapshots
3 quota-groups Use resource quotas
3 set-system-options Set system options
3 service-management Control services
3 validation-sets Validation sets
3 using-the-api Use the REST API
2 fix-common-issues Fix common issues
2 snapd-testing Test snapd fixes
1 snap-reference Snap reference
2 glossary Glossary
2 distro-support Distribution support
2 system-options System options
2 environment-variables Environment variables
2 network-requirements Network requirements
2 supported-interfaces Interfaces
3 hardware-interfaces Hardware interfaces
3 media-interfaces Media interfaces
3 network-interfaces Network interfaces
3 security-interfaces Security interfaces
3 system-interfaces System interfaces
3 super-privileged-interfaces Super-privileged interfaces
2 REST API
3 snapd-rest-api snapd REST API
3 snapd-error-codes Error responses
2 YAML schemas
3 the-snap-format The snap format
3 the-gadget-snap The gadget snap
3 the-kernel-snap The kernel snap
1 snap-explanation Snap explanation
2 channels Channels and tracks
2 interfaces Interfaces
2 revisions Revisions
2 refresh-awareness Refresh awareness
2 transactional-updates Transactional updates
2 assertions Assertions
2 snap-confinement Snap confinement
2 auto-connection-mechanism Interface auto-connection
2 interface-hooks Interface hooks
2 security-policy-and-sandboxing Sandbox security policy
2 snap-performance Snap performance
2 snapd-release-process Snapd release process
0 snapcraft Snapcraft build-tool
1 snapcraft-tutorials Snapcraft tutorials
2 create-a-new-snap Create a new snap
2 creating-a-snap Platform quickstarts
3 python-apps Python
3 go-applications Golang
3 c-c-applications C/C++
3 gtk4-applications GTK+4
3 qt5-kde-applications Qt5 and KDE Frameworks
3 flutter-applications Flutter
3 creating-a-snap Other platforms
1 snapcraft-howto Snapcraft how-to guides
2 snapcraft-overview Snapcraft overview
2 snapcraft-quickstart Quickstart
3 snapcraft-setup Installation and setup
3 how-snapcraft-builds How snapcraft builds a snap
3 snapcraft-basic-example Basic snapcraft.yaml example
3 snapcraft-intermediate-example Intermediate snapcraft.yaml example
3 snapcraft-build-example Build and publishing example
2 Create a snap
3 snapcraft-checklist Build a checklist
3 creating-snapcraft-yaml Start snapcraft.yaml
3 adding-global-metadata Add global metadata
3 adding-parts Build apps with parts
3 snapcraft-extensions Use extensions
3 build-and-staging-dependencies Add dependencies
3 architectures Define architectures
3 defining-a-command Define a command
3 services-and-daemons Define a service
3 snapcraft-interfaces Add interfaces
3 adding-snap-configuration Add configuration options
3 using-external-metadata Use external metadata
3 snap-layouts Map files with layouts
3 desktop-menu-support Add desktop menu support
3 remote-build Build snaps remotely
3 linters-classic Linting classic snaps
3 linters-library Linting libraries
3 iterating-over-a-build Iterate over a build
3 using-craftctl Using craftctl
3 how-to-classic Classic confinement
2 Publish a snap
3 releasing-your-app Upload your snap
3 using-the-snap-store Access the Snap Store
3 store-listing-and-branding Create a Store listing
3 publish-to-a-branch Publish to a branch
3 progressive-releases Progressive releases
3 release-management Manage releases
3 snapcraft-authentication Snapcraft authentication
3 snap-store-metrics View usage metrics
3 snap-epochs Control data with epochs
3 build-private-repository Build from a private repository
3 build-private-repository-workflow GitHub workflow from a private repository
3 debugging-snaps Debug snaps
3 using-gdb-gdbserver Use gdb and gdbserver
2 robotics Robotics
3 ros-applications ROS quickstart
3 ros2-applications ROS2 quickstart
3 ros-with-github-actions Build with GitHub Actions
3 ros2-shared-memory-in-snaps Access shared memory
3 ros-distributions-with-no-extensions ROS with no extensions
3 cross-compile-an-autotools-project Cross-compile an autotools project
1 snapcraft-reference Snapcraft reference
2 snapcraft-schema Snapcraft.yaml
3 snapcraft-top-level-metadata Top-level metadata
3 snapcraft-app-and-service-metadata App and service metadata
3 snapcraft-parts-metadata Parts metadata
3 snapcraft-yaml-reference snapcraft.yaml reference
2 supported-plugins Supported plugins
3 core22
4 dotnet-plugin .NET/dotnet
4 ant-plugin Ant
4 autotools-plugin Autotools
4 cmake-plugin CMake
4 colcon-plugin Colcon
4 conda-plugin Conda
4 crystal-plugin Crystal
4 dump-plugin Dump
4 flutter-plugin Flutter
4 go-plugin Golang
4 make-plugin Make
4 maven-plugin Maven
4 meson-plugin Meson
4 nil-plugin Nil
4 npm-plugin NPM
4 python-plugin Python
4 rust-plugin Rust
4 scons-plugin Scons
3 core20
4 ant-plugin#heading–core20 Ant
4 autotools-plugin#heading–core20 Autotools
4 catkin-tools-plugin Catkin tools
4 catkin-plugin Catkin plugin
4 cmake-plugin#heading–core20 CMake
4 colcon-plugin#heading–core20 Colcon
4 conda-plugin#heading–core20 Conda
4 crystal-plugin#heading–core20 Crystal
4 dump-plugin#heading–core20 Dump
4 go-plugin#heading–core20 Golang
4 npm-plugin#heading–core20 NPM
4 meson-plugin#heading–core20 Meson
4 nil-plugin#heading–core20 Nil
4 python-plugin#heading–core20 Python
4 qmake-plugin Qmake
4 rust-plugin#heading–core20 Rust
3 core18
4 .NET/dotnet
4 ant-plugin#heading–core18 Ant
4 ament-plugin#heading–core18 Ament
4 autotools-plugin#heading–core18 Autotools
4 catkin-tools-plugin Catkin tools
4 catkin-plugin Catkin plugin
4 cmake-plugin#heading–core18 CMake
4 conda-plugin#heading–core18 Conda
4 crystal-plugin#heading–core18 Crystal
4 flutter-plugin#heading–core18 Flutter
4 go-plugin#heading–core20 Golang
4 godeps-plugin Godeps
4 gradle-plugin Gradle
4 gulp-plugin Gulp
4 kbuild-plugin KBuild
4 kernel-plugin Kernel
4 make-plugin#heading–core18 Make
4 maven-plugin#heading–core18 Maven
4 meson-plugin#heading–core18 Meson
4 nodejs-plugin Node.js
4 ruby-plugin Ruby
4 rust-plugin#heading–core18 Rust
4 python-plugin#heading–core18 Python
4 qmake-plugin#heading–core18 Qmake
4 scons-plugin#heading–core18 Scons
4 waf-plugin WAF
2 supported-extensions Extensions
3 kde-neon Qt5 and KDE Frameworks
3 flutter-extension Flutter
3 ros-noetic ROS 1 Noetic
3 ros-noetic-content-extension ROS 1 Noetic Content Sharing
3 ros2-foxy-extension ROS2 Foxy
3 ros2-foxy-content-extension ROS2 Foxy Content Sharing
3 ros2-humble-extension ROS2 Humble
3 ros2-humble-content-extension ROS2 Humble Content Sharing
3 gnome-extension GNOME
2 parts-environment-variables Environment variables
2 snapcraft-package-repositories Package repositories
2 reference-architectures Architectures
2 build-options Build options
2 build-providers Build providers
2 linters Snapcraft linters
2 classic-confinement Classic confinement
2 snapcraft-release-notes Release notes
1 snapcraft-explanation Snapcraft explanation
2 parts-lifecycle Parts lifecycle
2 explanation-architectures Architectures
2 troubleshoot-snap-building Troubleshoot snap building
2 migrating-between-bases Migrating between bases
2 supported-snap-hooks Hooks
2 using-snapctl Using snapctl
2 Robotics
3 ros-troubleshooting ROS troubleshooting
3 ros-architectures-with-snaps ROS architectures
0 contribute-to-docs Contribute to our docs
snap-refresh-observe-interface The snap-refresh-observe interface
microovn-interface The microovn interface
nvidia-drivers-support-interface The nvidia-drivers-support interface
userns-interface The userns interface
pcscd-interface The pcscd interface
polkit-agent-interface The polkit-agent interface
docker-to-snap https://ubuntu.com/robotics/docs/migrate-from-docker-to-snap
hardware-io-interfaces Hardware interfaces
dotnet-apps .NET apps
deprecation-notices Deprecation notices
pwm-control-interface The pwm-control interface
release-notes-snapcraft-7-2 Release notes: Snapcraft 7.2.0
release-notes-snapcraft-7-3 Release notes: Snapcraft 7.3
posix-mq-interface The posix-mq interface
steam-support-interface The steam-support interface
acrn-interface The acrn interface
custom-device-interface The custom-device interface
release-notes-snapcraft-7-0 Release notes: Snapcraft 7
release-notes-snapcraft-6-1 Release notes: Snapcraft 6.1
ros-troubleshooting ROS Troubleshooting FAQ
mount-control-interface The mount-control interface
list-and-table-presentation-ideas List and table presentation ideas
scsi-generic-interface The scsi-generic interface
polkit-interface The polkit interface
shared-memory-interface The shared-memory interface
kernel-module-load-interface The kernel-module-load interface
release-notes-snapcraft-6-0 Release notes: Snapcraft 6.0
snapcraft-offline Snapcraft offline mode
vcio-interface The vcio interface
snap-themes-control-interface The snap-themes-control interface
tee-interface The tee interface
snap-refresh-control-interface The snap-refresh-control interface
qualcomm-ipc-router-interface The qualcomm-ipc-router interface
ptp-interface The ptp interface
media-control-interface The media-control interface
microstack-support-interface The microstack-support interface
power-control-interface The power-control interface
kernel-crypto-api-interface The kernel-crypto-api interface
ion-memory-interface The ion-memory-control interface
hugepages-control-interface The hugepages-control interface
gconf-interface The gconf interface
fpga-interface The fpga interface
dm-crypt-interface The dm-crypt interface
cups-interface The cups interface
allegro-vcu-interface The allegro-vcu interface
calendar-service-interface The calendar-service interface
install-modes Snap install modes
build-from-github Build from GitHub
pwm-interface The pwm interface
release-notes-snapcraft-5-0 Release notes: Snapcraft 5.0
snapcraft-metrics Snapcraft metrics
desktop-launch-interface https://forum.snapcraft.io/t/the-desktop-launch-interface/25495
raw-input-interface https://forum.snapcraft.io/t/the-raw-input-interface/25493/2
dsp-interface https://forum.snapcraft.io/t/the-dsp-interface/25491/2
sd-control-interface https://forum.snapcraft.io/t/the-sd-control-interface/25489
netlink-driver-interface https://forum.snapcraft.io/t/the-netlink-driver-interface/25485
release-notes-snapcraft-4-8 https://forum.snapcraft.io/t/release-notes-snapcraft-4-8/24944
data-locations https://forum.snapcraft.io/t/data-locations/24905
uc20-fde-hooks https://forum.snapcraft.io/t/uc20-full-disk-encryption-hook-interface/24439
uc20-custom-kernel-options https://forum.snapcraft.io/t/customising-uc20-kernel-command-line-arguments/24370
snapcraft-esm https://forum.snapcraft.io/t/snapcraft-and-extended-security-maintenance/24297
deprecation-notices/dn13 https://forum.snapcraft.io/t/deprecation-notice-13/23774
release-notes-snapcraft-4-7 https://forum.snapcraft.io/t/release-notes-snapcraft-4-7/24252
release-notes-snapcraft-4-6 https://forum.snapcraft.io/t/release-notes-snapcraft-4-6/24083
validation-sets https://forum.snapcraft.io/t/validation-sets/23801
release-notes-snapcraft-4-5-4 https://forum.snapcraft.io/t/release-notes-snapcraft-4-5-4/23145
release-notes-snapcraft-4-5-3 https://forum.snapcraft.io/t/release-notes-snapcraft-4-5-3/23143
release-notes-snapcraft-4-5-2 https://forum.snapcraft.io/t/release-notes-snapcraft-4-5-2/23142
snap-try https://forum.snapcraft.io/t/debug-snaps-with-snap-try/22938
gnome-3-38-extension https://forum.snapcraft.io/t/the-gnome-3-38-extension/22923
release-notes-snapcraft-4-5-1 https://forum.snapcraft.io/t/release-notes-snapcraft-4-5-1/22788
release-notes-snapcraft-4-5 https://forum.snapcraft.io/t/release-notes-snapcraft-4-5/22786
release-notes-snapcraft-4-4 https://forum.snapcraft.io/t/release-notes-snapcraft-4-4/20810
installing-snapcraft https://forum.snapcraft.io/t/installing-snapcraft/20334
the-uinput-interface https://forum.snapcraft.io/t/the-uinput-interface/20116
the-system-source-code-interface https://forum.snapcraft.io/t/the-system-source-code-interface/20115
release-notes-snapcraft-4-3 https://forum.snapcraft.io/t/release-notes-snapcraft-4-3/20017
disk-space-awareness https://forum.snapcraft.io/t/disk-space-awareness/20007
xdg-desktop-portals https://forum.snapcraft.io/t/xdg-desktop-portals/17331
public-private-unlisted-snaps https://forum.snapcraft.io/t/public-private-and-unlisted-snaps/19744
release-notes-snapcraft-4-2 https://forum.snapcraft.io/t/release-notes-snapcraft-4-2/19644
desktop-snap-size-reduction https://forum.snapcraft.io/t/reducing-the-size-of-desktop-snaps/17280
games-interfaces https://forum.snapcraft.io/t/games-interfaces/13125
home-outside-home https://forum.snapcraft.io/t/home-directories-outside-of-home/19224
snapcraft-hook-support https://forum.snapcraft.io/t/snapcraft-hook-support/19069
the-system-backup-interface https://forum.snapcraft.io/t/the-system-backup-interface/14348
the-screencast-legacy-interface https://forum.snapcraft.io/t/the-screencast-legacy-interface/13097
the-network-manager-observe-interface https://forum.snapcraft.io/t/the-network-manager-observe-interface/13096
the-multipass-support-interface https://forum.snapcraft.io/t/the-multipass-support-interface/13095
the-login-session-control-interface https://forum.snapcraft.io/t/the-login-session-control-interface/13094
the-contacts-service-interface https://forum.snapcraft.io/t/the-contacts-service-interface/13092
the-cifs-mount-interface https://forum.snapcraft.io/t/the-cifs-mount-interface/13091
build-on-macos https://forum.snapcraft.io/t/building-the-snap-on-mac/6751
build-on-windows https://forum.snapcraft.io/t/building-the-snap-on-windows/6829
gnome-3-34-extension https://forum.snapcraft.io/t/the-gnome-3-34-extension/18485
deprecation-notices/dn11 https://forum.snapcraft.io/t/deprecation-notice-11/18046
deprecation-notices/dn12 https://forum.snapcraft.io/t/deprecation-notice-12/18047
the-system-package-doc-interface https://forum.snapcraft.io/t/the-system-packages-doc-interface/17788
release-notes-snapcraft-4-0 https://forum.snapcraft.io/t/release-notes-snapcraft-4-0/17515
release-notes-snapcraft-4-1 https://forum.snapcraft.io/t/release-notes-snapcraft-4-1/18769
release-notes-snapcraft-4-1-1 https://forum.snapcraft.io/t/release-notes-snapcraft-4-1-1/19011
timer-string-format https://forum.snapcraft.io/t/timer-string-format/6562
the-jack1-interface https://forum.snapcraft.io/t/the-jack1-interface/13093
store-brand-accounts https://forum.snapcraft.io/t/creating-snap-store-brand-accounts/6271
snapcraft-docker-images https://forum.snapcraft.io/t/creating-docker-images-for-snapcraft/11739
upgrading-snapcraft https://forum.snapcraft.io/t/upgrading-snapcraft/11658
desktop-legacy-qt https://forum.snapcraft.io/t/desktop-app-support-qt-for-snaps-without-bases/11702
desktop-qt4 https://forum.snapcraft.io/t/desktop-app-support-qt4/11711
desktop-qt5 https://forum.snapcraft.io/t/desktop-app-support-qt5/11703
release-notes-snapcraft-3-10 https://forum.snapcraft.io/t/release-notes-snapcraft-3-10/15773
gtk2-applications https://forum.snapcraft.io/t/gtk2-applications/13508
pre-built-apps https://forum.snapcraft.io/t/pre-built-apps/6739
installing-snap-on-kali https://forum.snapcraft.io/t/installing-snap-on-kali-linux/14821
the-uio-interface https://forum.snapcraft.io/t/the-uio-interface/16041
login-session-interface https://forum.snapcraft.io/t/the-login-session-observe-interface/14580
raw-volume-interface https://forum.snapcraft.io/t/the-raw-volume-interface/14578
release-notes-snapcraft-3-9 https://forum.snapcraft.io/t/release-notes-snapcraft-3-9/14434
gadget-boot-assets https://forum.snapcraft.io/t/updating-gadget-boot-assets/14117
kde-neon-extension https://forum.snapcraft.io/t/the-kde-neon-extension/13752
gpu-support https://forum.snapcraft.io/t/adding-opengl-gpu-support-to-a-snap/6273
desktop-applications https://forum.snapcraft.io/t/desktop-applications/13034
gtk3-applications https://forum.snapcraft.io/t/gtk3-applications/13483
gnome-3-28-extension https://forum.snapcraft.io/t/the-gnome-3-28-extension/13485
audio-playback-interface https://forum.snapcraft.io/t/the-audio-playback-interface/13089
audio-record-interface https://forum.snapcraft.io/t/the-audio-record-interface/13090
building-snap-rpms-on-rhel https://forum.snapcraft.io/t/building-a-snap-rpm-for-red-hat-enterprise-linux-rhel-8/13728
system-usernames https://forum.snapcraft.io/t/system-usernames/13386
release-notes-snapcraft-3-8 https://forum.snapcraft.io/t/release-notes-snapcraft-3-8/13183
gpio-control-interface https://forum.snapcraft.io/t/the-gpio-control-interface/13037
appstream-metadata-interface https://forum.snapcraft.io/t/the-appstream-metadata-interface/13050
packagekit-control-interface https://forum.snapcraft.io/t/the-packagekit-control-interface/13052
ubuntu-core-boot-modes https://forum.snapcraft.io/t/ubuntu-core-boot-modes/5464
installing-snap-on-red-hat https://forum.snapcraft.io/t/installing-snap-on-red-hat-enterprise-linux-rhel/12825
permission-requests https://forum.snapcraft.io/t/permission-requests/12822
debugging-building-snaps https://forum.snapcraft.io/t/debugging-building-snaps/6274
deprecation-notice-1 https://forum.snapcraft.io/t/deprecation-notice-1/8397
deprecation-notice-2 https://forum.snapcraft.io/t/deprecation-notice-2/8398
deprecation-notice-3 https://forum.snapcraft.io/t/deprecation-notice-3/8403
deprecation-notice-4 https://forum.snapcraft.io/t/deprecation-notice-4/8404
deprecation-notice-5 https://forum.snapcraft.io/t/deprecation-notice-5/8405
deprecation-notice-6 https://forum.snapcraft.io/t/deprecation-notice-6/8406
deprecation-notice-7 https://forum.snapcraft.io/t/deprecation-notice-7/8407
deprecation-notice-8 https://forum.snapcraft.io/t/deprecation-notice-8/8408
deprecation-notice-9 https://forum.snapcraft.io/t/deprecation-notice-9/8409
deprecation-notice-10 https://forum.snapcraft.io/t/deprecation-notice-10/12463
release-notes-snapcraft-3-7 https://forum.snapcraft.io/t/release-notes-snapcraft-3-7/12509
release-notes-snapcraft-3-6 https://forum.snapcraft.io/t/release-notes-snapcraft-3-6/11898
release-notes-snapcraft-3-5 https://forum.snapcraft.io/t/release-notes-snapcraft-3-5/11651
release-notes-snapcraft-3-4 https://forum.snapcraft.io/t/release-notes-snapcraft-3-4/11650
troubleshoot-snap-building https://forum.snapcraft.io/t/troubleshoot-snap-building/11938
base-snaps https://forum.snapcraft.io/t/base-snaps/11198
debuging-startup-performance https://forum.snapcraft.io/t/debuging-snap-startup-performance-issues/9337
personal-files-interface https://forum.snapcraft.io/t/the-personal-files-interface/9357
system-files-interface https://forum.snapcraft.io/t/the-system-files-interface/9358
build-on-docker https://forum.snapcraft.io/t/build-on-docker/4158
choosing-a-security-model https://forum.snapcraft.io/t/choosing-a-security-model/6847
creating-your-developer-account https://forum.snapcraft.io/t/creating-your-developer-account/6760
developing-hotplug-interfaces https://forum.snapcraft.io/t/developing-hotplug-interfaces/10759
electron-apps https://forum.snapcraft.io/t/electron-apps/6748
go-applications https://forum.snapcraft.io/t/go-applications/7818
hotplug-support https://forum.snapcraft.io/t/hotplug-support/10750
installing-snap-on-centos https://forum.snapcraft.io/t/installing-snap-on-centos/10020
installing-snap-on-deepin https://forum.snapcraft.io/t/installing-snap-on-deepin/6791
installing-snap-on-galliumos https://forum.snapcraft.io/t/installing-snap-on-galliumos/6801
installing-snap-on-kde-neon https://forum.snapcraft.io/t/installing-snap-on-kde-neon/6792
installing-snap-on-kubuntu https://forum.snapcraft.io/t/installing-snap-on-kubuntu/9967
installing-snap-on-lubuntu https://forum.snapcraft.io/t/installing-snap-on-lubuntu/9965
installing-snap-on-parrot-security-os https://forum.snapcraft.io/t/installing-snap-on-parrot-security-os/6810
installing-snap-on-raspbian https://forum.snapcraft.io/t/installing-snap-on-raspbian/6754
installing-snap-on-solus https://forum.snapcraft.io/t/installing-snap-on-solus/6803
installing-snap-on-xubuntu https://forum.snapcraft.io/t/installing-snap-on-xubuntu/9963
installing-snap-on-zorin-os https://forum.snapcraft.io/t/installing-snap-on-zorin-os/6804
installing-snap-store-app https://forum.snapcraft.io/t/installing-the-snap-store-app/10077
java-applications https://forum.snapcraft.io/t/java-applications/7819
moos-applications https://forum.snapcraft.io/t/moos-applications/7820
node-apps https://forum.snapcraft.io/t/node-apps/6747
parallel-installs https://forum.snapcraft.io/t/parallel-installs/7679
process-for-aliases-auto-connections-and-tracks https://forum.snapcraft.io/t/process-for-aliases-auto-connections-and-tracks/455
reviewing-classic-confinement-snaps https://forum.snapcraft.io/t/process-for-reviewing-classic-confinement-snaps/1460
registering-your-app-name https://forum.snapcraft.io/t/registering-your-app-name/6793
release-notes-snapcraft-3-0 https://forum.snapcraft.io/t/release-notes-snapcraft-3-0/10704
release-notes-snapcraft-3-1-1 https://forum.snapcraft.io/t/release-notes-snapcraft-3-1-1/10722
release-notes-snapcraft-3-1 https://forum.snapcraft.io/t/release-notes-snapcraft-3-1/10719
release-notes-snapcraft-3-2 https://forum.snapcraft.io/t/release-notes-snapcraft-3-2/10723
release-notes-snapcraft-3-3 https://forum.snapcraft.io/t/release-notes-snapcraft-3-3/10725
releasing-to-the-snap-store https://forum.snapcraft.io/t/releasing-to-the-snap-store/6848
ros-applications https://forum.snapcraft.io/t/ros-applications/7822
ros2-applications https://forum.snapcraft.io/t/ros2-applications/7823
ruby-applications https://forum.snapcraft.io/t/ruby-applications/7824
rust-applications https://forum.snapcraft.io/t/rust-applications/7826
overrides https://forum.snapcraft.io/t/override-build-steps/4892
snap-documentation https://forum.snapcraft.io/t/snap-documentation/3781
snapcraft-advanced-grammar https://forum.snapcraft.io/t/snapcraft-advanced-grammar/8349
snapcraft-docs-roadmap https://forum.snapcraft.io/t/snapcraft-build-debug-and-publishing-docs-roadmap/10273
snapcraft-filesets https://forum.snapcraft.io/t/snapcraft-filesets/8973
snapcraft-lifecycle https://forum.snapcraft.io/t/snapcraft-lifecycle/5123
snapcraft-plugins https://forum.snapcraft.io/t/snapcraft-plugins/4284
account-control-interface https://forum.snapcraft.io/t/the-account-control-interface/7746
accounts-service-interface https://forum.snapcraft.io/t/the-accounts-service-interface/7802
adb-support-interface https://forum.snapcraft.io/t/the-adb-support-interface/9720
alsa-interface https://forum.snapcraft.io/t/the-alsa-interface/7766
autopilot-introspection-interface https://forum.snapcraft.io/t/the-autopilot-introspection-interface/7768
avahi-control-interface https://forum.snapcraft.io/t/the-avahi-control-interface/7769
avahi-observe-interface https://forum.snapcraft.io/t/the-avahi-observe-interface/7770
block-devices-interface https://forum.snapcraft.io/t/the-block-devices-interface/9721
bluetooth-control-interface https://forum.snapcraft.io/t/the-bluetooth-control-interface/7771
bluez-interface https://forum.snapcraft.io/t/the-bluez-interface/7772
bool-file-interface https://forum.snapcraft.io/t/the-bool-file-interface/7803
broadcom-asic-control-interface https://forum.snapcraft.io/t/the-broadcom-asic-control-interface/7773
browser-support-interface https://forum.snapcraft.io/t/the-browser-support-interface/7775
camera-interface https://forum.snapcraft.io/t/the-camera-interface/7776
can-bus-interface https://forum.snapcraft.io/t/the-can-bus-interface/7805
classic-support-interface https://forum.snapcraft.io/t/the-classic-support-interface/7777
content-interface https://forum.snapcraft.io/t/the-content-interface/1074
core-support-interface https://forum.snapcraft.io/t/the-core-support-interface/7778
cpu-control-interface https://forum.snapcraft.io/t/the-cpu-control-interface/7780
cups-control-interface https://forum.snapcraft.io/t/the-cups-control-interface/7779
daemon-notify-interface https://forum.snapcraft.io/t/the-daemon-notify-interface/7809
dbus-interface https://forum.snapcraft.io/t/the-dbus-interface/2038
dcdbas-control-interface https://forum.snapcraft.io/t/the-dcdbas-control-interface/7781
desktop-interface https://forum.snapcraft.io/t/the-desktop-interface/7783
desktop-interfaces https://forum.snapcraft.io/t/the-desktop-interfaces/2042
desktop-legacy-interface https://forum.snapcraft.io/t/the-desktop-legacy-interface/7782
device-buttons-interface https://forum.snapcraft.io/t/the-device-buttons-interface/8598
display-control-interface https://forum.snapcraft.io/t/the-display-control-interface/9723
docker-interface https://forum.snapcraft.io/t/the-docker-interface/7787
docker-support-interface https://forum.snapcraft.io/t/the-docker-support-interface/7810
documentation-roadmap https://forum.snapcraft.io/t/documentation-roadmap/8763
empty-interface https://forum.snapcraft.io/t/the-empty-interface/7811
dvb-interface https://forum.snapcraft.io/t/the-dvb-interface/7812
firewall-control-interface https://forum.snapcraft.io/t/the-firewall-control-interface/7813
framebuffer-interface https://forum.snapcraft.io/t/the-framebuffer-interface/7814
fuse-support-interface https://forum.snapcraft.io/t/the-fuse-support-interface/7816
fwupd-interface https://forum.snapcraft.io/t/the-fwupd-interface/7825
gpg-keys-interface https://forum.snapcraft.io/t/the-gpg-keys-interface/7827
gpg-public-keys-interface https://forum.snapcraft.io/t/the-gpg-public-keys-interface/7828
gpio-interface https://forum.snapcraft.io/t/the-gpio-interface/7829
gpio-memory-control-interface https://forum.snapcraft.io/t/the-gpio-memory-control-interface/7830
greengrass-support-interface https://forum.snapcraft.io/t/the-greengrass-support-interface/7831
gsettings-interface https://forum.snapcraft.io/t/the-gsettings-interface/7832
hardware-observe-interface https://forum.snapcraft.io/t/the-hardware-observe-interface/7833
hardware-random-control-interface https://forum.snapcraft.io/t/the-hardware-random-control-interface/7835
hardware-random-observe-interface https://forum.snapcraft.io/t/the-hardware-random-observe-interface/7836
hidraw-interface https://forum.snapcraft.io/t/the-hidraw-interface/7837
home-interface https://forum.snapcraft.io/t/the-home-interface/7838
hostname-control-interface https://forum.snapcraft.io/t/the-hostname-control-interface/7841
i2c-interface https://forum.snapcraft.io/t/the-i2c-interface/7842
iio-interface https://forum.snapcraft.io/t/the-iio-interface/7846
intel-mei-interface https://forum.snapcraft.io/t/the-intel-mei-interface/10203
io-ports-control-interface https://forum.snapcraft.io/t/the-io-ports-control-interface/7848
joystick-interface https://forum.snapcraft.io/t/the-joystick-interface/7849
juju-client-observe-interface https://forum.snapcraft.io/t/the-juju-client-observe-interface/7850
kernel-module-control-interface https://forum.snapcraft.io/t/the-kernel-module-control-interface/7853
kernel-module-observe-interface https://forum.snapcraft.io/t/the-kernel-module-observe-interface/9719
kubernetes-support-interface https://forum.snapcraft.io/t/the-kubernetes-support-interface/7855
kvm-interface https://forum.snapcraft.io/t/the-kvm-interface/7856
libvirt-interface https://forum.snapcraft.io/t/the-libvirt-interface/7858
locale-control-interface https://forum.snapcraft.io/t/the-locale-control-interface/7859
location-control-interface https://forum.snapcraft.io/t/the-location-control-interface/7860
location-observe-interface https://forum.snapcraft.io/t/the-location-observe-interface/7861
log-observe-interface https://forum.snapcraft.io/t/the-log-observe-interface/7862
lxd-interface https://forum.snapcraft.io/t/the-lxd-interface/7863
lxd-support-interface https://forum.snapcraft.io/t/the-lxd-support-interface/7864
maliit-interface https://forum.snapcraft.io/t/the-maliit-interface/7872
media-hub-interface https://forum.snapcraft.io/t/the-media-hub-interface/7873
mir-interface https://forum.snapcraft.io/t/the-mir-interface/7874
modem-manager-interface https://forum.snapcraft.io/t/the-modem-manager-interface/7875
mount-observe-interface https://forum.snapcraft.io/t/the-mount-observe-interface/7876
mpris-interface https://forum.snapcraft.io/t/the-mpris-interface/7877
netlink-audit-interface https://forum.snapcraft.io/t/the-netlink-audit-interface/7878
netlink-connector-interface https://forum.snapcraft.io/t/the-netlink-connector-interface/7879
network-bind-interface https://forum.snapcraft.io/t/the-network-bind-interface/7881
network-control-interface https://forum.snapcraft.io/t/the-network-control-interface/7882
network-interface https://forum.snapcraft.io/t/the-network-interface/7880
network-manager-interface https://forum.snapcraft.io/t/the-network-manager-interface/7883
network-observe-interface https://forum.snapcraft.io/t/the-network-observe-interface/7884
network-setup-control-interface https://forum.snapcraft.io/t/the-network-setup-control-interface/7885
network-setup-observe-interface https://forum.snapcraft.io/t/the-network-setup-observe-interface/7888
network-status-interface https://forum.snapcraft.io/t/the-network-status-interface/7890
ofono-interface https://forum.snapcraft.io/t/the-ofono-interface/7891
online-accounts-service-interface https://forum.snapcraft.io/t/the-online-accounts-service-interface/7893
opengl-interface https://forum.snapcraft.io/t/the-opengl-interface/7894
openvswitch-interface https://forum.snapcraft.io/t/the-openvswitch-interface/7896
openvswitch-support-interface https://forum.snapcraft.io/t/the-openvswitch-support-interface/7897
optical-drive-interface https://forum.snapcraft.io/t/the-optical-drive-interface/7898
password-manager-service-interface https://forum.snapcraft.io/t/the-password-manager-service-interface/7899
physical-memory-control-interface https://forum.snapcraft.io/t/the-physical-memory-control-interface/7900
physical-memory-observe-interface https://forum.snapcraft.io/t/the-physical-memory-observe-interface/7901
ppp-interface https://forum.snapcraft.io/t/the-ppp-interface/7902
process-control-interface https://forum.snapcraft.io/t/the-process-control-interface/7903
pulseaudio-interface https://forum.snapcraft.io/t/the-pulseaudio-interface/7906
raw-usb-interface https://forum.snapcraft.io/t/the-raw-usb-interface/7908
removable-media-interface https://forum.snapcraft.io/t/the-removable-media-interface/7910
screen-inhibit-control-interface https://forum.snapcraft.io/t/the-screen-inhibit-control-interface/7911
serial-port-interface https://forum.snapcraft.io/t/the-serial-port-interface/7913
shutdown-interface https://forum.snapcraft.io/t/the-shutdown-interface/7914
snapd-control-interface https://forum.snapcraft.io/t/the-snapd-control-interface/7915
snapd-roadmap https://forum.snapcraft.io/t/the-snapd-roadmap/1973
spi-interface https://forum.snapcraft.io/t/the-spi-interface/7916
ssh-keys-interface https://forum.snapcraft.io/t/the-ssh-keys-interface/7917
ssh-public-keys-interface https://forum.snapcraft.io/t/the-ssh-public-keys-interface/7918
storage-framework-service-interface https://forum.snapcraft.io/t/the-storage-framework-service-interface/7919
system-observe-interface https://forum.snapcraft.io/t/the-system-observe-interface/7921
system-snap-directory https://forum.snapcraft.io/t/the-system-snap-directory/2817
system-trace-interface https://forum.snapcraft.io/t/the-system-trace-interface/7922
thumbnailer-service-interface https://forum.snapcraft.io/t/the-thumbnailer-service-interface/7923
time-control-interface https://forum.snapcraft.io/t/the-time-control-interface/7924
timeserver-control-interface https://forum.snapcraft.io/t/the-timeserver-control-interface/7925
timezone-control-interface https://forum.snapcraft.io/t/the-timezone-control-interface/7926
tpm-interface https://forum.snapcraft.io/t/the-tpm-interface/7927
u2f-devices-interface https://forum.snapcraft.io/t/the-u2f-devices-interface/9722
ubuntu-download-manager-interface https://forum.snapcraft.io/t/the-ubuntu-download-manager-interface/7928
udisks2-interface https://forum.snapcraft.io/t/the-udisks2-interface/7930
uhid-interface https://forum.snapcraft.io/t/the-uhid-interface/7931
unity7-interface https://forum.snapcraft.io/t/the-unity7-interface/7786
unity8-calendar-interface https://forum.snapcraft.io/t/the-unity8-calendar-interface/7933
unity8-contacts-interface https://forum.snapcraft.io/t/the-unity8-contacts-interface/7934
unity8-interface https://forum.snapcraft.io/t/the-unity8-interface/7932
upower-observe-interface https://forum.snapcraft.io/t/the-upower-observe-interface/7935
wayland-interface https://forum.snapcraft.io/t/the-wayland-interface/7784
x11-interface https://forum.snapcraft.io/t/the-x11-interface/7785
using-in-development-features https://forum.snapcraft.io/t/using-in-development-features-in-snapcraft-yaml/5766
writing-local-plugins https://forum.snapcraft.io/t/writing-local-plugins/5125
build-snaps-on-docker https://forum.snapcraft.io/t/building-the-snap-on-docker/6757
snapd-api https://forum.snapcraft.io/t/snapd-rest-api/17954
debug-snaps https://forum.snapcraft.io/t/debugging-snaps/18420
migrating-bases https://forum.snapcraft.io/t/migrating-between-bases/23455
store-listing-branding https://forum.snapcraft.io/t/store-listing-and-branding/16397
package-repositories https://forum.snapcraft.io/t/snapcraft-package-repositories/15475
security-sandboxing https://forum.snapcraft.io/t/security-policy-and-sandboxing/554
deprecation-notices/dn10 https://forum.snapcraft.io/t/deprecation-notice-10/12463
tab-completion https://forum.snapcraft.io/t/tab-completion-for-snaps/2261

Redirects

Mapping table
Path Location
/docs/managing-updates#heading–refresh-hold /docs/managing-updates#refreshhold-7
/docs/troubleshooting /docs/fix-common-issues
/docs/hardware-io-interfaces /docs/hardware-interfaces
/docs/quickstart-guide /docs/quickstart-tour
/docs/keeping-snaps-up-to-date /docs/manage-updates
/docs/getting-started /docs/quickstart-guide
/docs/ ros2-humble-extention /docs/ros2-humble-extension
/docs/documentation-guidelines /docs/contribute-to-docs
/docs/snap-format /docs/the-snap-format
/docs/kernel-snap /docs/the-kernel-snap
/docs/gadget-snap /docs/the-gadget-snap
/docs/installing-snap-on-raspbian /docs/installing-snap-on-raspberrypi
/docs/build-on-lxd /docs/build-providers
/docs/snapcraft-format /docs/snapcraft-schema
/docs/scriptlets /docs/overrides
/docs/remote-reusable-parts /docs/snapcraft-extensions
/docs/install-snapcraft-on-macos /docs/installing-snapcraft#heading–macos
/docs/building-snaps /docs/snapcraft-overview
/docs/snapcraft-lifecycle /docs/parts-lifecycle
/docs/security-model /docs/choosing-a-security-model
/docs/build-snaps-on-docker /docs/build-on-docker
/docs/t/environment-variables-that-snapcraft-exposes/7569 /docs/environment-variables
/create/ /docs/creating-a-snap

Hi Robin,

Two suggestions for the format, and one comment about the data:

1. Information is boring

The output is long and boring for most people. It’s okay to have it here as it’s closely related with a table of contents, which is one of the purposes of this page, and having it here also makes it convenient to fetch at once for the dynamic systems. But we don’t need to show it all the time. We can fix that by folding it:

URLs

… content goes here …

Implemented with:

[details=URLs]
... content goes here ...
[/details]

2. Format is hard to read

It’s a lot of data and naturally repetitive. We can probably improve the situation significantly by reformatting it in a more stable way. For example:

Page URL
Creating a snap /creating-a-snap

This is not only shorted, but it’ll turn out a lot more pleasant because the two columns will align. The awkward arrow, which doesn’t align well in the font used here, is also gone.

It’s implemented with:

| Page | URL |
| --- | --- |
| https://forum.snapcraft.io/t/creating-a-snap/6799 | /creating-a-snap |

Then, a third comment on the actual data:

3. Not offering any value

This is a premature comment, but worth raising it now before the data is final. All those links seem to simply point to a URL that uses the exact same text as the title. This doesn’t seem to offer any value, and it’s a lot of trouble for no value. If that’s what we’ll do in 99% of the cases, then it’d be worth asking what the motivation is again.

Thanks @niemeyer

I agree that it looks very long and boring and hard to read, and I like your suggestions 1 and 2. I’ll make it a <table> in a <details> element.

I can appreciate point 3, and it would be very nice if it was possible to make it automatically simply use the slug as the pretty URL. However, this doesn’t work practically for 2 reasons:

  1. Slugs change as soon as someone changes the title of the topic. One of the requirements here is that these URLs are crafted, rather than user-editable, and that they don’t change. So the idea here is that, even though initially these pretty URLs might closely resemble the slug (although I did strip out extra words like “the”), the slug will probably change over time but the URL will persist unless we change it deliberately.
  2. It’s very slow to try to retrieve a topic by slug alone (without ID) (you need to do a general search, then crawl through search results to check the titles/slugs manually). It’s much more efficient to have a mapping somewhere.

We could make the mapping shorted, by simply doing:

| ID | Path |
| -- | ---- |
| 6799 | /creating-a-snap |

I opted for the more verbose version:

| ID | Path |
| -- | ---- |
| https://forum.snapcraft.io/t/creating-a-snap/6799 | https://docs.snapcraft.io/creating-a-snap |

Because this then shows both sides as links, which mean that users can actually click on them to see the page, either on the forum or the documentation side.

But if you think the succinctness of the data in the table outweighs the clickability, I’m happy to entertain the shorter version.

I get it. My point is a more conceptual one, to be raised upstream: if we are not doing anything other than taking Graham’s suggestion of title in 99.9% of the cases, then the whole exercise seems kind of pointless. We don’t need so many people in the loop.

Can we please use the shorter version? The second part is not really a link, but rather the suffix that generates the link. So if the link doesn’t work, it’s the underlying mechanism that is broken and not the link itself. Also, the link won’t work as soon as the file is put live either, as there will necessarily be at least a short delay between it being saved and the system acting on it. So the shorter form is both more pleasant to read, and more appropriate it seems.

Can we please use the shorter version?

Okay, so which do you prefer?

ID Path
6799 /creating-a-snap

Or:

ID Path
6799 /creating-a-snap

Or:

Topic Path
Creating a snap /creating-a-snap

The last one feels like a pretty good trade off between ease of writing it the first time, ease of reading, and convenience in terms of clicking on the link to see the content.

2 Likes

All the content of Building the snap on Docker has been merged into Build on Docker a while ago.

The first page however, still shows up in google searches:

So I removed the content of the first page and added a notice redirecting to the correct one. Is it possible to remove the page entirely and create a redirect pointing /docs/build-snaps-on-docker to /docs/build-on-docker?

That’s a good point, thanks - and thanks for the edits. I’ll add the redirect now.

1 Like

I’ve been gathering and updating documentation for creating snaps of desktop applications. This is tricky to get right and very specific to which toolkit you use.

Given the many questions on this forum about desktop toolkits, it’s clear that many people are struggling with this, so we should give it a clear place in the docs, but I’m not sure where.

The easiest route might be to just add Desktop applications to the navigation, but it doesn’t really fit in there. I added a link to this document in the checklist page, but I don’t think that is visible enough.

Creating a snap has the “common languages and platforms” table. I was thinking of adding another table or column called “Desktop toolkits” which contains “Electron” (moved from “languages”), “Qt”, “GTK”, “Java Swing”, “wxWidgets” and “other”. This could be expanded in the future with other toolkits and things like OpenGL (which is more complex than simply adding an interface) and ffmpeg.

However, many of these topics don’t really fit into the style of a complete walkthrough. I can update them a bit to look more similar, but I’m not sure if it makes sense to turn pages like Qt5 and GTK into complete walkthroughs since these are meant to be used together with one of the languages. For example, an application might use Python + GTK3 or Go + Qt5 etc.

@degville, what do you think?

Thanks for working on this, and for highlighting desktop toolkit documentation. You’ve raised a really important point, and one we’ve spent considerable time discussing internally. It’s definitely something we want to get right.

Part of the delay in writing a good set of docs for this has been waiting for desktop extensions to mature enough to handle the hard dependency parts - these extensions should transform the process, and they’re close being ready.

Another part has been that we wanted to make sure there was a wider doc support structure for snap building before tackling desktop integration. This is what we’ve been working on with the Snapcraft build, debug and publishing docs roadmap, and it’s almost complete too.

I think we can do this in both of the ways you suggest. A walkthrough is really useful, and helps give a wider context to how snaps are built, even when they don’t fit your exact use-case. It’s also great for Google, etc. Adding a new table to Creating a snap to link to these makes good sense to me.

But as you also mention, a walkthrough doesn’t fit into our current (published) docs style. I think to integrate both, we need to make sure the core details for what’s discussed in any walkthrough are included in the more formal doc structure. I think walkthroughs should be a little like CI testing in code - they bring together the various elements of what’s already documented into a fully working example, but they shouldn’t be adding new ‘functionality’ themselves.

Adding to the wider docs is something I (or anyone, really!) can do if you feel like we’re not explaining something clearly, or if you feel a topic has become vague or outgrown its original intent. And it’s easier to do when that content already exists, whatever form it takes.

TLDR:

  • thanks!
  • I think walkthrough-style docs for desktop toolkit integration is a good idea
  • desktop toolkit integration is currently changing, but still worth documenting
  • a new table on Creating a snap is a good place for them
  • I/we need to make sure whatever we cover in a walkthrough is easily discoverable and more formally documented in the normal doc structure. This may be easier to do after a walkthrough has been written.

I’ll also have a discussion with the Snapcraft/Advocacy teams on how best we can handle desktop toolkit integration.

I have some stuff I need your help with. I’m not completely done cleaning up these pages, but having them online would make my job a bit easier.

Please give the following pages a canonical url.

Feel free to change the path etc.

Topic Path
Adding OpenGL/GPU support to a snap /docs/gpu-support
Desktop files for menu integration /docs/desktop-menu-icon-support
Desktop applications /docs/desktop-applications
GTK3 applications /docs/gtk3-applications
Snapcraft Extensions /docs/snapcraft-extensions
The gnome-3-28 extension /docs/gnome-3-28-extension
The audio-playback interface /docs/audio-playback-interface
The audio-record interface /docs/audio-record-interface

Pages to turn into a wiki

I made them or I want to edit them.

Pages to add to the sidebar

I propose to add this to the sidebar. I’ll also link to the specific tutorials (GTK3, qt5, …) from the “creating a snap” page.

Pages to redirect

redirect https://snapcraft.io/docs/snapcraft-lifecycle to https://snapcraft.io/docs/parts-lifecycle

1 Like

I’ll make all the necessary fixes you’ve requested - thank you for all this!

Can we pin this so that it appears at the top of the doc page for easy discovery of the “entry point” so we can find the links that are on the sidebar easily? Also, should this be a wiki?

I’ve just pinned the topic, thanks for the suggestion.

This is the only page that isn’t a wiki because we need some gateway control over the docs publishing. A small error in the table can completely break the final output, for instance. It also contains re-directs for old pages, which could also break the docs rendering and other pages too.

1 Like

Thank you, @degville. Good reasoning about not making it a wiki, thanks for elaborating

1 Like

Can you change the ToC link “Extend the build” to more closely match the name of the page it links to, “Iterating over a build”?

1 Like

I just created a reference page for the craftctl tool. I think it would fit nicely in the ToC under “Snapcraft”.

It’s there now - thank you!

1 Like

Hi! There’s a typo after the first sentence:

dependency-free. s