mdp: Markdown Presentations in the Terminal Using ncurses
A command-line based markdown presentation tool.
At a glance
- What is it?
- mdp renders Markdown files as slide decks inside a terminal, using horizontal rulers as slide separators and ncurses for display. It is a lightweight option for developers who give presentations from the command line without leaving the terminal.
- Who is it for?
- mdp fits developers who already live in the terminal and want to give a quick presentation without switching to a GUI or browser-based tool. It is not a substitute for tools that need speaker notes, presenter view, embedded video, or real-time collaboration.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 21 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Terminal Presentations Without a Browser or GUI
mdp solves a specific problem: giving a presentation without leaving the terminal. The tool reads a Markdown file, treats horizontal rulers as slide separators, and renders each section as a full-screen slide using ncurses.
The audience for this is narrow but real. Developers who SSH into remote machines, who work primarily in terminal multiplexers, or who want to keep a presentation stored as a plain text file in their repository gain a practical option here. The tool renders basic Markdown formatting including headlines, code blocks, quotes, and unordered lists, plus inline bold and underline. It also reads header lines prefixed with `@`, using the first two as title and author in the top and bottom bars.
A comparable alternative is Lookatme, a Python-based terminal presentation tool that also renders Markdown slides in the terminal. Lookatme supports extensions and plugin hooks, making it more configurable. mdp is written in C and has no plugin system, which makes it simpler but less extensible.
Installing mdp: Source Build and Package Manager Options
Building from source requires ncursesw headers. The README specifies the exact packages for several distributions:
On Raspberry Pi (Raspbian): `libncurses5-dev` and `libncursesw5-dev`. On Fedora: `ncurses-devel` and `ncurses-c++-libs`.
Once the dependency is present, the build is:
git clone https://github.com/visit1985/mdp.git
cd mdp
make
make install
mdp sample.mdThe `make install` step places the binary in `/usr/local/bin` by default. You can override `PREFIX`, `BINDIR`, and `DESTDIR` in the Makefile.
For those who prefer a package manager, the README documents several options:
apt-get install mdpOr on macOS with Homebrew:
brew install mdpArch Linux, Debian, FreeBSD, MacPorts, Slackware, and Ubuntu all have packages as well. The Cygwin package is available through the Cygwin setup program.
Navigating a Presentation: Keyboard Controls
mdp is entirely keyboard-driven. The default controls use both Vim-style keys and standard alternatives:
- Move to the next or previous slide: `h`, `j`, `k`, `l`, arrow keys, Space, Enter, Backspace, Page Up, Page Down. - Go to the first slide: `Home` or `g`. - Go to the last slide: `End` or `G`. - Jump to slide n: press the digit 1 through 9. - Reload the input file without exiting: `r`. - Quit: `q`.
The reload shortcut is useful during preparation. You can edit the Markdown file in another terminal window and press `r` to see the updated slide immediately.
All default controls are defined in `include/config.h`. Colors, keybindings, and list types can be changed there before recompiling. The README notes that color configuration applies only in 8-color mode.
Color Support and the TERM Variable
mdp supports color fading with 256-color terminals. The feature only activates when the `TERM` environment variable is set correctly:
export TERM=xterm-256colorThis is a common setup step on terminals that default to fewer colors. Without it, mdp falls back to 8-color mode. The README treats this as a precondition to note rather than an automatic detection.
Configuration beyond colors and keybindings requires editing `include/config.h` and recompiling. There is no runtime configuration file. The README points to the `docs/` folder for additional supporting materials but does not detail their contents.
What mdp Does Not Support
mdp renders a fixed subset of Markdown. The README documents support for headlines, code blocks, quotes, and unordered lists at the line level, plus bold, underline, and inline code. Ordered lists, tables, links, images, and nested formatting are not listed as supported features.
The tool has no speaker notes, no presenter view showing the next slide, no timer, and no audience display mode. A presenter showing slides to a room would need to mirror the terminal, which works but provides no preview of upcoming content.
There is also no export to PDF, HTML, or any other format. mdp is a viewer, not a converter. If your audience needs a file they can open later, mdp is not the right tool for producing that artifact.
The license is GPL-3.0, which means modifications must be released under the same terms if distributed.
For developers who want a more configurable terminal presentation tool with plugin support, Lookatme is a Python-based alternative. Lookatme renders Markdown slides in the terminal but adds an extension system for custom rendering. The trade-off is that Lookatme requires Python and pip rather than a compiled C binary, and its startup overhead is higher. mdp's single compiled binary runs on any system with ncurses without additional dependencies.
Debugging and the Build System
The Makefile includes an address sanitizer debug build:
make DEBUG=1This sets `-fsanitize=address -O0 -Wall -g` and disables linker stripping. It is intended for contributors investigating memory issues, not for end users.
The repository includes a `.gdbinit` file, which suggests the maintainer uses GDB during development. Tests are in the `tests/` directory and run with Python 3:
make testThe Makefile also includes an `uninstall` target that removes the binary and man page from the install paths. The man page is installed as `mdp.1`.
The repository includes a `sample.md` file at the top level that demonstrates the expected Markdown format, including the `---` horizontal ruler used as a slide separator and the `@` prefix for title and author metadata lines. It is a useful starting point before writing your own deck. An `AUTHORS` file lists contributors, and a `CREDITS` file acknowledges any third-party code included in the project.
Editorial conclusion
mdp fits developers who already live in the terminal and want to give a quick presentation without switching to a GUI or browser-based tool. It is not a substitute for tools that need speaker notes, presenter view, embedded video, or real-time collaboration. Before committing to it, check that your system provides ncursesw headers, since the build will fail without them. The project had its last push on 2026-09-09 and accepts installation on a wide range of distributions.
Frequently asked questions
What Markdown features does mdp support?
According to the README, mdp supports line-level formatting including headlines, code blocks, quotes, and unordered lists, plus inline bold, underlined text, and inline code. Ordered lists, tables, and images are not listed as supported.
Does mdp work on macOS?
The README documents macOS support through Homebrew (`brew install mdp`) and MacPorts (`sudo port install mdp`). Building from source on macOS uses the `ncurses` library rather than `ncursesw`, as the Makefile detects Darwin and switches automatically.
Can mdp configuration be changed without recompiling?
The README states that colors, keybindings, and list types are configurable via `include/config.h`, but changes require recompilation. There is no runtime configuration file.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/visit1985-mdp)