Top Related Projects
Package, distribute, and update any app for Linux and IoT.
Linux application sandboxing and distribution framework
Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.libera.chat
Nix, the purely functional package manager
Issue tracker and new submissions
Quick Overview
Snapd is the daemon that manages and maintains snap packages on Linux systems. It is a core component of the Snap package management system, developed by Canonical, which allows for the distribution of self-contained, sandboxed applications across various Linux distributions.
Pros
- Cross-distribution compatibility: Snaps work on most major Linux distributions
- Automatic updates: Snapd manages updates for installed snap packages
- Sandboxed applications: Improved security through isolation of applications
- Easy rollbacks: Ability to revert to previous versions of installed snaps
Cons
- Larger package sizes: Snaps tend to be larger than traditional packages due to bundled dependencies
- Slower startup times: Initial launch of snap applications can be slower compared to native packages
- Limited system integration: Some snaps may have difficulty integrating with system themes or accessing certain system resources
- Increased disk usage: Multiple versions of dependencies can be stored, leading to higher storage requirements
Getting Started
To get started with snapd on a supported Linux distribution:
-
Install snapd (if not already installed):
sudo apt install snapd # For Ubuntu/Debian-based systems sudo dnf install snapd # For Fedora/RHEL-based systems
-
Enable the snapd service:
sudo systemctl enable --now snapd.socket
-
Install a snap package:
sudo snap install <package-name>
-
List installed snaps:
snap list
-
Update all installed snaps:
sudo snap refresh
For more detailed information and advanced usage, refer to the official Snapcraft documentation: https://snapcraft.io/docs
Competitor Comparisons
Package, distribute, and update any app for Linux and IoT.
Pros of Snapcraft
- More user-friendly for package creators, with a focus on simplifying the snap building process
- Offers a higher-level abstraction for creating snaps, reducing the learning curve
- Provides better integration with various build systems and programming languages
Cons of Snapcraft
- Less control over low-level system interactions compared to snapd
- May introduce additional complexity for simple snap packages
- Potentially larger resource footprint due to its higher-level abstractions
Code Comparison
Snapcraft (YAML configuration):
name: my-app
version: '1.0'
summary: A sample application
description: |
This is a longer description of the application.
Snapd (Go code snippet):
func (s *SnapManager) Install(name string, opts *InstallOptions) error {
// Implementation details
}
The code comparison shows that Snapcraft uses a more declarative approach with YAML configuration, while snapd relies on Go programming for lower-level operations. This reflects the different focus areas of the two projects, with Snapcraft emphasizing ease of use for package creators and snapd handling core system interactions.
Linux application sandboxing and distribution framework
Pros of Flatpak
- More distribution-agnostic, with wider adoption across various Linux distributions
- Sandboxing is more granular, allowing for finer control over permissions
- Supports delta updates, reducing bandwidth usage for application updates
Cons of Flatpak
- Generally larger package sizes compared to Snap packages
- Slower adoption rate by commercial software vendors
- Less integrated with system-level services and hardware access
Code Comparison
Flatpak:
flatpak install flathub org.example.App
flatpak run org.example.App
Snapd:
sudo snap install example-app
snap run example-app
Additional Notes
Both Flatpak and Snapd aim to provide universal package management for Linux systems, but they differ in their approach and implementation. Flatpak focuses on distribution-agnostic packaging and more granular sandboxing, while Snapd offers tighter integration with Ubuntu-based systems and has gained more traction with commercial software vendors. The choice between the two often depends on the specific needs of the user or distribution.
Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.libera.chat
Pros of AppImageKit
- Portable and distribution-agnostic, runs on most Linux systems without installation
- Simpler for developers to package and distribute applications
- No need for root permissions or system-wide changes
Cons of AppImageKit
- Less integrated with the host system, may not follow system themes or settings
- Limited sandboxing and security features compared to Snap's confinement
- Potential for duplication of libraries across multiple AppImages
Code Comparison
AppImageKit (AppRun.c):
int main(int argc, char *argv[]) {
char *appdir = getenv("APPDIR");
if (!appdir) {
appdir = get_appdir();
}
// ... (additional setup and execution code)
}
snapd (cmd/snap/cmd_run.go):
func runSnapConfine(info *snap.Info, snapApp string, args []string) error {
cmd := []string{dirs.DistroLibExecDir + "/snap-confine"}
if info.NeedsClassic() {
cmd = append(cmd, "--classic")
}
// ... (additional setup and execution code)
}
Both projects aim to simplify application distribution on Linux, but take different approaches. AppImageKit focuses on standalone, portable executables, while snapd provides a more integrated, sandboxed environment with stronger security features. The code snippets illustrate the different initialization processes for each system.
Nix, the purely functional package manager
Pros of Nix
- Declarative and reproducible system configuration
- Supports multiple versions of packages coexisting
- Powerful rollback and atomic upgrade capabilities
Cons of Nix
- Steeper learning curve due to unique concepts and language
- Smaller ecosystem compared to traditional package managers
- Can be more resource-intensive for system management
Code Comparison
Snapd (installing a package):
sudo snap install package-name
Nix (installing a package):
nix-env -iA nixpkgs.package-name
Key Differences
- Snapd focuses on containerized applications, while Nix aims for whole-system reproducibility
- Nix uses a functional package management approach, whereas Snapd uses a more traditional model
- Snapd is primarily designed for Ubuntu and Linux distributions, while Nix can be used on various Unix-like systems
Use Cases
Snapd:
- Quick deployment of containerized applications
- Cross-distribution package management for supported Linux systems
Nix:
- Creating reproducible development environments
- Managing complex system configurations with version control
- Scientific computing and research environments requiring reproducibility
Issue tracker and new submissions
Pros of Flathub
- Larger application ecosystem with more community-contributed packages
- Decentralized model allows for multiple repositories and independent publishing
- Better sandboxing and isolation of applications for improved security
Cons of Flathub
- Larger package sizes due to bundling dependencies
- Potential for version conflicts between Flatpak runtimes and host system
- Less integrated with traditional Linux package management systems
Code Comparison
Snapd (snapcraft.yaml):
name: my-app
version: '1.0'
summary: A sample application
description: |
This is a sample application packaged as a snap.
Flathub (flatpak-builder manifest):
app-id: org.example.MyApp
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
command: my-app
Both systems use YAML-based configuration files, but with different structures and keys. Snapd focuses on snap-specific metadata, while Flathub's manifest emphasizes runtime and SDK information for building Flatpaks.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Welcome to snapd
This is the code repository for snapd, the background service that manages and maintains installed snaps.
Snaps are app packages for desktop, cloud and IoT that update automatically, are easy to install, secure, cross-platform and dependency-free. They're being used on millions of Linux systems every day.
Alongside its various service and management functions, snapd:
- provides the snap command that's used to install and remove snaps and interact with the wider snap ecosystem
- implements the confinement policies that isolate snaps from the base system and from each other
- governs the interfaces that allow snaps to access specific system resources outside of their confinement
For general details, including installation and Getting started guides, head over to our Snap documentation. If you're looking for something to install, such as Spotify or Visual Studio Code, take a look at the Snap Store. And if you want to build your own snaps, start with our Creating a snap documentation.
Get involved
This is an open source project and we warmly welcome community contributions, suggestions, and constructive feedback. If you're interested in contributing, please take a look at our Code of Conduct first.
- to report an issue, please file a bug report on our Launchpad issue tracker
- for suggestions and constructive feedback, create a post on the Snapcraft forum
- to build snapd manually, or to get started with snapd development, see HACKING.md
Get in touch
We're friendly! We have a community forum at https://forum.snapcraft.io where we discuss feature plans, development news, issues, updates and troubleshooting. You can chat in realtime with the snapd team and our wider community on the #snappy IRC channel on libera chat.
For news and updates, follow us on Twitter and on Facebook.
Project status
Service | Status |
---|---|
Github Actions | |
GoReport | |
Codecov |
Top Related Projects
Package, distribute, and update any app for Linux and IoT.
Linux application sandboxing and distribution framework
Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.libera.chat
Nix, the purely functional package manager
Issue tracker and new submissions
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot