Snap Package Manager Cheatsheet

Universal Linux packages with Snap manager

Snap is Canonical’s revolutionary universal package management system that brings containerized applications, automatic updates, and enhanced security to Ubuntu and other Linux distributions.

cross-dependent-modules This awesome image is generated by AI model Flux 1 dev.

What is Snap?

Snap is a software packaging and deployment system developed by Canonical for operating systems that use the Linux kernel. Snap packages (called “snaps”) are containerized software packages that work across a range of Linux distributions, providing a consistent application experience. Unlike traditional packages that share system libraries, Snaps bundle all dependencies, ensuring consistent behavior across different systems.

Key Characteristics:

  • Self-Contained: Each snap includes all dependencies (no conflicts)
  • Automatic Updates: Updates happen automatically in the background (4x daily checks)
  • Sandboxing: AppArmor confinement provides security isolation
  • Universal: Works on Ubuntu, Fedora, Debian, Arch, and more
  • Transactional: Updates are atomic and can be rolled back
  • Background Service: snapd daemon manages snaps and updates

Package Manager Comparison

Ubuntu supports multiple package management systems. Here’s how the main operations compare:

Operation Snap APT Flatpak
Search snap find keyword apt search keyword flatpak search keyword
Install sudo snap install package sudo apt install package flatpak install flathub app.id
List Installed snap list apt list --installed flatpak list --app
Show Info snap info package apt show package flatpak info app.id
Update All sudo snap refresh sudo apt update && sudo apt upgrade flatpak update
Update Single sudo snap refresh package sudo apt install --only-upgrade pkg flatpak update app.id
Remove sudo snap remove package sudo apt remove package flatpak uninstall app.id
Clean Up snap remove --revision=N sudo apt autoremove flatpak uninstall --unused
Repository Snap Store (built-in) /etc/apt/sources.list Add with flatpak remote-add

Quick Feature Comparison

Feature Snap APT Flatpak
Auto-updates Yes No No
Sandboxing Yes No Yes
Dependencies Bundled System libraries Shared runtimes
Package Size Large (50-500MB) Small (5-50MB) Medium (20-200MB)
Root Required Yes Yes No (user install)
Startup Speed Slower Fast Fast
Best For Universal apps System packages Desktop apps

About This Guide

This guide focuses on Snap - Canonical’s universal package manager with automatic updates and strong sandboxing. Snap is ideal for cross-distribution applications, desktop software, and scenarios where you want automatic security updates without manual intervention.

For other package managers:

Each package manager has its strengths. Use Snap for applications needing automatic updates and cross-version compatibility, APT for system packages and libraries, and Flatpak for desktop applications with fine-grained permission control.


Snap Package Management - Detailed Guide

Installing Snapd

Ubuntu (Pre-installed on 16.04+)

Snap comes pre-installed on Ubuntu 16.04 and later versions. If you’re setting up a fresh Ubuntu installation, check out our comprehensive guide on installing Ubuntu 24.04 and essential tools for a complete setup walkthrough.

# Check if snapd is installed
snap version

# If not installed, install it
sudo apt update
sudo apt install snapd

# Enable snapd service
sudo systemctl enable --now snapd.socket

# Optional: Enable classic snap support
sudo ln -s /var/lib/snapd/snap /snap

Other Distributions

Debian:

sudo apt update
sudo apt install snapd
sudo systemctl enable --now snapd.socket

Fedora:

sudo dnf install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

Arch Linux:

git clone https://aur.archlinux.org/snapd.git
cd snapd
makepkg -si
sudo systemctl enable --now snapd.socket

Linux Mint:

Snap installation on Linux Mint requires enabling compatibility. If you’re planning a fresh installation, see our guide on reinstalling Linux Mint with useful tools for a complete setup process.

CentOS/RHEL:

sudo yum install snapd
sudo systemctl enable --now snapd.socket

Essential Snap Commands

Installing Snaps

Basic Installation:

# Install from stable channel
sudo snap install package-name

# Install from specific channel
sudo snap install package-name --channel=beta
sudo snap install package-name --channel=edge

# Install with classic confinement
sudo snap install package-name --classic

# Install specific version/revision
sudo snap install package-name --revision=123

Real-World Examples:

# Install VS Code
sudo snap install code --classic

# Install Spotify
sudo snap install spotify

# Install Docker
sudo snap install docker

# Install VLC Media Player
sudo snap install vlc

# Install Chromium browser
sudo snap install chromium

