Getting started
Install
Go 1.27.2 or later:
go install github.com/go-slides/slides/cmd/slides@latestslides is one static Go binary with no cgo: nothing else to install, no
Node, no Chrome. This page describes v0.9.0.
A first deck
Any Marp deck is one. Save this as talk.md:
---
marp: true
theme: default
paginate: true
footer: "{{ .talk }}"
data:
talk: Pure Go slides
topics: [Why, How, Next]
---
<!-- _kind: title -->
# {{ .talk }}
{{ range .topics }}
---
# {{ . }}
{{ end }}The front matter is Marp’s, plus data:. The body is a Go template: the
range writes one slide per topic, each starting with ---, and the first
slide is of the built-in kind title (no header, no footer, no page number).
Build it
slides talk.md # writes talk.html beside the deck
slides -o slides.html talk.md # or somewhere else; -o - for standard outputslides with no command is slides build. Flags may come before or after the
deck. Open the HTML in a browser; the keyboard moves between slides.
Export images, PDF, PPTX and ODP
slides talk.md --pdf # one page per slide, with an outline
slides talk.md --images png # talk.001.png, talk.002.png, …
slides talk.md --image jpeg # the first slide only
slides talk.md -o out/slides.pdf # the extension picks the format; out/ is created
slides talk.md --images jpeg --jpeg-quality 90
slides talk.md --images png --image-scale 2 # 2560×1440 for 16:9
slides talk.md --pdf --allow-local-files # images from under the deck's directory
slides talk.md --pptx # or -o talk.pptx, with notes
slides talk.md --odp # or -o talk.odp: the same, as OpenDocumentNo browser is involved: go-webengine renders the slides and go-pdfkit writes
the PDF. Local images are refused unless --allow-local-files is given.
Since v0.5.0 the slides of a PPTX or ODP are editable — text boxes, shapes
and pictures, fonts embedded — where marp-cli’s are pictures; --pptx-raster
keeps pictures (Editable PPTX and ODP). Since v0.4.0 the PDF is vectors, its text
selectable (v0.3.0 wrote one image per page). See Command line.
Expand it
slides expand talk.mdprints the same deck as plain Marp Markdown (output of main at
4ae5c49, 2026-10-18):
---
marp: true
theme: default
paginate: true
footer: "Pure Go slides"
---
<!--
_class: "lead"
_footer: ""
_paginate: "false"
-->
# Pure Go slides
---
# Why
---
# How
---
# NextThe four slides the range generated, the footer with its value, and the
title kind replaced by the spot directives it stands for. Anything that reads Marp — marp-cli, the VS
Code extension — can take it from there, so nothing written with go-slides'
additions is locked in.
Next
- Marp compatibility: what is read the way Marp reads it.
- Templates and Kinds: the two additions.
- Command line: every command and flag.
Created on by tannevaled
Modified on by tannevaled