Κῦμα (Kyma) - Ancient Greek: A wave, billow, or surge; metaphorically representing the flow and movement of ideas and presentations.
A terminal-based presentation tool that creates beautiful presentations from markdown files with smooth animated transitions.
- Markdown-based: Write your presentations in simple markdown syntax
- Rich rendering: Beautiful terminal rendering using Glamour markdown renderer
- Smooth transitions: Multiple animated transition effects between slides
- Swipe left/right
- Slide up/down
- Flip effects
- Hot reload: Live reloading of presentation files during editing by default
- Customizable styling: Configure borders, colors, and layouts via YAML front matter
- Theme support: Choose from built-in Glamour themes or load custom JSON theme files
- Flexible layouts: Center, align, and position content with various layout options
- Simple navigation: Intuitive keyboard controls for presentation flow (vim style btw)
- Command palette with slide search and filtering
- Direct slide jumping by number
- Multi-slide forward/backward jumping
- Quick first/last slide navigation
- Presentation timer: Built-in timer system with per-slide and global timing
- Toggle timer display with a single key
- Track time spent on each slide
- Monitor total presentation duration
- Automatic pause/resume during slide transitions
go install github.com/museslabs/kyma@latest
git clone https://github.com/museslabs/kyma.git
cd kyma
go build -o kyma
# Display a presentation
kyma presentation.md
# Display a presentation without hot reloading
kyma presentation.md -s
# Show version
kyma version
- Next slide:
→
,l
, orSpace
- Previous slide:
←
orh
- First slide:
Home
,Shift+↑
, or0
- Last slide:
End
,Shift+↓
, or$
- Command palette:
/
orp
- Opens a searchable list of all slides for quick navigation - Go to slide:
g
or:
- Jump directly to a specific slide number - Jump slides:
1-9
+h
/←
orl
/→
- Jump multiple slides backward/forward (e.g.,5h
jumps 5 slides back) - Toggle timer:
t
- Shows/hides the timer display with total and per-slide timing - Quit:
q
,Esc
, orCtrl+C
Kyma presentations use a simple format with slides separated by ----
and optional YAML front matter for configuration.
# First Slide
This is the content of the first slide
---
---
## transition: swipeLeft
# Second Slide
This slide will appear with a swipe left transition
---
---
transition: slideUp
style:
border: rounded
border_color: "#9999CC"
layout: center
theme: dracula
---
# Third Slide
This slide has custom styling with Dracula theme
---
---
style:
theme: /path/to/custom-theme.json
---
# Fourth Slide
This slide uses a custom JSON theme file
none
- No transition (default)swipeLeft
- Slide swipes in from right to leftswipeRight
- Slide swipes in from left to rightslideUp
- Slide slides up from bottomslideDown
- Slide slides down from topflip
- Flip transition effect
You can customize each slide's appearance using the style configuration:
style:
border: rounded # Border style: normal, rounded, double, thick, hidden, block
border_color: "#FF0000" # Hex color for border (or "default" for theme-based color)
layout: center # Layout positioning: center, left, right, top, bottom
theme: dracula # Theme name or path to custom JSON theme file
Layout can also be specified as a combination: layout: center,right
The timer display shows two timing metrics:
- Total: The total duration of the presentation
- Slide: The time spent on the current slide
The timer display appears as an overlay in the top-left corner of the screen when toggled with the t
key. The timer automatically:
- Starts when the presentation begins
- Pauses when switching slides
- Resumes when a new slide is displayed
- Maintains separate timing for each slide
- Preserves timing state during navigation
Kyma supports a global configuration file that can be used to set default styles and create named presets. The configuration file can be placed in either:
- The current directory as
kyma.yaml
- The user's config directory as
~/.config/kyma.yaml
You can also specify a custom config file path using the -c
or --config
flag:
kyma -c /path/to/config.yaml presentation.md
The configuration file follows this structure:
global:
style:
border: rounded
border_color: "#9999CC"
layout: center
theme: dracula
presets:
minimal:
style:
border: hidden
theme: notty
dark:
style:
border: rounded
theme: dracula
You can use presets in your slides by specifying the preset name:
---
preset: minimal
---
# This slide uses the minimal preset
Configuration precedence (from highest to lowest):
- Named preset configuration
- Slide-specific configuration
- Global configuration
Kyma supports both built-in Glamour themes and custom JSON theme files:
ascii
- ASCII-only stylingauto
- Automatically detected themedark
- Dark theme (default)dracula
- Dracula color schemetokyo-night
(ortokyonight
) - Tokyo Night themelight
- Light themenotty
- Plain text stylingpink
- Pink color scheme
You can create custom themes by providing a path to a JSON file that follows the Glamour StyleConfig
format. If the theme name doesn't match a built-in theme, Kyma will attempt to load it as a JSON file:
style:
theme: ./themes/my-custom-theme.json
The border color will automatically adapt to use the theme's H1 background color unless explicitly overridden with border_color
.o
For more info on how to create custom styles, you can refer to Glamour's documentation.
All contributions are welcome! If you're planning a significant change or you're unsure about an idea, please open an issue first so we can discuss it in detail.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Charm for their amazing TUI libraries:
- Bubble Tea - Terminal UI framework
- Glamour - Markdown rendering
- Lipgloss - Style definitions
- Harmonica - Smooth animations
- Cobra for CLI interface
- fsnotify for file watching capabilities
Add support for more style options like text color and background color✅ Done!Allow choosing from any glamour themes✅ Done!Support for custom JSON theme files✅ Done!- Create grid-based slide layouts with transitions for each pane
- Add more transition effects
- Support image rendering in terminals (e.g., via the Kitty protocol)