# Install kubectl
sudo snap install kubectl --classic

# Install Slack
sudo snap install slack --classic

# Install Postman
sudo snap install postman

# Install Android Studio
sudo snap install android-studio --classic

# Install Node.js
sudo snap install node --classic

Searching for Snaps

# Search Snap Store
snap find keyword

# Search with detailed output
snap find keyword --verbose

# Search specific section
snap find --section=development

# Examples
snap find "text editor"
snap find database
snap find "media player"

Browse by Category:

# List available sections
snap find --section

# Common sections include:
# - productivity
# - development
# - server-and-cloud
# - security
# - entertainment
# - photo-and-video
# - music-and-audio

Listing Installed Snaps

# List all installed snaps
snap list

# List with more details
snap list --all

# Show specific snap
snap list package-name

# List by publisher
snap list --all | grep "publisher-name"

Output includes:

  • Name: Snap package name
  • Version: Current version
  • Rev: Revision number
  • Tracking: Channel being tracked
  • Publisher: Verified publisher
  • Notes: Confinement type and flags

Viewing Snap Information

# Show detailed snap information
snap info package-name

# Example output includes:
# - Description
# - Snap ID
# - Publisher
# - License
# - Available channels
# - Installed version
# - Refresh date

Example:

snap info vlc

Output shows:

name:      vlc
summary:   The ultimate media player
publisher: VideoLAN✓
license:   GPL-2.0+
description: |
  VLC is a free and open source multimedia player...
snap-id: 123abc...
channels:
  stable:    3.0.18  2023-03-15 (3078) 276MB -
  candidate: ↑
  beta:      ↑
  edge:      4.0.0~dev 2023-03-20 (3079) 280MB -
installed:   3.0.18  (3078) 276MB -

Updating Snaps

Update All Snaps:

# Update all installed snaps
sudo snap refresh

# Check for available updates without installing
snap refresh --list

Update Specific Snap:

# Update single snap
sudo snap refresh package-name

# Update to specific channel
sudo snap refresh package-name --channel=beta

# Update to specific revision
sudo snap refresh package-name --revision=456

Automatic Updates:

Snaps update automatically by default. The snapd daemon checks for updates 4 times daily.

Configure Update Schedule:

# View current refresh timer
snap refresh --time

# Set refresh timer (requires snapd 2.31+)
sudo snap set system refresh.timer=fri,23:00-01:00

# Hold updates temporarily (max 90 days)
sudo snap refresh --hold

# Hold specific snap
sudo snap refresh --hold package-name

# Unhold updates
sudo snap refresh --unhold
sudo snap refresh --unhold package-name

Removing Snaps

# Remove snap (keep data)
sudo snap remove package-name

# Remove snap and all data (purge)
sudo snap remove --purge package-name

# Remove specific revision
sudo snap remove package-name --revision=123

Clean Up Old Revisions:

By default, Snap keeps 2-3 old revisions for rollback:

# List all revisions
snap list --all package-name

# Remove specific old revision
sudo snap remove package-name --revision=old-rev-number

# Script to remove all old revisions
#!/bin/bash
snap list --all | awk '/disabled/{print $1, $3}' | 
  while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
  done

For more information on working with bash scripts and command-line operations, check out our comprehensive Bash Cheat Sheet.

Running Snaps

# Run snap application
snap run package-name

# Run with specific command
snap run package-name.command

# Example: Run specific VS Code command
snap run code --list-extensions

# Show available commands for a snap
snap info package-name | grep "commands:"

Understanding Snap Channels

Channels allow developers to publish different versions simultaneously:

Channel Types

  1. stable: Production-ready releases (default)
  2. candidate: Release candidates, pre-release testing
  3. beta: Beta versions with new features
  4. edge: Latest development builds, potentially unstable

Channel Tracks

Some snaps have multiple tracks (e.g., major versions):

# Example: Install LXD 4.0 track
sudo snap install lxd --channel=4.0/stable

# Example: Install specific Kubernetes version
sudo snap install microk8s --channel=1.28/stable

Switching Channels

# Switch to different channel
sudo snap refresh package-name --channel=beta

# Switch back to stable
sudo snap refresh package-name --channel=stable

# View available channels
snap info package-name

Snap Confinement Levels

Strict Confinement

Maximum security, snap is isolated from the system:

# Most snaps use strict confinement
sudo snap install vlc

Characteristics:

  • Limited file system access
  • Requires interface connections for hardware access
  • AppArmor profiles enforce security
  • Best for desktop applications

