Our documentation is a community effort, published on snapcraft.io/docs via the Discourse forum hosted at forum.snapcraft.io.
We warmly welcome community contributions, suggestions, fixes and constructive feedback.
If you feel something is unclear, wrong, or broken, please don’t hesitate to leave a comment on the forum. You can also find us in the #snappy IRC channel on Libera.Chat. We always try to respond as quickly as we can.
Every documentation page is published from an equivalent doc
category forum post. Each forum post can be accessed from the Help improve this document in the forum link at the bottom of every page of our documentation.
Feel free to modify any documentation topic with updated or more insightful information. If you already participate in the snap community, you won’t need additional permissions; pages are freely editable within the forum itself. Just click on the Edit button at the bottom of the documentation article forum post:
The navigational structure, style, and content of our documentation follows the Diátaxis systematic framework for technical documentation authoring. This splits documentation pages into tutorials, how-to guides, reference material and explanatory text.
Our Documentation roadmap outlines both our short-term and long-term goals for Snap-related documentation.
Documentation consistency is vital, which is why we’re listing some guidelines below, but don’t let this formality put you off - just start writing and editing. If something is inconsistent, we’ll fix it.
As Voltaire wrote, “Perfect is the enemy of good,” and we’d rather have documentation we can fix than non-existent documentation we can’t.
The Open Documentation Academy is an initiative led by the documentation team at Canonical to provide help, advice, mentorship, and dozens of different tasks to get started on, within a friendly and encouraging environment.
A key aim of this initiative is to help lower the barrier into successful open-source software contribution, by making documentation into the gateway, and it’s a great way to make your first open source documentation contributions to Ubuntu Core, snap and Snapcraft.
But even if you’re an expert, we want the Academy to be place to share knowledge, a place to get involved with new developments, and somewhere you can ask for help on your own projects.
The best way to get started is with our task list . Take a look, bookmark it, and see our Getting started guide for next steps.
Stay in touch either through the task list, or through one of the following locations:
If you’d like to ask us questions outside of our public forums, feel free to email us at docsacademy@canonical.com.
In addition to the above, we have a weekly Documentation Office Hours starting at 16:00 UTC every Friday. Everyone is welcome, and links and comments can be found on the forum post.
Finally, subscribe to our Documentation event calendar. We’ll expand our Documentation Office Hours schedule and add other events throughout the year.
Anyone can edit and contribute to our documentation, but you need to spend a little time with our Discourse forum first.
New Discourse users are temporarily limited in their capabilities (called their Trust Level) until they’ve read and participated a little in the forum. New users start at Trust Level 0, but at Trust Level 1, they can create and edit documentation freely.
Trust Level 1 is attained by:
Users at Trust Level 1 can:
One of our biggest challenges is accommodating an audience with a huge variation in experience, from beginners exploring the snap command, through snap creators experimenting with snapcraft.yaml, to experts harnessing the API and deploying snaps across thousands of IoT devices.
Consequently, we try to:
Some general tips:
We (mostly) adhere to the Ubuntu style guide. In particular:
Our navigational structure, style, and the content of our documentation follows the Diátaxis systematic framework for technical documentation authoring. This splits documentation pages into tutorials, how-to guides, reference material and explanatory text:
For further details on our Diátaxis strategy, see Diátaxis, a new foundation for Canonical documentation.
Improving our documentation and applying the principles of Diátaxis are on-going tasks. There’s a lot to do, and we don’t want to deter anyone from contributing to our docs. If you don’t know whether something should be a tutorial, how-to, reference doc or explanatory text, either ask on the forum or publish what you’re thinking. Changes are easy to make, and every contribution helps.
The navigation menu on the published docs site (https://snapcraft.io/docs) is generated automatically from a table in that page’s forum post (https://forum.snapcraft.io/t/snap-documentation/11127).
Unlike every other page in our documentation, the page hosting the navigation menu cannot be edited. This is because we need to retain some gateway control over which pages are published and where. A small error in the navigation table can completely break the final output and the redirects it contains could break the rendering of other pages too.
If you think something should be added to our navigation, either leave a comment under that page’s respective forum post, or the navigation page itself.
The code that creates the navigation and publishes our documentation from Discourse can be found here: canonicalwebteam.discourse.
Documentation is written in the Markdown format supported by Discourse.
Mostly, you don’t need to worry about the syntax. You can simply use the style toolbar in the Discourse topic editing window to mark the elements you need.
## Subheading within a document
### Subheading of a subheading
On snapcraft.io/docs
, we don’t use the top-level heading (# Heading
) because the topic title in Discourse serves this purpose.
Headings and subheadings need to use sentence case, which means the first letter is typically the only one capitalised, unless the title includes names, product names or acronyms.
For a bullet list, use the following syntax:
We (mostly) adhere to the Ubuntu style guide, for example:
- we use British English (en-GB):
- the _ise_ suffix in preference to _ize_
And for a numbered list, precede each item with 1.
(the numbering then becomes automatic, and it’s easier to insert new items):
1. This is the first item
1. This is the second
1. This is the third
1. This is a sublist
Unless a list item is particularly long (which should be avoided) and includes punctuation, don’t end the item with a full stop. If one item needs a full stop, add the full stop to other items too.
Enclose a code block with three backticks and include the type of code:
```yaml
name: gimp
version: '2.10.8'
summary: GNU Image Manipulation Program
```
The most common code types are: bash
, yaml
, json
, and no-highlight
. The last is like a miscellaneous type. It is often used to display command output.
Also, a little contentiously as it goes against the style guide, we use a command line dollar prompt ($
) to demarcate input and output in the same code block:
$ snap version
snap 2.36.1
snapd 2.36.1
series 16
ubuntu 18.04
kernel 4.15.0-39-generic
In sympathy with the command line, we replace $ with # when running commands from root.
Use a backtick to mark inline commands and other literals. For instance, to create $SNAP_DATA
:
For instance, to create `$SNAP_DATA`:
Angle brackets, <>
, are typically used to show variables in example commands:
schema://<user name>:<password>@<address>:<port>/<name>
Example variable names are acceptable if you judge that the context makes it clear enough:
# set the working directory
WORKDIR /app
# copy the repository files to it
COPY . /app
In tutorials, provide the exact values that you want the user to use:
docker-compose run web django-admin startproject myapp .
For links to internal files or external URLs, use the following format:
[visible text](url)
The visible text
is what will appear in the documentation. The url
is either the full URL of a link outside of the documentation, or the topic reference without the domain name for a page within the documentation.
To link to https://forum.snapcraft.io/t/snapcraft-overview/8940
, for example, you would use the following:
For more details, see [Snapcraft overview](/t/snapcraft-overview/8940).
The Discourse topic identifier, 8940 in the above example, is optional and can be omitted.
Discourse Markdown does not support anchor links to a position within the same page or another document.
However, you can use standard HTML within Markdown, which means we can manually add HTML anchor elements that can be linked to.
The recommended way to create anchors is using heading elements with an ID. The ID needs to have heading--
as a prefix:
<h3 id='heading--myanchor'>Link to me</h3>
To create an anchor called base-snap
, for example, enter the following into your document:
<h3 id='heading--base-snap'>Base snaps</h3>
This can now be linked to with the following:
/t/snapcraft-overview#base-snap
Use HTML sparingly as it can make the raw text difficult to read.
Admonishments in Discourse use BBtext markup syntax. Using [note]
… [/note]
draws a box around the contained text.
[note type="important" status="Info"]
An informative note. This box is dark blue.
[/note]
This produces:
An informative note.
You can omit the status header.
[note type="important"]
A note without a title.
[/note]
And its output:
A note without a title.
The type
parameter is optional, but recommended:
[note]
A note that only uses default settings.
[/note]
And its output:
A note that only uses default settings.
[note]
Changing the type
parameter changes how it is presented to the reader:
important
(default)caution
positive
negative
The below examples are produced using type and status combinations of ‘caution/Warning’, ‘positive/High score’, and ‘negative/Game over’, respectively:
[note type="caution" status="Warning"]
Here be dragons.
Uses `caution` type.
[/note]
Here be dragons.
Uses caution
type.
[note type="positive" status="High score"]
Great work.
Uses `positive` type.
[/note]
Great work.
Uses positive
type.
[note type="negative" status="Game over"]
Please try again.
Uses `negative` type.
[/note]
Please try again.
Uses negative
type.
Hyperlinks cannot be word-wrapped within admonishments. Doing so will not format the links.
Sometimes it’s useful to provide information to documentation editors. For that, add the comment inside a block quote that includes the icon. These will be excluded from the dedicated documentation web site, but will be visible in the forum when editing. It may look similar to this:
[quote]
:construction: **NOTE TO EDITORS** :construction:
This note is not visible in the dedicated documentation site.
[/quote]
When a page contains a lot of extraneous information such as walkthroughs or reference tables, a foldout can be used. This will create a collapsed header which, when clicked, will expand to display all the content below it.
Foldout syntax in Discourse uses two sets of square brackets with an open and close details tag that acts as the title in the opening brackets:
[details=Manually create a network on a 10.x.x.x subnet]
If you try to run `lxd init` on a system that is connected to a network with a `10.x.x.x` subnet,
then the final step of the Iinit* may fail with the following error:
[/details]
The above will appear as follows:
If you try to run lxd init
on a system that is connected to a network with a
10.x.x.x
subnet, then the final step of the Iinit* may fail with the following error:
Most of our documentation covers command line tools, editing and developing. However, if relevant, we highly encourage the use of images. An image should be easier to understand than text, reinforce concepts being discussed in the topic, and break the monotony of words following words.
When making images:
Images can be simply dragged and dropped into the topic you’re editing, or uploaded via the toolbar icon. It can also be helpful to edit the description field of an image link after uploading:
![description of image](url)
Last updated 2 months ago.