There are multiple ways to distribute snaps as the format is not tied to a specific distribution system.
The Ubuntu Store
The main way of distributing snaps to snapd systems is through the Ubuntu Store, where you can customize how your snap is presented, review each new upload, and control publishing over several release channels. Here is the model it follows.
You’ll choose a unique developer namespace as part of the store account creation process. This namespace will represent you as a publisher in the store and you won’t be able to change it afterwards.
You can publish a snap under any name you have rights to. Names can be registered by using the
snapcraft register command, clicking New Snap on the developer portal, or by visiting the Register name page. You can also grant other developers permission to publish versions of a snap you own, for example as part of an open source project.
Uploading snaps to the store can be done directly with the
snapcraft upload command or on the store website itself. Once uploaded you choose the release channel(s) (
edge) that the snap will be published to.
It’s worth noting that when you upload a snap, the store assigns it a revision number of 1. The store then automatically increments this revision number each time you upload a new version.
After you’ve chosen a channel, your application is sent for review. Most apps are reviewed by way of automated checks, but if your app uses sensitive interfaces, it may be manually reviewed – you can find more details on the review process here.
Once your snap has been reviewed and approved, you can publish it when you’re ready, instantly making the snap available to users.
On the store, snaps can be published into different channels at the same time:
candidate (release candidate),
edge. This enables you to engage with users who are willing to test changes, and it helps users decide how close to the leading edge of development they want to be.
By default, snaps are installed from the
stable channel. Versions of snaps from other channels need to be explicitly selected:
$ snap install hello --beta $ hello Hello, snap padawan!
And a snap can be refreshed from a different channel to the one it was originally installed from:
$ snap refresh hello --beta Name Version Rev Developer Notes hello 2.10.1 29 canonical - hello (beta) installed
This switches the snap to using this channel for future updates.
Snaps are not tied to a specific type of store and you can host them any way you want.
You can find an example implementation of a custom store here. You can even deploy it locally by running
$ snap install snapstore-example. See the README of the project for details.