Classic Confinement

Full system access, like traditional packages:

# Required for many development tools
sudo snap install code --classic
sudo snap install kubectl --classic

Characteristics:

  • No sandboxing
  • Full file system access
  • Required for system tools and IDEs
  • Less secure but more compatible

Devmode Confinement

Development mode, confinement disabled:

# Only for testing/development
sudo snap install package-name --devmode

Characteristics:

  • No security restrictions
  • Used during snap development
  • Not recommended for production
  • Violations logged but not enforced

Check Confinement

# View confinement level
snap list
# Look for: classic, devmode, or strict (no label)

# Detailed info
snap info package-name | grep confinement

Snap Interfaces and Connections

Interfaces define how snaps communicate with system resources.

View Interfaces

# List all available interfaces
snap connections

# Show interfaces for specific snap
snap connections package-name

# List all possible interfaces
snap interface

# Show details of specific interface
snap interface interface-name

Common Interfaces

  • home: Access to user home directory
  • network: Network access
  • audio-playback: Audio output
  • camera: Camera access
  • removable-media: USB drives, SD cards
  • x11: X11 display server
  • wayland: Wayland display server
  • opengl: GPU acceleration
  • pulseaudio: PulseAudio sound server

Managing Connections

# Connect interface
sudo snap connect package-name:interface-name

# Disconnect interface
sudo snap disconnect package-name:interface-name

# Example: Grant camera access
sudo snap connect package-name:camera

# Example: Allow removable media access
sudo snap connect package-name:removable-media

Auto-connections:

Most interfaces auto-connect when installed. Some require manual connection for security.

Advanced Snap Usage

Snap Services

Some snaps run as background services:

# List services
snap services

# List services for specific snap
snap services package-name

# Start service
sudo snap start package-name.service-name

# Stop service
sudo snap stop package-name.service-name

# Restart service
sudo snap restart package-name.service-name

# Enable service (start on boot)
sudo snap start --enable package-name.service-name

# Disable service
sudo snap stop --disable package-name.service-name

# View service logs
snap logs package-name.service-name

# Follow logs in real-time
snap logs -f package-name.service-name

# Show last N lines
snap logs -n=50 package-name.service-name

Snap Configuration

# View snap configuration
snap get package-name

# View specific configuration key
snap get package-name key-name

# Set configuration
sudo snap set package-name key=value

# Examples
sudo snap set microk8s hostpath-storage=/data/k8s
sudo snap get microk8s hostpath-storage

# Unset configuration
sudo snap unset package-name key-name

Snap Aliases

Create shortcuts for snap commands:

# Create alias
sudo snap alias package-name.command alias-name

# Example: Alias kubectl command
sudo snap alias microk8s.kubectl kubectl

# List aliases
snap aliases

# Remove alias
sudo snap unalias alias-name

# Remove all aliases for snap
sudo snap unalias package-name

Snap Layouts

Layouts make legacy apps work in confined snaps:

# View snap layouts
snap info package-name | grep "layout:"

Layouts map snap paths to expected system paths.

Snap Store and Publishing

Browse Snap Store

Web Interface:

Command Line:

# Featured snaps
snap find --section=featured

# By category
snap find --section=productivity
snap find --section=games

# Private snaps (requires authentication)
snap find --private

Installing from Files

# Install local snap file
sudo snap install package-name.snap --dangerous

# Install and connect interfaces
sudo snap install package-name.snap --dangerous --classic

Note: --dangerous bypasses signature verification for local files.

Troubleshooting Snap Issues

Common Problems and Solutions

Snap Store Not Loading

# Restart snapd service
sudo systemctl restart snapd.service

# Check service status
sudo systemctl status snapd.service

# View logs
sudo journalctl -u snapd.service -n 50

Slow Snap Startup

Causes:

  • First-run decompression
  • Filesystem mounting
  • AppArmor profile loading

Solutions:

# Pre-connect all interfaces
sudo snap connect package-name:interface

# Disable some interfaces if not needed
sudo snap disconnect package-name:interface

# Check snap startup time
time snap run package-name

Connection Issues

# Verify network interface
snap connections package-name | grep network

# Manually connect network
sudo snap connect package-name:network

# Check firewall
sudo ufw status

Snap Install Failures

