Create
t text · i image · s shape · n slide · c clone slide.
KEYNOPE MANUAL / CURRENT RELEASE
Everything required to install, author, design, present, export, and automate a Keynope deck.
Keynope 0.1.4 supports macOS 14 Sonoma or later on Intel and Apple silicon. For the native editor and automatic updates, install Keynope from the Mac App Store:
Download on the Mac App Store ↗
For the native app and the keynope CLI together, use Homebrew:
brew tap keynope/keynope
brew trust keynope/keynope
brew install --cask keynope
Without Homebrew, the direct installer places Keynope.app in ~/Applications, installs the CLI and presenter helper under ~/.keynope/bin, and adds that directory to your shell's PATH. No sudo is needed.
curl -fsSL https://keynope.sh/install | sh &&
export PATH="$HOME/.keynope/bin:$PATH"
Upgrade an existing installation with:
brew update
brew upgrade --cask keynope
The native presenter requests Screen Recording only when you share an application, window, or display. Official builds are Developer ID signed and notarized so the permission identity remains stable across upgrades.
Source builds require Go and Xcode Command Line Tools. From the repository root:
make build app
bin/keynope examples/example-deck.md
make build app creates bin/keynope, bin/KeynopePresenter.app, and bin/Keynope.app. Local builds are ad-hoc signed and can require Screen Recording permission again after rebuilding.
Run Keynope without a filename to open the startup menu. Choose New to create a starter deck or Open to choose an existing Markdown file.
keynope
keynope talk.md
Keynope begins in its visual terminal workspace. Press p to send the live presentation signal to the presenter, arrow keys or Space to advance, and ? whenever you need contextual help.
Start with ordinary Markdown.
Select and position elements visually.
Use the native second-screen surface.
A deck remains a readable Markdown file. A line containing --- separates slides. Headings, paragraphs, lists, fenced code, and Markdown images become selectable slide elements.
<!-- keynope width=160 height=45 -->
# Opening statement
The point you want remembered.
- Evidence one
- Evidence two
---
# Live code
```go
fmt.Println("hello, room")
```
The leading keynope width/height metadata records the terminal grid in which the deck was designed. Presentation surfaces and --export preserve these dimensions. Avoid removing it after you have positioned elements.

[Project repository](https://github.com/keynope/keynope)
Relative image paths resolve from the deck directory. GIF and WebP animations play in the terminal and exported presentation. Use the visual editor for placement, scale, glyph style, brightness, sharpness, layering, and links; Keynope persists those choices as compact HTML comments and image query parameters.
Master definitions, slide layouts, speaker notes, page-number policy, visual properties, and exact placement are stored inside comments. They remain invisible to ordinary Markdown viewers. Prefer editing this metadata through Keynope rather than by hand.
Keynope’s editor is keyboard-first but mouse-aware. Press Tab or Shift-Tab to move through elements, use arrows to move a selection, and press Enter to edit selected text.
t text · i image · s shape · n slide · c clone slide.
Arrows move · Shift-arrows jump ten cells · +/- resize · g scales image or shape axes.
c color · s style/settings · o outline · r/R rotate text.
[/] layer back/front · Space builds a multi-selection · </=/> align.
Type to edit, Enter commits, and Escape cancels. Use Ctrl-Z and Ctrl-Y for undo and redo. Copy, cut, and paste elements with the standard Ctrl-C, Ctrl-X, and Ctrl-V shortcuts.
1 opens the slide overview. / searches the deck and j jumps directly to a slide. Use d to delete the current slide.
Press v for the current slide’s visual properties: foreground, terminal background, header color, background pattern, and animated effect. Each mastered slide can inherit, override, or explicitly disable every property.
matrixstarsplasmaglitchdigital-snowradarneuralcircuitdata-stormflamewarpscanlinefireworksexplosion
soft-plasmaauroratopographywavesmeshconstellationribbonsdiagonal-flowblueprint
Press e or b to browse effects or backgrounds directly. The picker previews each choice against the current slide before you commit.
Press M to open Master View. A deck has one Base Master and any number of named layouts.
When a layout changes, Keynope rebinds matching content by placeholder slot and role. Content without a matching destination is retained as a local slide element.
Press # to cycle inherit, show, and hide. In Master View this controls Base or layout policy; on a slide it controls only that slide. Page numbers use the actual slide index across terminal, presenter, thumbnails, and HTML export.
Run keynope deck.md. The native helper opens on an external display when one is available and otherwise waits in the menu bar. Press p to toggle the live signal; while editing, the external surface shows TV snow instead of exposing unfinished work.
| Control | Purpose |
|---|---|
| Space / → | Next page or slide |
| ← | Previous page or slide |
| p | Toggle presentation signal |
| 0 | Start the test-card countdown timer |
| 1 | Open slide overview |
| 2 | Open and edit speaker notes |
| ? | Open contextual shortcuts |
Use the presenter menu bar’s Share submenu to place an application, window, or entire display over the live deck. Shared content is aspect-fitted with a margin so the current slide remains visible. Choose Share → Nothing to stop capture.
Sharing is video-only. Full-display capture excludes Keynope Presenter to prevent recursive capture.
keynope --classic deck.md
Classic mode runs without the native presenter companion.
keynope --export deck.md
This writes deck.html beside the source. The file is standalone and includes navigation, effects, backgrounds, terminal rendering, and the authored deck dimensions. Open it directly or serve it from any static host.
Inside the visual editor, press x to export using the active presentation dimensions. Command-line --export preserves the dimensions recorded in the deck metadata and is the mode used by the web renderer.
The public projector accepts Markdown and returns standalone Keynope HTML.
curl --fail-with-body \
-H 'Content-Type: text/markdown' \
--data-binary @deck.md \
https://projector.keynope.sh/ \
--output deck.html
You can alternatively send JSON:
{"markdown":"# Hello from Keynope"}
| Method | POST |
|---|---|
| Content types | text/markdown, text/plain, application/json |
| Maximum input | 512 KiB |
| Persistence | None; temporary files are deleted after rendering |
| Output | text/html; charset=utf-8 |
Relative images cannot be included in a Markdown-only request because the API receives no companion files. Use already-rendered text content or host the finished export with its required assets.
The authoritative shortcut view is built into Keynope: press ? in any mode and the list adapts to the current selection. These are the global essentials.
Confirm KeynopePresenter.app remains beside the real CLI inside Homebrew’s Keynope Caskroom payload. Reinstall with brew reinstall --cask keynope.
Use an official signed and notarized release. Ad-hoc local builds can receive a new identity after rebuilding. Remove stale entries in System Settings → Privacy & Security → Screen Recording, then approve the current Keynope Presenter once.
Keep the leading authored-size metadata in the deck. Current --export releases preserve it. Upgrade Keynope if an older export used the invoking terminal’s dimensions.
Verify the path is relative to the Markdown file and the asset exists. The web projector accepts one Markdown body only and therefore cannot receive local companion images.
Ask in Discussions. For reproducible defects, open a GitHub issue with your macOS version, architecture, Keynope version, steps, and a minimal deck.
Ideas, workflow feedback, presentation anecdotes, documentation improvements, bug reports, and code are welcome. Start broad proposals in Discussions and keep pull requests focused.
make test
make build