Slidedown is a text-first presentation compiler. You write a plain text
.sd file with simple .directive{content} markup, and slidedown compiles it
to a browser-based HTML presentation.
It is meant for people who want slide decks that behave more like source code: diffable, scriptable, easy to version, and still capable of presentation effects such as progressive reveals, typewriter text, code highlighting, themes, and custom CSS.
View the README as an interactive presentation — pick a theme:
| Theme | Live Demo |
|---|---|
conventional-light |
https://fnndsc.github.io/slidedown/readme-presentation/ |
default |
https://fnndsc.github.io/slidedown/themes/default/ |
lcars-lower-decks |
https://fnndsc.github.io/slidedown/themes/lcars-lower-decks/ |
retro-terminal |
https://fnndsc.github.io/slidedown/themes/retro-terminal/ |
terminal |
https://fnndsc.github.io/slidedown/themes/terminal/ |
Slidedown is primarily managed through its Makefile. That path assumes your
system has make available.
On Linux and macOS, make is usually available through the system package
manager or developer tools. On Windows, use WSL, MSYS2, Git Bash, or another
environment that provides GNU Make. The Makefile also detects Android/Termux
and uses pip there instead of uv pip.
From a fresh checkout:
make devCompile and serve an example deck:
make presentation SOURCE=examples/minimal/minimal.sdThe first command creates .venv and installs slidedown in editable mode. The
second command compiles the deck and serves it at:
http://localhost:8000
Compile without serving:
make compile SOURCE=examples/minimal/minimal.sdServe an already compiled deck:
make serve SOURCE=examples/minimal/minimal.sdChange the theme or port:
make presentation \
SOURCE=examples/watermarked/light-watermarks-demo.sd \
THEME=conventional-light \
PORT=9000See all Makefile targets:
make helpIf you are on a system without make, the equivalent manual path is:
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/slidedown examples/minimal/ output/ \
--inputFile minimal.sd \
--theme conventional-light
cd output/
python3 -m http.server 8000.slide{
.title{Hello Slidedown}
.body{
.typewriter{> Welcome...}
.bf{Why use it?}
.o{Text-first authoring}
.o{Progressive reveal bullets}
.o{Browser-native presentation output}
}
}
Slidedown content is built from directives:
.directive{content}
.directive{.modifier{value} content}
.directive{nested .directives{work} too}
Common structural directives:
.slide{}defines one slide.title{}defines the slide title.body{}defines the visible slide content
Common formatting and behavior directives:
.bf{}bold text.em{}italic text.tt{}monospace text.code{}highlighted code block.typewriter{}typing animation.o{}progressive reveal bullet/snippet
Use --theme to select a theme:
slidedown input/ output/ --inputFile deck.sd --theme retro-terminalIncluded themes:
conventional-lightdefaultterminalretro-terminallcars-lower-decks
Use .meta{} for deck-wide settings:
.meta{
title: "Demo Deck"
typography:
baseline: presentation
snippets:
marker: "-> "
}
Typography baselines include compact, normal, large, xlarge, and
presentation. For per-slide tuning, add a density class:
.slide{.class{dense}
.title{Detailed Slide}
.body{
Dense slides fit more content while preserving presentation scale.
}
}
Supported density classes are hero, roomy, dense, and compact.
- Complete guide:
docs/sd-guide.adoc - Tips and patterns:
docs/tips-n-tricks.adoc - LCARS theme guide:
docs/lcars.adoc - Type system reference:
docs/types.adoc - Examples:
examples/ - README presentation source:
docs/readme-presentation.sd
Run the checks:
make lint
make typecheck
make testUseful development targets:
make format
make clean
make purge
make readme-presentationProject conventions:
- Python code uses explicit type hints
- Python lines stay under 80 columns
- Public docstrings use Google-style
ArgsandReturnssections - Internal names prefer RPN-style
object_verbnaming where practical
Slidedown is released under the MIT License. See LICENSE.