mfontanini/presenterm
62.7
Adequate · 29 September 2026
22.2k
lines of production code
Rust
primary language
2
measurements over time
What this system is
This system is a terminal-based presentation engine that renders slideshows from Markdown files with rich formatting and syntax highlighting. It supports dynamic code snippet execution, image display via multiple terminal protocols, and exports to PDF and self-contained HTML. The tool features a modular architecture for configuration, theming, and rendering, enabling live reloads, speaker notes, and various visual transitions within a terminal environment.
How it got here
2023 — Initial project scaffolding and core engine development
7 changes.
This period established the foundational structure of the presenterm project, including repository configuration, licensing, and Nix-based build systems. It focused on developing the core presentation engine, featuring a modular markdown parser, a new rendering subsystem with layout validation, and a comprehensive YAML-based configuration system. Additionally, automation scripts were introduced to manage configuration schemas, changelogs, and upstream syntax highlighting assets.
2025 — Terminal rendering and UI expansion
12 changes.
This period focused on significantly expanding the application's terminal capabilities by introducing a modular image rendering system with support for multiple graphics protocols and ANSI parsing. Concurrently, the project enhanced the user interface with customizable footers, modals, and transition animations, while adding features for code snippet execution and HTML export.
Features
Add HTML export with mobile support and self-contained output
Users can now export presentations to HTML in addition to PDF. The generated HTML is self-contained, respects font sizes, and includes JavaScript to handle slide navigation via keyboard arrows, touch swipes, and clicks, while automatically scaling to fit the browser window width for mobile device support. The export process also retains the slide position in the URL hash.
src/export · high confidence
Added presentation diffing and async content polling
The presentation module now includes a \PresentationDiffer\ that detects changes between presentations by comparing slide content and structure, enabling features like automatic navigation to modifications. Additionally, a background \Poller\ has been introduced to handle asynchronous content rendering, allowing dynamic elements to refresh slides or display errors without blocking the main UI thread.
src/presentation · high confidence
Automated bat asset update and verification process
The system now includes scripts to automatically fetch and verify the latest syntax highlighting and theme assets from the upstream bat repository. The update script pulls the specified bat version, extracts the compiled syntaxes and themes binaries, and records the source git hash, while a separate verification script ensures local assets match the upstream source by comparing SHA-256 hashes. This ensures that syntax highlighting and theming capabilities remain up-to-date with the latest bat releases without manual intervention.
bat · high confidence
Initial repository scaffolding and configuration
This change establishes the foundational structure for the presenterm project by adding essential configuration and metadata files. It introduces a \.editorconfig\ to enforce consistent indentation for shell scripts, a \LICENSE\ file under the BSD 2-Clause license, and a \README.md\ detailing the tool's features and installation methods. The project's build system is configured via \flake.nix\ and \flake.lock\ for Nix-based development, while \build.rs\ is added to embed theme assets at compile time. Additionally, \config.sample.yaml\ provides a reference for user configuration, \config-file-schema.json\ defines the structure for validation, and \executors.yaml\ specifies the default command-line tools for executing code snippets in various programming languages.
(repo-wide) · high confidence
Introduce presenterm configuration and presentation engine
This change introduces the core configuration system and presentation engine for the terminal slideshow tool. Users can now define global defaults (such as theme, image protocol, and overflow validation) and specific settings for third-party rendering (Mermaid, D2, Typst) and code snippets via a YAML config file. The application now supports a new 'presenter' mode for running slideshows, handles file watching for live reloads, and manages resources like themes and images with caching. It also adds CLI options for exporting to PDF and HTML, listing themes, and configuring custom keybindings.
src · high confidence
New UI module with customizable footers, centered modals, and separators
The presentation UI has been reorganized into a dedicated \src/ui\ module, introducing three key visual capabilities. First, the footer is now fully customizable via a template system that supports text variables (such as slide count, author, and title), escaped braces, and images positioned on the left, center, or right, alongside a legacy progress bar mode. Second, interactive overlays like the slide index and key bindings help are now rendered as centered modals with configurable styling and background images. Third, a new separator component allows for centered horizontal rules with headings that can either fit the window width or remain fixed.
src/ui · high confidence
New code snippet execution and highlighting engine
The application now supports executing code snippets directly within presentations, allowing users to run code and view output (including images) in real-time. This change introduces a new execution engine that loads language-specific configurations from executors.yaml, supports alternative executors (such as uv for Python), and handles PTY-based execution for interactive commands. Additionally, code highlighting has been significantly expanded to support a wide range of languages (including F\#, Julia, GDScript, D2, and TypeScript React) using bat's syntax definitions, and snippets can now be rendered with line numbers, padding, and selective highlighting of specific code blocks.
src/code · high confidence
New keyboard command system and UDP-based speaker notes
The application now uses a new, configurable keyboard command system (src/commands) that supports custom keybindings for actions like toggling a layout grid and skipping pauses. Additionally, speaker notes communication has been rewritten to use UDP sockets, allowing for non-blocking event publishing and listening across multiple instances.
src/commands · high confidence
New scripts for config schema management and changelog parsing
Added four new shell scripts to the scripts directory: generate-config-file-schema.sh and validate-config-file-schema.sh automate the creation and verification of the config-file-schema.json file using the json-schema feature; parse-changelog.sh extracts release notes for a specific version from CHANGELOG.md; and test-pdf-generation.sh verifies PDF export functionality using presenterm-export 0.2.0.
scripts · high confidence
New slide and fade transition animations for terminal output
The \src/transitions\ module now includes three new animation types: \CollapseHorizontalAnimation\, which shrinks content from the edges inward; \SlideHorizontalAnimation\, which slides content horizontally across the viewport; and \FadeAnimation\, which randomly reveals changed characters one by one. These are implemented via new files (\collapse\_horizontal.rs\, \slide\_horizontal.rs\, \fade.rs\) and registered in \mod.rs\, providing users with visual transition effects when navigating between terminal states.
src/transitions · high confidence
New snippet execution modes: PTY, image output, and validation
The UI execution module now supports three new snippet execution modes alongside the existing standard output mode. Snippets can now run in a pseudo-terminal (PTY) for interactive programs, render their stdout as an image, or be validated against expected success/failure outcomes. The module also introduces a disabled state that displays a message when execution is disabled, and restructures the execution attributes to support these new capabilities.
src/ui/execution · high confidence
New terminal image protocol implementations
The terminal now supports rendering images via multiple protocols: ASCII art (using top/bottom block characters with color blending), iTerm2 inline images (supporting both single and multipart modes, including tmux passthrough), Kitty graphics protocol (supporting static images and animated GIFs via temporary files), Sixel (using the icy\_sixel crate), and a raw protocol for generating inline HTML data URIs. These changes enable image display in a wider range of terminal environments and configurations.
src/terminal/image/protocols · high confidence
New terminal module with ANSI parsing, capability detection, and image protocol support
The \src/terminal\ module has been introduced to handle terminal-specific rendering logic, including a new ANSI parser for processing escape codes (bold, italic, colors) and a capability detection system that queries the terminal for support of Kitty graphics (local/remote), Sixel, and font size protocols. The module also implements image printing via multiple protocols (Iterm2, Kitty, Sixel, ASCII blocks) and manages background colors via OSC 11, with specific handling for tmux environments to avoid display issues.
src/terminal · high confidence
Architecture
Introduce new modular markdown parsing and text styling infrastructure
The markdown processing logic has been restructured into a new modular architecture within the \src/markdown\ directory. This change introduces dedicated modules for elements (\elements.rs\), HTML parsing (\html.rs\), text styling (\text\_style.rs\), and text weighting/layout (\text.rs\), replacing the previous flat structure. The new \MarkdownParser\ leverages \comrak\ with extensions for alerts, wikilinks, footnotes, and superscripts, while the \HtmlParser\ now strictly handles \\<span\>\ and \\<sup\>\ tags with CSS attribute support. Text representation has been refined with \WeightedLine\ and \WeightedText\ to accurately handle Unicode widths and font scaling, and \TextStyle\ now supports granular flags for bold, italics, strikethrough, and superscript, resolving raw colors against a palette.
src/markdown · high confidence
Refactored image rendering architecture with unified printer and scaling logic
The image rendering subsystem has been reorganized into a modular structure under \src/terminal/image\, introducing a unified \ImagePrinter\ that dispatches to specific protocol handlers (Kitty, Iterm2, Sixel, Ascii, Raw) based on the terminal's graphics mode. This change centralizes image registration and caching via a new \ImageRegistry\ and \Image\ struct, which now includes an ASCII cache for performance. Additionally, a dedicated \ImageScaler\ module handles layout constraints, ensuring images fit within window dimensions while preserving aspect ratios, and includes comprehensive tests for various resizing scenarios.
src/terminal/image · high confidence
Behavioural changes
New modular render engine with layout, overflow validation, and ASCII scaling
The rendering subsystem has been restructured into a modular engine (\src/render/engine.rs\) that manages terminal drawing via a \TerminalIo\ interface, introducing a \Layout\ module for precise text positioning (left, right, center with margins) and a \Validate\ module to detect horizontal or vertical content overflow before display. A new \AsciiScaler\ pre-scales ASCII images in the background to improve transition performance, while \WindowSize\ now supports pixel-aware shrinking to maintain aspect ratios when content is capped. These changes enable more robust handling of terminal dimensions, configurable alignment when content exceeds screen bounds, and safer rendering of complex layouts.
src/render · high confidence
Presentation builder refactored into modular components with improved error reporting
The presentation builder logic has been restructured from a single monolithic file into distinct modules (comment, error, frontmatter, heading, images, list, quote, snippet, table, sources) to improve maintainability. This change introduces a new, structured error handling system that provides richer context for build failures, including source file paths, line/column numbers, and formatted error messages. It also adds support for importing external markdown files via the \include\ comment command, allows configuring the number of newlines between list items, and refactors how snippet execution and validation are handled within the builder pipeline.
src/presentation/builder · high confidence
Theme system refactored with split raw/runtime models and expanded styling options
The theme system has been restructured to separate raw configuration parsing from runtime presentation logic, introducing a \raw\ module for deserialization and a \clean\ module for processed styles. This change enables several new user-facing styling capabilities: slide titles can now include a configurable prefix, support bold/italic/underline modifiers, and use 3-digit hex colors; headings can be styled with bold, italic, or underline; and the \italics\ theme key now accepts \italic\ as an alias. Additionally, the system now supports d2 diagrams, configurable code block line numbers, and a layout grid toggle, while fixing issues with custom theme symlinks and footer error handling.
src/theme · high confidence
Dependencies
Update presenterm to v0.16.1 with major dependency upgrades
The presenterm terminal slideshow tool has been updated to version 0.16.1, accompanied by a significant refresh of its Rust dependencies. Key upgrades include comrak moving from 0.18 to 0.48.0, clap gaining 'string' and 'env' features, and the introduction of new libraries such as icy\_sixel for sixel protocol support, fastrand for random number generation, and directories for config path resolution. The Cargo.lock file has also been migrated from format version 3 to 4, and various underlying crates like anstream, anstyle, and bitflags have been bumped to newer versions to support these changes.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 69 → 63 (-6.5)
- Rubric changed (rubric-2026.09.9 → rubric-2026.09.17) — scores are not directly comparable.
Lenses
- Code Health 92 → 92 (+0.0)
- Architecture 96 → 88 (-8.2)
- Maturity 67 → 67 (+0.1)
- Readiness 68 → 51 (-16.8)
- Security 63 → 70 (+7.4)
Resolved (3)
- Boundary-crossing change coupling: mod.rs ↔ layout.rs (src/presentation/builder/mod.rs)
- Documentation: no installation or build instructions (docs/src/install.md)
- Hotspot: src/presentation/builder/snippet.rs (src/presentation/builder/snippet.rs)
New (14)
- Documentation: written for insiders (docs/src/features/images.md)
- Outdated: anyhow
- Outdated: clap
- Outdated: fastrand
- Outdated: flate2
- Outdated: image
- Outdated: libc
- Outdated: once_cell
- Outdated: serde
- Outdated: serde_json
- Outdated: socket2
- Outdated: tempfile
- Outdated: thiserror
- Projects may be oversized for their cohesion
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mfontanini/presenterm was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 5f8add11a24af9d257fd18da48c8004dd9c516f8 — the exact code this score is about.
- Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-705631bb727e.