Creating snapcraft.yaml

When you’ve collated an application’s requirements, the next step in snap building is to generate the snapcraft.yaml file. This will be used by the snapcraft command to build your snap.

See Snapcraft overview if you don’t yet have snapcraft installed.

A simple snapcraft.yaml template can be generated by running snapcraft init in an empty directory:

$ snapcraft init
Created snap/snapcraft.yaml.

The snapcraft.yaml template can be found within the snap/ directory, and can even be built into a snap without further modification:

$ snapcraft
Using 'snap/snapcraft.yaml': Project assets will be searched for from the 'snap' directory.
Launching a VM.
Launched: snapcraft-my-snap-name
[...]
Pulling my-part
Building my-part
Staging my-part
Priming my-part
Snapping 'my-snap-name' |
Snapped my-snap-name_0.1_amd64.snap

For all but the simplest snaps, a final and fully functional snapcraft.yaml is the product of an iterative process. This process involves stepped revisions to tackle requirements, as outlined below:

  1. Global metadata

    This is the data at the top of your snapcraft.yaml. It’s typically easily to obtain, and describes your snap in general terms, including your snap’s name, version, icon location and summary.

    For help completing these details, see Global metadata.

  2. Choose a base

    The base is the foundation layer of your snap. It provides the run-time environment for your snap, and includes basic requirements and dependencies.

    To choose the best base for your project, see Base snaps.

  3. Add parts

    Parts are the building blocks of your snap. They’re used to describe your application’s components, its build and run-time requirements, and those of its dependencies.

    See Adding parts for further details.

  4. Add build and staging dependencies

    Many parts will require you to know specific packages to include for the part to build and run. These are your snap’s build and staging dependencies.

    For help tracking them down and adding them to your parts, see Build and staging dependencies.

  5. Expose a command to run

    With parts defined and configured to build and generate an executable component, the next step is to define which executable components can be run, whether they’re commands or services, and how they’re going to be run on the host system.

    See Defining a command for further details.

  6. Dry-run your build

    At this point, there should be enough metadata within snapcraft.yaml to successfully build a snap with the snapcraft command.

    The resultant snap will lack important functionality, most notably interfaces, but testing a build at this point is a helpful milestone that verifies the integrity of your metadata, alongside that of your your parts and build dependencies.

    See Iterating over a build for build and testing best-practices, and Troubleshoot snap building for help with resolving build errors.

With the above requirement satisfied, the next step is to link your snap’s requirements into the wider system. This starts with Choosing a security model, and moves on to adding Snapcraft interfaces.

Last updated 2 months ago. Help improve this document in the forum.