Skip to main content

A lightweight markdown presentation tool

Project description

MarkDeck ๐ŸŽฌ

A lightweight, markdown-based presentation tool that runs locally.

Python License: MIT

โœจ Features

  • ๐Ÿ“ Markdown-based: Write presentations in plain text using familiar Markdown syntax
  • ๐Ÿš€ Fast & Lightweight: No heavy frameworks, just clean HTML/CSS/JS
  • ๐Ÿ”ฅ Hot Reload: Automatically refreshes when you edit your markdown file (with --watch)
  • ๐ŸŽจ Beautiful Design: Modern, distraction-free presentation interface
  • โŒจ๏ธ Keyboard Shortcuts: Navigate efficiently with keyboard controls
  • ๐Ÿ’ฌ Speaker Notes: Hidden notes visible in speaker view
  • ๐ŸŽฏ Syntax Highlighting: Beautiful code blocks powered by highlight.js
  • ๐Ÿ“ฑ Responsive: Works on different screen sizes
  • ๐Ÿ”ง Easy Setup: Simple CLI interface, no complex configuration

๐Ÿš€ Quick Start

Installation

Install from GitHub (Recommended)

# Install directly from GitHub using uv
uv pip install git+https://github.com/orangewise/markdeck.git

# Install from a specific branch
uv pip install git+https://github.com/orangewise/markdeck.git@claude/init-markdeck-project-01DJeHxbuthmNtDFjgxToFrP

# Then run it
markdeck present examples/demo.md

Install from Local Clone

# Clone the repository
git clone https://github.com/orangewise/markdeck.git
cd markdeck

# Using uv (recommended)
uv pip install -e .

# Or using pip
pip install -e .

Run Without Installing

You can run MarkDeck directly without permanent installation:

# Create a test presentation
echo "# Hello MarkDeck

---

## Your First Slide

- Quick
- Easy
- Beautiful

---

## That's It!

Start creating your own presentations!" > test.md

# Run directly from GitHub (no installation needed)
uvx --from git+https://github.com/orangewise/markdeck.git@claude/init-markdeck-project-01DJeHxbuthmNtDFjgxToFrP markdeck present test.md

# Or use the main branch
uvx --from git+https://github.com/orangewise/markdeck.git markdeck present test.md

Create Your First Presentation

# Create a new presentation from template
markdeck init my-presentation.md

# Start presenting
markdeck present my-presentation.md

Your browser will automatically open to http://127.0.0.1:8000 with your presentation ready!

๐Ÿ“– Usage

Basic Commands

# Present a markdown file
markdeck present slides.md

# Present with hot reload (auto-refresh on file changes)
markdeck present slides.md --watch

# Present on a custom port
markdeck present slides.md --port 3000

# Present without auto-opening browser
markdeck present slides.md --no-browser

# Combine options
markdeck present slides.md --watch --port 3000

# Create a new presentation
markdeck init my-talk.md

# Create with custom title
markdeck init my-talk.md --title "My Awesome Talk"

# Validate a presentation file
markdeck validate slides.md

# Show version
markdeck --version

Markdown Syntax

Create slides by separating content with --- on its own line:

# My First Slide

This is the content of the first slide.

---

# Second Slide

- Bullet point 1
- Bullet point 2
- Bullet point 3

---

# Code Example

```python
def hello_markdeck():
    print("Hello from MarkDeck!")

Slide with Speaker Notes

This content is visible to the audience.


### Keyboard Shortcuts

| Key | Action |
|-----|--------|
| `โ†’` / `Space` / `PageDown` | Next slide |
| `โ†` / `PageUp` | Previous slide |
| `Home` | First slide |
| `End` | Last slide |
| `F` | Toggle fullscreen |
| `S` | Toggle speaker notes |
| `?` | Show help |
| `Esc` | Exit fullscreen/help |

## ๐Ÿ“ Project Structure

markdeck/ โ”œโ”€โ”€ markdeck/ # Main package โ”‚ โ”œโ”€โ”€ init.py โ”‚ โ”œโ”€โ”€ main.py # Entry point โ”‚ โ”œโ”€โ”€ cli.py # CLI interface โ”‚ โ”œโ”€โ”€ server.py # FastAPI server โ”‚ โ”œโ”€โ”€ parser.py # Markdown parser โ”‚ โ””โ”€โ”€ static/ # Frontend files โ”‚ โ”œโ”€โ”€ index.html โ”‚ โ”œโ”€โ”€ style.css โ”‚ โ””โ”€โ”€ slides.js โ”œโ”€โ”€ tests/ # Unit tests โ”œโ”€โ”€ examples/ # Example presentations โ”‚ โ”œโ”€โ”€ demo.md โ”‚ โ”œโ”€โ”€ features.md โ”‚ โ””โ”€โ”€ code-examples.md โ””โ”€โ”€ pyproject.toml # Project configuration


## ๐ŸŽจ Features in Detail

### Markdown Support

MarkDeck supports standard Markdown features:

- **Headings**: `#` through `######`
- **Bold**: `**bold**` or `__bold__`
- **Italic**: `*italic*` or `_italic_`
- **Code**: `` `inline code` ``
- **Links**: `[text](url)`
- **Images**: `![alt](url)`
- **Lists**: Unordered (`-`, `*`, `+`) and ordered (`1.`, `2.`)
- **Tables**: GitHub-flavored markdown tables
- **Blockquotes**: `> quote`
- **Code blocks**: Fenced with ` ``` `

### Code Syntax Highlighting

MarkDeck includes syntax highlighting for many languages:

```python
# Python
def fibonacci(n):
    return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2)
