Zettelstore Contrib

Files in presenter/ of tip

Files in directory /presenter from the latest check-in

Zettel Presenter creates a slide show, handouts and more from zettel maintained by a Zettelstore.

Build instructions

Just enter go build . within the directory of this sub-project and you will find an executable called presenter.

Run instructions

# presenter -h
Usage of presenter:
  -l string
        Listen address (default ":23120")
  [URL] URL of Zettelstore (default: "")


Further configuration is stored in the metadata of a zettel with the special identifier 00009000001000. Currently, two keys are supported:

Slide set

A slide set is a zettel, which is marked with a zettel role of the value given by the configuration key slideset-role(default: slideset, see above). Its main purpose is to list all zettel that should act a slides for a slide show. In other word, its is basically a table of contents.

Internally, zettel presenter tries to find the first list of the slide set zettel, either an ordered or unordered list. For all first-level list items, zettel presenter investigates the very first link reference. If this reference point to a zettel, this zettel will be part of the slide set.

Of course, it is allowed to reference the same zettel more than one time, if you reference it in different first-level items of the slide set zettel.

The second purpose of the slide set zettel is to specify data needed for a slide show / handout. This data is stored inside the metadata of the zettel:


A slide is just a zettel referenced by slide set zettel. Zettel Presenter does not enforce a special zettel role. However, it is good practice to use a special zettel role, i.e. "slide". This makes it easier to find a specific slide by listing only zettel of the zettel role.

Similar to a slide set zettel, zettel presenter looks at the metadata of a slide zettel:

Slide roles

Currently, two slide roles are implemented: a slide show and a handout.

Presenting a slide show is the main use case of zettel presenter. All relevant slides are collected, and a HTML-based slide show is produced.

The handout is another HTML document, that contains all relevant slides. There are no slide show elements, all slides content is shown in a linear way. Referenced zettel that are not part of the slide set, but have the visibility "public", are added at the end of the slide set for further reference. This document can be given to your audience, without risking to give away confidential material.

If you reference a zettel of the same slide set, an appropriate HTML link will be produced. Since a zettel may occur more than once in a slide set, referenced zettel are first searched backwards.

If you reference a zettel outside your slide set, it will be linked in the slide show. By following this link, the referenced zettel will shown, but not in the context of the slide show. As written above, such a link will only be produced in the handout, if the zettel visibility is "public". In this case, it is part of the slide set.


Zettel presenter operates in a simple way. It used the same zettel identifier as Zettelstore uses. If no zettel identifier is provided in the URL, zettel presenter shows the home zettel of Zettelstore.

If the zettel is a slide set, all relevant zettel are collected to be used in a slide show / handout. These zettel are presented in a numbered / ordered list. If you follow the link of such a list item, you will be directed to the given slide in a slide show.

At the bottom of the presented slide set, there is a link to produce the handout.

If the zettel is not a slide set zettel, it is shown in a relative straight-forward way, very roughly similar to the view of a zettel within the Zettelstore web user interface. This allows you to show additional content (if linked from a slide), or allows you to navigate to a slide set zettel to start a presentation.