# Clear snap cache
sudo rm -rf /var/lib/snapd/cache/*

# Reinstall snap
sudo snap remove package-name
sudo snap install package-name

# Check disk space
df -h /var/lib/snapd

# Fix broken snap state
sudo snap changes
sudo snap abort <change-id>  # if stuck

AppArmor Denials

# Check AppArmor logs
sudo dmesg | grep DENIED

# View specific snap profile
sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap.*

# Reload AppArmor
sudo systemctl reload apparmor

Snap Revision Conflicts

# List all revisions
snap list --all package-name

# Remove old revision
sudo snap remove package-name --revision=old-number

# Revert to previous revision
sudo snap revert package-name

# Check snap changes
snap changes

Debugging Snaps

# Enable debug mode
sudo snap set system debug.snapd=true

# View snap environment
snap run --shell package-name
# Then run: env

# Check snap file layout
ls -la /snap/package-name/current/

# View snap metadata
cat /snap/package-name/current/meta/snap.yaml

# Trace snap execution
snap run --trace-exec package-name

# Check snap assertions
snap known assertion-type

Performance Optimization

Reduce Disk Usage

# Check snap storage usage
du -sh /var/lib/snapd/snaps/*

# Remove old revisions automatically
# Set refresh.retain to 2 (keeps only 2 old versions)
sudo snap set system refresh.retain=2

# Manual cleanup script
#!/bin/bash
# Remove all disabled snap revisions
LANG=C snap list --all | awk '/disabled/{print $1, $3}' | 
  while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
  done

Optimize Startup Performance

1. Pre-Connect Interfaces:

# Connect frequently used interfaces at installation
sudo snap connect package-name:home
sudo snap connect package-name:network

2. Use Parallel Refresh:

Edit /var/lib/snapd/state.json (advanced):

{
  "data": {
    "parallel-installs": 4
  }
}

3. Limit Background Updates:

# Set update window to low-usage time
sudo snap set system refresh.timer=sun,02:00-04:00

Monitor Snap Performance

# Check snap process usage
ps aux | grep snap

# Monitor snap service resources
systemctl status snap.package-name.service-name

# View snapd resource usage
systemctl status snapd

# Check snap mount points
mount | grep snap

Security Best Practices

Verify Publishers

# Check publisher verification
snap info package-name | grep publisher

# Look for ✓ (verified) or ✪ (star - Canonical)

Only install from verified publishers when possible.

Review Permissions

# Before installing, check required interfaces
snap info package-name | grep plugs

# Review connections after install
snap connections package-name

# Disconnect unnecessary interfaces
sudo snap disconnect package-name:interface-name

Regular Updates

# Keep snaps updated
sudo snap refresh

# Enable automatic security updates
# (enabled by default)
snap refresh --time

Audit Installed Snaps

# List all snaps and confinement
snap list

# Check for devmode snaps (less secure)
snap list | grep devmode

# Review classic snaps (full system access)
snap list | grep classic

Use Strict Confinement

Prefer snaps with strict confinement for better security:

# Check confinement before install
snap info package-name | grep confinement

# Avoid --devmode in production

Snap in Enterprise Environments

Proxy Configuration

# Set HTTP proxy
sudo snap set system proxy.http="http://proxy:8080"

# Set HTTPS proxy
sudo snap set system proxy.https="https://proxy:8080"

# View proxy settings
snap get system proxy

Offline Installations

# Download snap
snap download package-name

# Transfer to offline system and install
sudo snap install package-name_*.snap --dangerous

# Include assertions for signed install
sudo snap ack package-name_*.assert
sudo snap install package-name_*.snap

Snap Store Proxy

For enterprise environments, deploy Snap Store Proxy:

  • Cache snaps locally
  • Control available snaps
  • Monitor installations
  • Reduce bandwidth usage

See: https://docs.ubuntu.com/snap-store-proxy/

Managing Snap Updates

# Disable auto-refresh per snap (requires proxy)
sudo snap refresh --hold=forever package-name

# Schedule updates during maintenance windows
sudo snap set system refresh.timer=sat,02:00-04:00

# Manually approve updates
sudo snap refresh --list  # Review
sudo snap refresh package-name  # Update specific

Development Tools

sudo snap install code --classic              # VS Code
sudo snap install intellij-idea-community --classic  # IntelliJ
sudo snap install pycharm-community --classic  # PyCharm
sudo snap install android-studio --classic    # Android Studio
sudo snap install sublime-text --classic      # Sublime Text
sudo snap install atom --classic              # Atom Editor
sudo snap install postman                     # API Testing
sudo snap install dbeaver-ce                  # Database Tool

DevOps & Cloud

sudo snap install kubectl --classic           # Kubernetes CLI
sudo snap install helm --classic              # Helm
sudo snap install microk8s --classic          # Lightweight K8s
sudo snap install docker                      # Docker
sudo snap install terraform --classic         # Terraform
sudo snap install aws-cli --classic           # AWS CLI
sudo snap install azure-cli --classic         # Azure CLI
sudo snap install google-cloud-sdk --classic  # GCP SDK

Productivity

sudo snap install slack --classic             # Slack
sudo snap install teams                       # MS Teams
sudo snap install discord                     # Discord
sudo snap install zoom-client                 # Zoom
sudo snap install mailspring                  # Email Client
sudo snap install joplin-desktop             # Notes App
sudo snap install libreoffice                # Office Suite

Multimedia

sudo snap install vlc                        # Video Player
sudo snap install spotify                    # Music Streaming
sudo snap install obs-studio                 # Screen Recording
sudo snap install gimp                       # Image Editor
sudo snap install inkscape                   # Vector Graphics
sudo snap install audacity                   # Audio Editor
sudo snap install kdenlive                   # Video Editor

Browsers

sudo snap install chromium                   # Chromium
sudo snap install firefox                    # Firefox
sudo snap install opera                      # Opera
sudo snap install brave                      # Brave Browser

System Utilities

sudo snap install htop                       # Process Monitor
sudo snap install bpytop                     # System Monitor
sudo snap install speedtest-cli              # Speed Test
sudo snap install certbot --classic          # SSL Certificates
sudo snap install ngrok                      # Tunneling

To boost your productivity when working with these utilities and Ubuntu in general, explore our Ubuntu Keyboard Shortcuts Cheatsheet for efficient workflow management.

Choosing the Right Package Manager

When to Use Snap ✅

Best for:

  • Cross-distribution compatibility needed
  • Automatic updates are important
  • Security through sandboxing is priority
  • Latest application versions required
  • Desktop applications
  • IoT and embedded devices (Ubuntu Core)

When to Use Other Package Managers

Snap Command Reference

Quick Command Cheatsheet

# SEARCH & INSTALL
snap find keyword              # Search snaps
sudo snap install name         # Install snap
sudo snap install name --classic  # Classic confinement
sudo snap install name --channel=beta  # Specific channel

# LIST & INFO
snap list                      # List installed
snap list --all               # Include old revisions
snap info name                # Show snap details
snap version                  # Show snapd version

# UPDATE
sudo snap refresh             # Update all
sudo snap refresh name        # Update specific
snap refresh --list           # Check updates
sudo snap refresh --hold      # Postpone updates

# REMOVE
sudo snap remove name         # Remove snap
sudo snap remove --purge name # Remove with data
sudo snap remove name --revision=N  # Remove revision

# SERVICES
snap services                 # List services
sudo snap start name.service  # Start service
sudo snap stop name.service   # Stop service
sudo snap logs name.service   # View logs

# CONNECTIONS
snap connections              # List connections
snap connections name         # Snap connections
sudo snap connect name:plug   # Connect interface
sudo snap disconnect name:plug # Disconnect

# CONFIGURATION
snap get name                 # View config
sudo snap set name key=value  # Set config
snap get system               # System config

# CHANNELS
sudo snap refresh name --channel=edge  # Switch channel
sudo snap track name          # Show tracking

# ALIASES
sudo snap alias name.cmd cmd  # Create alias
snap aliases                  # List aliases
sudo snap unalias cmd         # Remove alias

# TROUBLESHOOTING
snap changes                  # Show recent changes
snap tasks <change-id>        # Task details
snap abort <change-id>        # Abort change
sudo snap revert name         # Revert to previous

Conclusion

Snap package manager represents the future of Linux application distribution with its universal packaging, automatic updates, and enhanced security through containerization. While it has trade-offs in disk usage and startup performance, the benefits of simplified dependency management, cross-distribution compatibility, and consistent updates make it an excellent choice for modern Linux applications.

Whether you’re a developer deploying applications, a system administrator managing updates, or a user wanting the latest software, Snap provides a robust, secure, and user-friendly package management solution.

Key Takeaways:

  • Snap packages are self-contained and work across distributions
  • Automatic updates keep your applications secure and current
  • Sandboxing provides enhanced security through confinement
  • Multiple confinement levels balance security and functionality
  • Channels allow you to choose stability vs. latest features
  • Snap is ideal for desktop applications and IoT devices

Start exploring the Snap Store and experience the convenience of universal Linux packaging!