Snapcraft app and service metadata

The app keys and values in snapcraft.yaml detail the applications and services that a snap wants to expose, including how they’re executed and which resources they can access.

See Snapcraft top-level metadata and Snapcraft parts metadata for details on how apps and parts are configured within snapcraft.yaml.


Type: dict

A map of app-names representing entry points to run for the snap.


Type: dict

The name exposed to run a program inside the snap.

If <app-name> is the same as name, the program will be invoked as app-name. However, if they differ, the program will be exposed as <snap-name>.<app-name>.

Keys for apps

The following are keys that can be within apps. (for example, apps.<app-name>.daemon):


Type enum
Can be one of the following:

  • none (Disables the creation of an env variable wrapper.)
  • full (default)

Snapcraft normally creates a wrapper holding common environment variables. Disabling this could be useful for minimal base snaps without a shell, and for statically linked binaries with no use for an environment.


Type: string

Defines the name of the .desktop file used to start an application with the desktop session.

The desktop file is placed in $SNAP_USER_DATA/.config/autostart, and the application is started using the app’s command wrapper (<name>.<app>) plus any argument present in the Exec= line within the .desktop file.

Example: autostart: my-chat.desktop

See Autostart desktop files for an example of both the desktop file and the Exec file entry.


Type: string

The command to run inside the snap when <app-name> is invoked.

The command can be in either a snap runtime’s command path, $SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin, or an executable path relative to $SNAP.

If daemon is set, this will be the command to run the service. Only a snap with classic confinement can use a relative path because PATH isn’t modified by a wrapper in classic confinement. See Classic confinement for more details.

Examples: app-launch for an excecutable placed under $SNAP/bin. With classic confinement, bin/app-launch for an executable placed under $SNAP/bin.


Type: Array of string

A list of command to be executed, in order, before the command referenced by apps.<app-name>.command.

See Proposal: support command-chain in apps and hooks for further details.

To ensure that the Snapd distribution user running supports this feature, add the command-chain value to the assumes property.


Type: string

An identifier to a desktop-id within an external appstream file.

See Using external metadata for more details.


Type: enum

Declares that <app-name> is a system daemon.

Can be one of the following:

  • simple: the command is the main process.
  • oneshot: the configured command will exit after completion
  • forking: the configured command calls fork() as part of its start-up. The parent process is then expected to exit when start-up is complete
  • notify: the command configured will send a signal to systemd to indicate that it’s running.


Type: string

Location of the .desktop file.

A path relative to the prime directory pointing to a desktop file, commonly used to add an application to the launch menu. Snapcraft will take care of the rest.

Examples: usr/share/applications/my-app.desktop and share/applications/my-app.desktop


Type: dict

A set of key-value pairs specifying the contents of environment variables.

Key is the environment variable name; Value is the contents of the environment variable.

Example: LANG: C.UTF-8


Type: list[string]

Extensions to apply to this application.

Example: [gnome-3-28]


Type: string

The socket abstract name or socket path.

Sockets should go to a map of <socket-name>\ to objects which specify the listen-stream and (optionally) the socket-mode.

TCP socket syntax: <port>, [::]:<port>, [::1]:<port> and<port>
UNIX socket syntax: $SNAP_DATA/<path>, $SNAP_COMMON/<path> and @snap.<snap name>.<suffix>


        listen-stream: $SNAP_COMMON/lxd/unix.socket
        socket-mode: 0660


Type: type[object]

<app-name> attributes to pass through to snap.yaml without snapcraft validation.

See Using in-development features for further details.


Type: list[string]

Plugs for interfaces to connect to.

<app-name> will make these plug connections when running in strict confinement For interfaces that need attributes, see top-level plugs.

Example: [home, removable-media, raw-usb]


Type: string

Runs a command from inside the snap after a service stops.

Requires daemon to be set as the snap type.


Type: enum

Condition to restart the daemon under.

Defaults to on-failure. Other values are [on-failure|on-success|on-abnormal|on-abort|always|never]. Refer to systemd.service manual for details.

Requires daemon to be set as the snap type.


Type: list[string]

Slots for interfaces to connect to.

<app-name> will make these slot connections when running in strict confinement only. For interfaces that need attributes, see top-level slots.

Example: [home, removable-media, raw-usb]


Type: dict

Maps a daemon’s sockets to services and activates them.

Requires an activated daemon socket.

Requires apps.<app-name>.plugs to declare the network-bind plug.


Type: integer

The mode of a socket in octal.


Type: string

The path to a command inside the snap to run to stop the service.

Requires daemon to be set as the snap type.


Type: string

The length of time to wait before terminating a service.

Time duration units can be 10ns, 10us, 10ms, 10s, 10m. Termination is via SIGTERM (and SIGKILL if that doesn’t work).

Requires daemon to be set as the snap type.


Type: timer-string

Schedules when, or how often, to run a service or command.

See Timer string format for further details on the required syntax.

Requires daemon to be set as the snap type.

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