// JavaScript
const greet = (name) => console.log(`Hello, ${name}!`);
// Rust
fn main() {
    println!("Hello, MarkDeck!");
}

Speaker Notes

Add speaker notes that are hidden from the main view:

# My Slide

Visible content here.

<!--NOTES:
These notes are only visible when you press 'S'
- Remember to mention X
- Don't forget Y
- Time: 2 minutes
-->

Hot Reload

MarkDeck includes hot reload functionality for a seamless development experience:

# Start with watch mode enabled
markdeck present my-slides.md --watch

What happens:

  • MarkDeck monitors your markdown file for changes
  • When you save edits, the presentation automatically refreshes in your browser
  • You stay on the current slide (or closest available slide if slides were removed)
  • A brief "Presentation reloaded" notification appears

Perfect for:

  • Iterating on your presentation content
  • Live editing during practice sessions
  • Quick feedback on formatting and layout changes

๐Ÿ› ๏ธ Development

Setup Development Environment

# Clone the repository
git clone https://github.com/YOUR_USERNAME/markdeck.git
cd markdeck

# Install with development dependencies
uv pip install -e ".[dev]"

# Run tests
python -m unittest discover tests/

# Run linter
ruff check .

# Format code
ruff format .

Running Tests

# Run all tests
python -m unittest discover tests/

# Run with verbose output
python -m unittest discover tests/ -v

# Run specific test file
python -m unittest tests.test_parser

Project Commands

# Run the server in development mode
python -m markdeck present examples/demo.md

# Run linting
ruff check markdeck/ tests/

# Format code
ruff format markdeck/ tests/

๐Ÿ“š Examples

Check out the examples/ directory for sample presentations:

  • demo.md: Basic introduction to MarkDeck
  • features.md: Comprehensive feature showcase
  • code-examples.md: Syntax highlighting demo

Try them out:

markdeck present examples/demo.md
markdeck present examples/features.md
markdeck present examples/code-examples.md

๐Ÿ—บ๏ธ Roadmap

Phase 2 - Enhanced Features

  • Hot reload (watch file for changes) โœ“
  • Multiple themes (dark/light mode toggle)
  • Slide overview/grid view
  • Slide transitions
  • Two-column layouts
  • Media embedding improvements

Phase 3 - Polish & Distribution (Planned)

  • Export to PDF
  • Export to standalone HTML
  • Configuration file support
  • Custom themes
  • PyPI distribution
  • Plugin system

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for new features
  5. Run tests and linting
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

Please ensure:

  • Code follows PEP 8 style guide
  • All tests pass
  • New features include tests
  • Documentation is updated

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

โญ Show Your Support

If you find MarkDeck useful, please consider giving it a star on GitHub!


Made with โค๏ธ by the MarkDeck community

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdeck-0.1.0.tar.gz (85.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

markdeck-0.1.0-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file markdeck-0.1.0.tar.gz.

File metadata

  • Download URL: markdeck-0.1.0.tar.gz
  • Upload date:
  • Size: 85.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for markdeck-0.1.0.tar.gz
Algorithm Hash digest
SHA256 eda235248b036df188fb3d0ca9a3d2632b3184c4c7b9886fee0e04d861844013
MD5 f01f5cd6a28bb22f5bbf581cdacf7c2f
BLAKE2b-256 087e248dc843e5b0abd24f23db3bb9b20cfd6abfc20d00b53b4bf5cc53c119e2

See more details on using hashes here.

File details

Details for the file markdeck-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: markdeck-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for markdeck-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc83a9941a1c34869c337be66707999189c62c0ec26e948ffd1253727902c1d8
MD5 e63eee2530f478ad51e0509dbb5e0637
BLAKE2b-256 d2c4dbd162b7ea6f256f3419994e66df8f859387c6eb5b5b2151f27d86f71703

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page