reveal.js is a web-based presentation framework for creating interactive HTML slide decks. It provides core presentation functionality including slide navigation, fragments, themes, transitions, and multimedia support through a modular architecture. The system consists of a core Reveal.js class that manages presentation state, specialized controllers for features like keyboard input, fragments, and slide content, and a plugin system for extending functionality (e.g., markdown, math, notes, zoom). The framework is distributed as an npm package with UMD, ESM, and TypeScript definitions, and includes a React wrapper for component-based usage. The architecture follows a modular controller pattern where each presentation aspect (keyboard, fragments, progress, etc.) is handled by a dedicated controller class with bind/unbind lifecycle methods. Plugins register initialization and destruction methods through a centralized plugin manager. The React wrapper encapsulates reveal.js functionality into reusable components (Deck, Slide, Stack, Fragment) with a useReveal hook for API access. Build processes use Vite and TypeScript for modern bundling, with separate configurations for core, plugins, and themes. The codebase demonstrates strong engineering practices: clear separation of concerns, isolated utility modules (color conversion, device detection), comprehensive TypeScript definitions, and extensive test coverage. Recent commits indicate active maintenance, and the project maintains compatibility with modern web standards while avoiding legacy dependencies. The plugin system and utility modules exhibit high reusability potential for extraction into other projects.
Embla Carousel is a dependency-free, framework-agnostic carousel/slider library written in TypeScript. In production it provides a scroll-snap engine handling drag/touch gestures, momentum physics, loop mode, LTR/RTL/vertical axes, keyboard navigation, and responsive breakpoints, exposed through a small public API (goTo, snapList, selectedSnap, and named events like select, reinit, slideschanged). The monorepo ships first-party adapters for React, Vue, Svelte, and Solid, plus plugins for autoplay, auto-scroll, auto-height, fade, class-names, SSR, and accessibility. It also contains a Next.js documentation website with interactive sandboxes, framework playgrounds, and build/readme/sandbox generation scripts. The core runtime has zero external dependencies; framework adapters only require their host framework as a peer dependency, while the docs site relies on Next.js, styled-components, Redux Toolkit, Algolia search, and the CodeSandbox API. Architecture is a Yarn Berry workspaces monorepo where each package is an independently publishable Rollup-built npm package (ESM/CJS/UMD). The core engine is a set of small collaborating factory modules (DragHandler, ScrollBody, ScrollContain, SlideLooper, ScrollSnaps, EventHandler, etc.) composed by an Engine and driven by the top-level EmblaCarousel module. Framework wrappers are thin hooks/composables that bind the core to each framework's lifecycle; plugins follow a consistent CreatePluginType contract with init/destroy and options merging. Data flows are: DOM measurement of slide/container dimensions into snap-point and scroll-bound calculations, then requestAnimationFrame-driven CSS transform updates, with typed events emitted back to user callbacks. Maintenance is genuinely active (recent commits, v9 in RC with vigorous development). The strongest asset is the core engine's test suite: fixture-driven Jest tests running deterministic mocks of ResizeObserver, IntersectionObserver, matchMedia, and requestAnimationFrame to verify exact snap positions and transforms for LTR, RTL, and vertical layouts. The main hygiene issues are committed Next.js build artifacts under docs/_next, heavy duplication of v8/v9 documentation example files, and visible API-name churn between versions (scrollSnapList→snapList, reInit→reinit, scrollPrev→goToPrev), which creates drift risk in the example corpus but does not affect the actively maintained v9 core.
presenterm is a Rust-based CLI application that renders Markdown presentations directly in the terminal. It parses Markdown into a structured intermediate representation via comrak, then builds slides as sequences of render operations. The rendering engine supports rich text, images, code highlighting through bat/syntect, column layouts, themes, slide transitions, footers, speaker notes, and interactive keyboard-driven navigation. It also includes PDF/HTML export backends and hot-reload for live presentation development.
fullPage.js is a vanilla JavaScript library for creating full-screen scrolling websites (one-page sites) with vertical/horizontal snap scrolling, sections, and slides. The codebase uses a modular ES6 architecture with separate concerns for scroll handling, mouse/touch input, keyboard navigation, state management, and DOM manipulation. It exports a main class from src/js/fullpage.js with initialization via src/js/app.js. The library manages DOM structure through CSS classes (.fp-section, .fp-slide, .active, .fp-loaded) and maintains global state in src/js/common/state.js. It supports optional jQuery integration via src/js/jquery-adaptor.js and includes polyfills for IE11 compatibility. The build system uses Rollup for bundling and Gulp for asset processing, producing distribution files in dist/. The library features lazy loading for media, responsive breakpoints, and extensive callback hooks for lifecycle management.
impress.js is a client-side JavaScript presentation framework that leverages CSS3 3D transforms and transitions to create dynamic, Prezi-like slideshows. The core library manages step navigation, camera positioning, and event handling, exposing a simple API (`impress().init()`, `next()`, `prev()`, `goto()`). It features a plugin system where each plugin is a separate file under `src/plugins/`, communicating via events. Plugins add functionality such as autoplay, markdown rendering, speaker console, touch/swipe navigation, and relative positioning. The build process (`build.js`) concatenates the core and all plugins into a single distributable file (`js/impress.js`) and minifies it with Terser. The repository includes multiple example presentations demonstrating various features, a QUnit test suite, and CI configuration. There are no runtime dependencies; the library is designed to work in modern browsers with CSS 3D support. The codebase is well-structured with clear separation of concerns, though some tooling (jshint, jscs, ESLint 6) and a Node requirement of >=7.6 indicate moderate technical drift.
Spiel is a terminal-based framework for creating and presenting slide decks using Python. It enables users to define slides as functions that return renderable objects (via Rich), and presents them in a navigable terminal user interface built with Textual. The framework supports features like live reloading during development, slide transitions, and dynamic content generation through a trigger system. The architecture centers around a `Deck` class that manages a sequence of `Slide` objects. Each slide's content is defined by a function that can optionally receive a `Triggers` object for time-based or interactive effects. The presentation is driven by a custom Textual application (`SpielApp`) that handles user input, screen transitions (including slide-to-slide animations), and automatic reloading of the deck when source files change. Key components include the CLI for launching presentations, a flexible slide definition system, and reusable widgets for rendering content such as syntax-highlighted code and images. Notable reusable components include the `Triggers` class for managing interactive state, the `Swipe` transition for slide animations, the `Image` widget for terminal image display, and a set of utility functions (`clamp`, `filter_join`, `chunks`) that solve common programming problems. These components are designed with low coupling and could be extracted for use in other projects with minimal modification.
feh is a lightweight, configurable X11 image viewer and cataloguer written in C. It provides multiple viewing modes: slideshow, index (montage), thumbnail browser, multiwindow, file list, and wallpaper setting. The application relies on Imlib2 for image loading and rendering, with optional support for libcurl (HTTP/HTTPS), libexif (EXIF metadata), Xinerama (multi-monitor), inotify (auto-reload), and libmagic (MIME detection). The codebase is modular, featuring reusable generic data structures (doubly linked list, hash table, Imlib2 wrapper) and a format specifier system for actions, captions, and titles. It is a mature, stable project with a long history (since 1999) and an extensive test suite using X11::GUITest. However, it shows signs of technical drift: manual memory management, legacy code comments, deprecated options, platform-specific conditionals, and reliance on external tools like dcraw and ImageMagick for certain image formats. The project is actively maintained with regular releases.