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.
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:
- 📦 APT Chatsheet - Ubuntu’s traditional package management for system packages and libraries
- 📦 Flatpak Package Manager Chatsheet - Cross-distro desktop applications with granular permissions
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
- stable: Production-ready releases (default)
- candidate: Release candidates, pre-release testing
- beta: Beta versions with new features
- 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:
- Visit https://snapcraft.io/store
- Browse by category
- Search applications
- View ratings and reviews
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
Popular Snaps by Category
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
- APT: See our APT Package Manager Guide for system packages, libraries, and traditional Ubuntu package management
- Flatpak: See our Flatpak Package Manager Guide for desktop applications with granular permissions and no background daemon
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!
Useful Links
- Snap Official Website
- Snap Store
- Snap Documentation
- Snapcraft (Build Snaps)
- Snap Forum
- GitHub Repository
- Ubuntu Snap Guide
- Snap Store Proxy
- Interface Reference
- Security Policy