Terminal-based presentation tool and utilities with zero external Mix deps.
- Present markdown files in your terminal
- Keyboard navigation (space/enter to advance, arrows, vim keys)
- Optional inline image rendering (sixel) when available
- Includes a simple ASCII art generator for images
Complete setup from scratch (no Elixir required):
# 1. Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Install asdf version manager
brew install asdf
# 3. Add asdf to your shell (choose your shell)
# For bash:
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.bash_profile
# For zsh:
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc
# 4. Restart your terminal or source your profile
source ~/.bash_profile # or ~/.zshrc
# 5. Install Elixir and Erlang plugins
asdf plugin add erlang
asdf plugin add elixir
# 6. Clone this repository
git clone https://github.com/ckochx/ElixirNoDeps.git
cd ElixirNoDeps
# 7. Install the exact versions specified in .tool-versions
asdf install
# 8. Build the presentation tools
./scripts/build_scripts.sh
# 9. Try it out!
./present sample_presentation.mdOptional: Enhanced experience with images
# Install ImageMagick for ASCII art generation
brew install imagemagick
# Install iTerm2 for sixel image support
brew install --cask iterm2
# Then in iTerm2: Preferences → Profiles → Terminal → Enable "Sixel scrolling"- Elixir/Erlang toolchain. If you use
asdf, this repo includes a.tool-versionsfile.- From the project root:
asdf install
- From the project root:
# From project root
asdf install # if you use asdf (recommended)
./scripts/build_scripts.sh # builds both `present` and `remote_present` executables
# Or build individually:
mix escript.build # builds the `present` executable
MIX_ESCRIPT_NAME=remote_present mix escript.build # builds the `remote_present` executable- With Mix (works everywhere):
mix present path/to/slides.md- With escript (generates
presentin project root):
./present path/to/slides.md- With Mix (works everywhere):
mix remote_present path/to/slides.md- With escript (generates
remote_presentin project root):
./remote_present path/to/slides.md- Next slide: Just press Enter (or Space+Enter, n+Enter)
- Previous slide:
p+Enter (or k+Enter, h+Enter) - First slide:
0+Enter - Last slide:
$+Enter - Jump to slide:
1-9+Enter - Refresh:
r+Enter - Help:
?+Enter or/+Enter - Quit:
q+Enter
Note: All commands require pressing Enter after the key. This ensures reliable navigation across all terminal environments.
Control your presentation from your phone while the audience sees a clean terminal display. Perfect for conferences where WiFi is unreliable!
# Start presentation with remote control
mix remote_present slides.md
# OR
./remote_present slides.md
# With custom port
mix remote_present slides.md --port 3000
# OR
./remote_present slides.md --port 3000
# Try the demo
mix remote_present --demo
# OR
./remote_present --demo- Terminal presentation for the audience (clean, professional)
- Web interface for the presenter (speaker notes + controls)
- Local network only - no WiFi required
Step 1: Create laptop hotspot
- macOS: System Preferences → Sharing → Internet Sharing
- Windows: Settings → Network → Mobile hotspot
- Linux: Settings → WiFi → Use as Hotspot
Step 2: Connect phone to hotspot
Step 3: Start presentation
mix remote_present slides.md
# OR
./remote_present slides.mdStep 4: Connect to displayed URL on your phone
- First slide shows connection URL (e.g.,
http://192.168.1.100:8080) - Open that URL in your phone's browser
- You'll see slide controls and speaker notes
Step 5: Present with confidence!
- Press Enter to advance past connection slide
- Control all navigation from your phone
- Audience sees clean terminal presentation
Add private speaker notes using HTML comments:
# My Slide Title
Public content that audience sees.
<!-- Speaker notes: Remember to mention the key benefits. Only you see this on your phone! -->- 📱 Mobile-optimized interface - works on any phone/tablet
- 📝 Speaker notes - visible only to you
- 🎮 Slide controls - Next, Previous, Go to slide number
- 📊 Progress tracking - see current slide (e.g., "5/20")
- ⚡ Real-time sync - terminal updates instantly
- 🔒 No internet required - uses local network only
For detailed setup instructions, see REMOTE_CONTROL_SETUP.md.
Generate ASCII art from an image:
mix asciify path/to/image.pngInline images in the terminal are supported via sixel when both ImageMagick and a sixel-compatible terminal are available:
- ImageMagick: Install with
brew install imagemagick - Sixel-compatible terminal: Standard terminals like Terminal.app don't support sixel
- iTerm2 (recommended for macOS):
brew install --cask iterm2
If sixel is not available, images will be rendered as ASCII art (which may appear as compressed text). The presentation will still run normally.
Run tests:
mix testSome tests depend on ImageMagick. To skip them:
mix test --exclude requires_imagemagick- Inspired by the idea of building useful tools with no external Mix dependencies
- Courtesy of: https://github.com/papa-whisky and https://github.com/papa-whisky/elixir_ascii_image