18
slide-

SLIDEDOWN
 ____  _     ___ ____  _____ ____   _____        ___   _ 
/ ___|| |   |_ _|  _ \| ____|  _ \ / _ \ \      / / \ | |
\___ \| |    | || | | |  _| | | | | | | \ \ /\ / /|  \| |
 ___) | |___ | || |_| | |___| |_| | |_| |\ V  V / | |\  |
|____/|_____|___|____/|_____|____/ \___/  \_/\_/  |_| \_|
                                                         


Text-first presentation compiler with behavioral markup.


View as Interactive Presentation:
https://fnndsc.github.io/slidedown/readme-presentation/


Documentation: docs/
Examples: examples/
What is slidedown?
Write presentations like you write code —
plain text in, browser slideshow out.


Text-first authoring — diffable, scriptable, version-controlled
Behavioral markup — .directive\{content\} syntax
Interactive effects — typewriter animations, progressive reveals
Single-file workflow — one .sd source → standalone HTML
Themes
Five built-in themes — same source, different compile:


conventional-light → https://fnndsc.github.io/slidedown/themes/conventional-light/
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/


Select with --theme at compile time.
Quick Start



git clone https://github.com/FNNDSC/slidedown
cd slidedown
make dev
    


Then compile and serve an example:

make presentation SOURCE=examples/minimal/minimal.sd
# Open http://localhost:8000
    
Quick Start — no make
Without make, use the slideshow script directly:


./slideshow examples/minimal/minimal.sd --theme conventional-light
    


Or the raw CLI:

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
slidedown examples/minimal/ output/ --inputFile minimal.sd
cd output/ && python3 -m http.server 8000
    
Directive Syntax
The core syntax is simple:

.directive{content}
.directive{\.modifier{value} content}
.directive{nested \.directives{work} too}
    


Structure:
.slide{} — defines a slide
.title{} — slide title
.body{} — slide content
Formatting & Effects
Formatting directives:
.bf{} — bold
.em{} — italic
.tt{} — monospace
.code{} — syntax-highlighted code block


Behavioral directives:
.typewriter{} — typing animation
.o{} — progressive reveal bullet
.font-standard{} / .font-slant{} — ASCII art titles
A Minimal Example
.slide{
  \.title{My First Slide}
  \.body{
    \.typewriter{> Initializing...}

    \.bf{Features:}
    \.o{\.em{Text-first} authoring}
    \.o{\.tt{Behavioral} markup}
    \.o{Interactive \.bf{effects}}
  }
}
    
Usage — Makefile
# Compile and serve
make presentation SOURCE=examples/minimal/minimal.sd

# Change theme or port
make presentation SOURCE=deck.sd THEME=retro-terminal PORT=9000

# Compile only (no server)
make compile SOURCE=deck.sd

# Serve an already-compiled deck
make serve SOURCE=deck.sd
    
Usage — slideshow & CLI
Via slideshow script:
./slideshow path/to/deck.sd --theme lcars-lower-decks
./slideshow path/to/deck.sd --no-serve --outputdir /tmp/out
    


Direct CLI:
slidedown inputdir/ outputdir/ --inputFile deck.sd --theme terminal
    


See all Makefile targets:
make help
    
Project Structure
slidedown/
├── src/
│   ├── lib/
│   │   ├── parser.py        # .sd syntax parser
│   │   ├── compiler.py      # AST → HTML compiler
│   │   ├── directives.py    # Directive implementations
│   │   ├── theme.py         # Theme loader
│   │   └── theme_base.py    # Theme hook system
│   └── models/              # Type definitions
├── themes/                  # 5 built-in themes
├── assets/                  # CSS, JS, HTML templates
├── docs/                    # Docs + hosted presentations
├── examples/                # Example .sd decks
└── tests/                   # 97 tests
    
Testing
# Run all tests
make test

# Specific file
pytest tests/test_parser_basic.py -v

# With coverage
make coverage
    


97 tests across 5 files:
test_parser_basic — directive parsing
test_parser_modifiers — .style{} and .class{} extraction
test_parser_nesting — recursive structure
test_parser_escaping — escape sequences
test_e2e_compilation — full pipeline
Architecture
Functional pipeline:

.sd source → Parser → AST → Compiler → HTML
               ↓         ↓        ↓
          ProgramState → → → → → →
    


State Bus — ProgramState dataclass carries pipeline state
Inside-Out Compilation — children compiled before parents
Theme Hook System — themes subclass ThemeHooks for custom layouts
Directive Registry — extensible, add new directives easily
LCARS Theme
The lcars-lower-decks theme brings a Star Trek LCARS
interface to your presentations.


Dynamic topbar scaling: [ / ] keys or TB button
Dynamic gutter scaling: \{} / \ keys or GW button
Four stops: 100% → 75% → 50% → 25%
Scale state persists across reloads via localStorage
HIDEDETAIL / SHOWDETAIL collapses the full topbar


Live demo:
https://fnndsc.github.io/slidedown/themes/lcars-lower-decks/
Features
Parser — recursive directive parsing
Compiler — AST to HTML, 97 tests passing
5 themes — extensible hook system
Typewriter animations and progressive reveal bullets
Custom CSS via .meta{css: ...}
Navbar customization
Per-slide density classes (hero, roomy, dense, compact)
Watermarks with percentage sizing
ASCII art (Figlet) and cowsay
Contributing
Developed with test-driven development:

Write tests first
Implement to pass
Refactor for clarity


Code conventions:
RPN naming: object_verb
Type hints everywhere
Google-style docstrings (Args / Returns)
Functional over imperative
Get Involved
Report issues on GitHub
Add new directive implementations
Create and share example presentations
Build new themes via the hook system
Improve documentation


Repository:
https://github.com/FNNDSC/slidedown
License & Contact
    __  _____________
   /  |/  /  _/_  __/
  / /|_/ // /  / /   
 / /  / // /  / /    
/_/  /_/___/ /_/     
                     


Licensed under the MIT License. See LICENSE file for details.

Author: Rudolph Pienaar Issues: github.com/FNNDSC/slidedown/issues

   

Created with slidedown slide