Skip to content
CAI
Software that uses CAICheck a score

slidevjs/slidev

46.8

Weak · 28 September 2026

30k

lines of production code

TypeScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is Slidev, a developer-centric presentation tool that renders Markdown files into interactive web-based slides. It provides a comprehensive client-side interface for navigating, editing, and exporting presentations, supporting features like live code execution, syntax highlighting, and custom theming. The platform includes a VS Code extension for enhanced editing and a built-in MCP server for AI agent integration, all managed within a modern, modular monorepo architecture.

How it got here

2021 — Monorepo restructuring and v53 migration

40 changes.

The project underwent a major architectural overhaul, migrating to a pnpm monorepo structure and upgrading to Slidev v53 with Node.js 22 requirements. This period involved stripping legacy Vite SSG components and logic while introducing a modular client package with new built-in UI components, layouts, and a unified context system. The work also established comprehensive testing, ESM migration for tooling, and separated the parser into its own package to support the new architecture.

2022–2024 — ESM migration and VS Code rewrite

20 changes.

This period focused on modernizing the codebase by migrating the CLI and virtual module system to ES modules, while significantly expanding client-side features like PPTX export and AI integration via an MCP server. Concurrently, the VS Code extension was completely rewritten with a new language server and reactive architecture to enhance editing support and project management.

2025–2026 — build optimization and syntax enhancements

5 changes.

This period focused on improving build performance through UnoCSS pre-scanning and refactoring codeblock syntax processing into a modular pipeline. It also introduced new features such as a strict timesplit parser, drag directives, and GitHub-style markdown alerts, while stabilizing the public API with comprehensive test snapshots.

Features

Added Composable Vue demo presentation

A new demo presentation titled 'Composable Vue' has been added to the demo folder, featuring slides on Vue Composition API patterns, Refs, and Reactivity. The demo includes an HTML entry point with a custom favicon and a Markdown slide deck that utilizes Shiki for syntax highlighting and Monaco for interactive code editing, showcasing technical content from a VueDay 2021 talk.

demo/composable-vue · high confidence

Added Counter demo component

A new Counter component has been added to the demo starter kit, providing a simple interactive UI with increment and decrement buttons to display a reactive count value.

demo/starter/components · high confidence

Added Counter demo component to the application template

The application template now includes a new Counter.vue component in the components directory. This component provides a simple interactive demo with increment and decrement buttons, allowing users to see a basic reactive state example in their generated projects.

packages/create-app/template/components · high confidence

Built-in MCP server for AI agent integration

Slidev now includes a built-in Model Context Protocol (MCP) server, enabling AI agents to inspect, edit, and navigate slide decks. This feature adds a new \packages/slidev/node/mcp\ module with server and operation logic, exposing tools to get deck info, list and retrieve slides, and update, insert, remove, or move slides. The MCP server is served over the dev server at the \/\_\_mcp\ endpoint and via a new \slidev mcp\ stdio command, allowing external tools to interact with the presentation content and live navigation state.

packages/slidev/node/vite · high confidence

Demo adds TypeScript type definitions for Vue injection keys

The demo now includes a Monaco editor setup file that registers custom TypeScript type definitions. Specifically, it adds an extra library containing the UserInfo interface and the injectKeyUser injection key, ensuring that code completion and type checking work correctly within the demo's editor environment.

demo/composable-vue/setup · high confidence

Demo now supports running Vue Single-File Components in Monaco

The vue-runner demo has been updated to demonstrate Slidev's extensibility by adding a runnable Monaco editor for Vue SFCs. This change introduces setup scripts that configure Shiki for Vue syntax highlighting and implement a code runner that compiles and mounts Vue components directly in the browser, allowing users to see live Vue code execution within the presentation slides.

demo/vue-runner · high confidence

Editable PPTX export with native shapes and text

Slidev now supports exporting presentations to PowerPoint (.pptx) with editable text and native shapes, rather than static images. This new feature, implemented in the \packages/slidev/node/commands/pptx\ directory, uses Playwright to capture slide geometry and \pptxgenjs\ to generate the file, ensuring accurate font sizes, colors, and layout. The implementation includes robust handling of CSS colors (including modern formats like oklch), precise unit conversions for PowerPoint's EMU and point systems, and fallbacks to rasterized images for complex elements like SVGs or formulas that cannot be represented natively.

packages/slidev/node/commands · high confidence

Initial release of @slidev/types package with client-side virtual module definitions

The @slidev/types package is introduced, providing shared TypeScript definitions for the Slidev project. This release adds a README and a build configuration (migrating to tsdown), but primarily establishes the \client.d.ts\ file which defines types for various virtual modules (e.g., \\#slidev/configs\, \\#slidev/slides\, \\#slidev/setups/\*\). These definitions enable type-checking for client-side integrations such as Monaco editor setups, Shiki highlighting, Mermaid rendering, and route handling.

packages/types · high confidence

Initial release of the Slidev package with starter template and build configuration

This entry introduces the Slidev package itself, establishing the core project structure. It includes the MIT license, a TypeScript configuration extending the root workspace settings, and a build configuration using \tsdown\. Crucially, it adds the \template.md\ starter template, which provides a default presentation layout featuring the 'seriph' theme, navigation instructions (including the new \shift+space\ shortcut for previous slides), and examples of modern features like \twoslash\ TypeScript integration and \comark\ support.

packages/slidev · high confidence

Introduce Slidev language server for enhanced editing support

This change introduces a new language server for Slidev presentations, providing IDE features such as syntax validation, code completion, hover information, and formatting for both the Markdown content and the YAML frontmatter. The server integrates with Volar to parse Slidev files, treating frontmatter as embedded YAML documents with specific JSON schemas for validation, and leverages Prettier for YAML formatting.

packages/vscode/language-server · high confidence

Introduce Slidev theme starter template

The \packages/create-theme/template\ directory now contains the scaffolding for new Slidev themes, including a \README.md\ with installation and usage instructions, an \example.md\ demonstrating layouts and keyboard shortcuts, a \.gitignore\, and an \.npmrc\ for pnpm compatibility. This provides a standardized starting point for developers to build and distribute custom themes.

packages/create-theme/template · high confidence

New Slidev syntax highlighting and language configuration

The Slidev extension now includes dedicated TextMate grammar files (slidev.tmLanguage.json, codeblock.json, markdown.json) and a language-configuration.json to provide syntax highlighting for Slidev-specific features. This enables proper coloring for slide frontmatter, code block attributes (such as line ranges, monaco-run, and twoslash), and import snippets. A new codeblock-patch.ts script generates injection patterns to ensure fenced code blocks are highlighted correctly within Markdown, and example files (slidev.example.md, pages.md) are added to demonstrate the syntax.

packages/vscode/syntaxes · high confidence

New and updated slide layouts for presentations

This change introduces a comprehensive set of new slide layouts for the presentation client, including center, cover, default, end, error, fact, full, intro, none, quote, section, and statement. It also adds specialized layouts for content arrangement: two-cols and two-cols-header (which supports left, right, and bottom slots), image layouts (image, image-left, image-right) that now support a configurable backgroundSize prop, and iframe layouts (iframe, iframe-left, iframe-right) that allow embedding external URLs with a scalable frame. The 404 layout has been moved to the client package and updated to use a div instead of a main tag.

packages/client/layouts · high confidence

New built-in components and updated code block handling

This release introduces several new built-in components: \Arrow\ for drawing directional lines, \AutoFitText\ for text that automatically resizes to fit its container, \BlueSky\ for embedding Bluesky posts, \LightOrDark\ for theme-specific content, \RenderWhen\ for conditional rendering based on context (main, visible, print), and \VSwitch\ for toggling state. The \CodeBlockWrapper\ and \ShikiMagicMove\ components now support copy buttons and enhanced line highlighting, while \KaTexBlockWrapper\ fixes nested table handling. Existing components like \Tweet\ and \SlidevVideo\ have been updated with new features such as card visibility control and autoplay/reset options. The \Toc\ component now supports more flexible depth and mode filtering.

packages/client/builtin · high confidence

New client-side logic modules for core presentation features

This change introduces a suite of new logic modules in the client package to handle core presentation capabilities. It adds a color system that adapts hues to light/dark modes, a context menu system with configuration support, and a dark mode manager that respects system preferences and local storage. Navigation and routing are enhanced with new utilities for slide paths, query parameters, and transition resolution. The update also includes logic for keyboard shortcuts with auto-repeat support, slide overview navigation, and a side editor for parsing frontmatter. Additionally, it provides new recording capabilities with frame rate and resolution controls, screenshot and snapshot management for slide previews, and utilities for resolving tweet IDs and updating code highlights.

packages/client/logic · high confidence

New client-side pages for navigation, editing, and exporting

The client application now includes dedicated pages for managing and presenting slides: a 404 error page with smart slide redirection, an entry point for switching between Slides, Presenter, Notes, and Overview views, a batch notes editor for bulk editing slide notes, a dedicated notes viewer with auto-scroll and font controls, a slide overview with word counts and click tracking, and export pages for generating PDFs, PNG archives, and PowerPoint files. These pages provide the core user interface for navigating, editing, and exporting slide content directly from the client.

packages/client/pages · high confidence

New default theme layout styles for create-theme

The create-theme package now includes a default layout style configuration. A new \index.ts\ entry point imports base layout styles and a new \layout.css\ file, which defines a primary theme color and specific styling for cover and intro slides, including adjustments to heading sizes and spacing.

packages/create-theme/template/styles · high confidence

New demo components for Vue 3 composition API examples

Added several new Vue components to the demo area to showcase composition API patterns and UI elements. Connections.vue demonstrates reactive state management using VueUse's autoResetRef and computed properties to visualize a mathematical relationship (z=x²+y²) with interactive NumBox inputs and SVG connectors. NumBox.vue provides a reusable, styled input component with optional controls and active-state animations. DarkToggle.vue implements a theme switcher using the Slidev client's useDarkMode composable. Marker.vue and its variants (MarkerCore, MarkerPattern, MarkerTips) provide a consistent styling wrapper for inline code-like labels. VueUse.vue serves as a helper component to link to specific VueUse documentation pages.

demo/composable-vue/components · high confidence

New internal UI components and features

This change introduces a suite of new internal Vue components for the Slidev client, including a Goto dialog for slide navigation, a ClicksSlider for managing click progress, a CodeRunner for executing code blocks, a ContextMenu, DrawingControls and DrawingLayer for annotations, a LaserPointer, and various UI primitives like Modal, IconButton, and Form controls. It also adds a new Badge component for displaying text badges with dynamic colors and sizes.

packages/client/internals · high confidence

New starter template with Comark, UnoCSS, and Shiki integration

The demo/starter location now provides a complete, new starter template for Slidev. This template is configured to use the Comark syntax extension, UnoCSS for styling, and Shiki (with Twoslash support) for code highlighting. It includes a \slides.md\ file demonstrating features like slide transitions, table of contents, external code snippets, and Shiki Magic Move animations, along with supporting assets like \style.css\, \vite.config.ts\, and a \snippets\ directory.

demo/starter · high confidence

New syntax plugins for drag, inline code escaping, and GitHub alerts

Slidev now includes new syntax handling capabilities: the \v-drag\ component and directive can be used in slides to create draggable content areas, inline code blocks are now automatically escaped with \v-pre\ to prevent Vue template interpretation, and GitHub-style markdown alerts (Note, Tip, Important, Warning, Caution) are rendered with appropriate styling. These changes are implemented via new markdown-it plugins in the syntax module and integrated into the main markdown processing pipeline.

packages/slidev/node/syntax · high confidence

New template scaffolding with pre-configured hosting and package manager settings

The create-app template now includes pre-configured files for Netlify (netlify.toml) and Vercel (vercel.json) to streamline deployment, specifically setting Node.js 24 for Netlify and configuring build outputs. It also introduces a pnpm-workspace.yaml that allows specific build scripts for playwright-chromium to support slide exports, and updates the .gitignore to exclude remote assets and Vite inspection files.

packages/create-app/template · high confidence

Project initialization with monorepo structure and tooling configuration

The repository has been initialized with a complete monorepo structure and development tooling. This includes the addition of a Contributor Covenant Code of Conduct, contributing guidelines, and a comprehensive README. The build system is configured using pnpm workspaces with catalog mode, Turbo for task orchestration, and tsdown for bundling. Development tooling includes ESLint with the antfu config, Vitest for testing, Cypress for e2e tests, and Vite for the client application. Configuration files for TypeScript, Netlify deployment, and various build tools (tsdown, turbo, vitest, cypress, eslint) have been added to support the new project structure.

(repo-wide) · high confidence

Slidev VS Code extension rewritten with reactive-vscode and new language model tools

The VS Code extension has been completely rewritten to use the reactive-vscode framework, introducing a new command set for managing Slidev projects (adding, removing, setting active), a new configuration schema (including slidev.include and force-enabled), and a new language server integration. It also adds support for VS Code's Language Model tools, allowing AI assistants to query slide content, titles, and project state, while updating the preview webview to support overview mode and improved error handling with actionable buttons.

packages/vscode/src · high confidence

Removals

Removal of SlideControls and Tweet components

The SlideControls component, which provided navigation and display options (fullscreen, dark mode) for slides, and the Tweet component, used for embedding Twitter content with scaling and theme support, have been removed from the application. Users will no longer have access to these specific UI elements for slide navigation and social media embedding.

src/components · high confidence

Removal of legacy Vite SSG slide application entry point

The legacy slide application structure has been removed, specifically deleting the main entry point (src/main.ts), the root App component (src/App.vue), TypeScript shims (src/shims.d.ts), and type definitions (src/types.ts). This eliminates the previous Vite SSG-based routing, layout setup, and dynamic module loading mechanism that handled slide scaling and navigation.

src · high confidence

Removal of legacy layout and global style files

The \src/layouts/cover.vue\, \src/layouts/default.vue\, \src/styles/code.css\, and \src/styles/main.css\ files have been deleted. This removes the previous cover and default page layouts, along with the global CSS definitions for the application body, NProgress styling, and Prism.js syntax highlighting themes.

src/layouts · high confidence

Removal of navigation controls and progress bar modules

The \src/modules/controls.ts\ and \src/modules/nprogress.ts\ files have been deleted. This removes the automatic installation of navigation controls (which previously used \createNavigateControls\ with generated routes) and the NProgress loading bar integration (which previously started/stopped progress on route changes). Users will no longer see the progress bar during navigation, and the specific navigation control logic provided by these modules is no longer active.

src/modules · high confidence

Architecture

Composables restructured into new files

The client-side composables have been reorganized into individual files (e.g., useClicks.ts, useNav.ts, useDrawings.ts, useTimer.ts, usePreloadImages.ts, useViewTransition.ts, useWakeLock.ts, useDragElements.ts, useHideCursorIdle.ts, useIME.ts, useMousePosInSlide.ts, useEmbeddedCtrl.ts, usePrintStyles.ts, useSlideBounds.ts, useSlideInfo.ts, useSwipeControls.ts, useTocTree.ts, useDarkMode.ts). This change improves code modularity and maintainability by separating concerns into distinct, focused modules.

packages/client/composables · high confidence

Parser package refactored and separated from main application

The \@slidev/parser\ package has been extracted into its own standalone module (\packages/parser/src\), separating parsing logic from the main Slidev application. This new parser enforces UnoCSS as the only supported CSS engine (falling back with a warning for others), drops Prism.js support (throwing an error if configured), and defaults to the Shiki syntax highlighter. It also introduces stricter security controls by rejecting \src:\ imports that escape the project root, adds support for preparser extensions loaded from themes, and provides utilities for resolving configuration, handling slide ranges, and parsing aspect ratios.

packages/parser/src · high confidence

Behavioural changes

Automated VS Code extension publishing with retry logic and schema generation

The VS Code extension build and release process now includes a dedicated publish script that automatically handles publishing to both the VS Code Marketplace and OpenVSX. This script introduces resilience by retrying publish operations up to three times with exponential backoff in case of transient failures, ensuring more reliable releases. Additionally, a new schema generation script automatically produces JSON schemas for frontmatter types, improving type safety and validation for extension configuration.

packages/vscode/scripts · high confidence

CLI entry point migrated to ESM

The Slidev CLI entry point has been converted from a CommonJS script to an ES Module (slidev.mjs). This change updates the underlying runtime to use native ESM imports, ensuring the CLI is compatible with modern Node.js environments that require or prefer ES modules.

packages/slidev/bin · high confidence

Default Shiki syntax highlighting themes configured in setup template

The theme setup template now includes a dedicated \shiki.ts\ file that explicitly configures Shiki syntax highlighting. This change sets 'vitesse-dark' as the default theme for dark mode and 'vitesse-light' for light mode, ensuring consistent code block styling out of the box for new projects generated by the theme creator.

packages/create-theme/template/setup · high confidence

Migrate VSCode extension internals to reactive-vscode and rewrite core composables

The VSCode extension's internal logic in the composables layer has been rewritten to use the reactive-vscode library, replacing previous state management approaches. This change introduces new composables for managing the development server lifecycle (useDevServer), detecting running Slidev servers (useServerDetector), and tracking the focused slide based on editor selection (useFocusedSlide). It also adds a debounced computed utility (useDebouncedComputed) and document-to-project mapping (useProjectFromDoc). For users, this underpins the reworked extension experience, enabling more responsive slide tracking and a more robust server detection mechanism.

packages/vscode/src/composables · high confidence

Migrate build tooling from tsup to tsdown

The parser package has switched its build configuration from tsup to tsdown. This change updates the build process to use the new tool, which is reflected in the new tsdown.config.ts file defining entry points for index, core, fs, and utils modules.

packages/parser · high confidence

Migrate create-app to ESM and update package manager handling

The create-app package has been migrated to ES Modules (ESM), replacing CommonJS imports with native Node.js modules and the 'pathe' library for path resolution. The scaffolding logic now automatically detects the user's package manager (npm, yarn, pnpm, bun) to configure the project's .npmrc and suggest the correct installation commands, defaulting to npm if detection fails. Additionally, the build script now uses native 'fs/promises' instead of 'fs-extra', and the CLI uses 'tinyexec' instead of 'execa' for running package manager commands.

packages/create-app · high confidence

New path and slide utility functions for the VS Code extension

The VS Code extension now includes a set of new utility functions in the \src/utils\ directory to handle path normalization and slide metadata. \isSamePath\ provides cross-platform path comparison, handling Windows case-insensitivity and separator differences. \findPossibleEntries\ scans the workspace for Markdown files while excluding common non-slide files like \LICENSE.md\ and \CONTRIBUTING.md\. \getSlidesTitle\ extracts the presentation title from the first slide or the entry file name. \getFirstDisplayedChild\ resolves the first visible slide in a chain of imports, and \findShallowestPath\ identifies the most direct path among several options. \toRelativePath\ converts absolute paths to workspace-relative paths.

packages/vscode/src/utils · high confidence

New release and build automation scripts

The repository now includes a set of new Node.js scripts in the \scripts/\ directory to streamline the build, packaging, and publishing workflows. \demo.mjs\ automates the building of documentation demos using VitePress and Slidev, while \gen-layouts.ts\ automatically generates TypeScript type definitions for client layouts. The \pack.mjs\ script handles local package packing by resolving inter-package dependencies, and \publish.mjs\ manages the final publication to npm, including copying assets. Additional utility scripts \remove-overridden-deps.mjs\ and \update-versions.mjs\ assist in cleaning up dependency overrides and synchronizing version numbers across project templates, respectively. These changes replace previous manual or disparate processes with a unified, zx-based tooling suite.

scripts · high confidence

New timesplit parser with strict timestamp validation

The parser now includes a new \timesplit\ module that converts time strings (such as '10:50.1', '5m', or '+10s') into precise second-based timestamps. This change introduces strict validation that rejects invalid formats and unit-less non-numeric values (like '30,5' or '1 30'), which previously could result in silent NaN errors. Users can now rely on the parser to throw clear errors for malformed time inputs rather than producing undefined behavior.

packages/parser/src/timesplit · high confidence

Pre-scanning UnoCSS tokens for improved build performance

The client build process now includes a pre-scanning step that analyzes all Vue components to identify used UnoCSS utility tokens. A new script in the client package extracts these tokens and generates a static list of matched CSS classes, which is saved as a generated TypeScript file. This optimization allows the UnoCSS engine to skip runtime scanning of source files, resulting in faster build times.

packages/client/.generated, packages/client/scripts · high confidence

Redesigned Slidev VS Code extension with new tree views and annotations

The VS Code extension has been rewritten to use the \reactive-vscode\ framework, introducing a modernized user experience. A new Slides Tree view allows users to navigate, select, and drag-and-drop slides to reorder them within the markdown source. The Projects Tree view now displays active projects sorted by entry path, with collapsible file lists. Additionally, the editor now supports inline annotations, including visual markers for frontmatter blocks and optional line numbers inside code blocks, alongside a new Overview Preview mode for the webview.

packages/vscode/src/views · high confidence

Redesigned code block styling and slide transition animations

The client styles have been reorganized into a modular structure (index.ts, code.css, transitions.css, etc.) to support enhanced code presentation and smoother slide navigation. Code blocks now feature a unified design with CSS variables for theming, including support for line numbers, tabbed code groups, and improved dark-mode contrast for both Shiki syntax highlighting and Twoslash popovers. Additionally, new CSS classes define slide transition effects (sliding and fading) and refined click-visibility animations, while inline code and KaTeX styles have been adjusted to prevent layout conflicts.

packages/client/styles · high confidence

Refactored client state management with extensible sync and persistent storage

The client state layer has been restructured to use a new \createSyncState\ utility that supports extensible synchronization methods (allowing custom sync plugins via \addSyncMethod\) and distinguishes between transient and persistent state. This change introduces dedicated state modules for drawings, snapshots, and shared navigation/timer data, while moving UI preferences (such as presenter layout, editor dimensions, CSS filters, and shortcut locks) into a centralized \storage.ts\ module backed by \localStorage\. Users benefit from more reliable state persistence across sessions and tabs, improved synchronization behavior for collaborative features, and the ability to extend sync capabilities without modifying core state logic.

packages/client/state · high confidence

Refactored codeblock syntax processing into modular transformers

The codeblock syntax handling in Slidev has been restructured from a monolithic implementation into a modular pipeline of individual transformers (Mermaid, PlantUML, Monaco, Magic Move, and Wrapper). This change centralizes the fence-rule logic in a new \index.ts\ entry point that iterates through these transformers, allowing each block type to be processed independently. Specifically, the Magic Move transformer now correctly resolves snippet imports before validation, and the PlantUML transformer properly formats the server property, ensuring that complex code blocks render accurately across slides.

packages/slidev/node/syntax/codeblock · high confidence

Refactored integration modules and added safety checks for drawings

The addon and theme resolution logic now uses the \verkit\ library instead of \semver\ to validate engine compatibility, and path operations have switched from \node:path\ to \pathe\. Additionally, a new \isSafeDrawingKey\ function has been introduced to prevent path traversal and invalid characters when saving drawing data, ensuring that only safe, numeric keys are written to the drawings directory.

packages/slidev/node/integrations · high confidence

Refactored node-side configuration resolution and CLI entry point

The Slidev node package has been restructured into a new modular layout (cli.ts, options.ts, parser.ts, resolver.ts, utils.ts) with a dedicated test suite. The CLI entry point now uses yargs and exposes options like --inspect, --base, and --bind. Configuration resolution (options.ts) has been rewritten to support a two-phase load: an initial bootstrap load to determine theme and addon roots, followed by a final load that respects preparser modifications to the config. The resolver (resolver.ts) now includes robust logic for detecting global installations (especially pnpm v11) and resolving imports across sibling node\_modules directories. New utilities handle frontmatter patching while preserving comments, auto-ruby in notes, and absolute import glob proxying for Vite.

packages/slidev/node · high confidence

Removal of legacy navigation and dark mode logic modules

The \src/logic\ directory has been restructured by removing the \controls.ts\ and \dark.ts\ modules. This eliminates the previous implementation of keyboard-based slide navigation (using VueUse's \useMagicKeys\ for space, left, and right keys) and the global dark mode state management (\useDark\/\useToggle\). The \index.ts\ barrel file has also been removed, indicating these specific logic concerns are no longer exported or managed from this location.

src/logic · high confidence

Reorganized setup loaders and added smart image preloading

The setup loader logic in \packages/slidev/node/setups\ has been restructured into dedicated modules (e.g., \load.ts\, \indexHtml.ts\, \shiki.ts\) that use a new \loadSetups\ utility to resolve configuration files from project roots. This change introduces smart image preloading, which automatically extracts and preloads images from slide sources to improve performance, and adds support for the Bluesky embed component. Additionally, the system now warns and ignores custom \index.html\ files containing a DOCTYPE declaration to prevent conflicts with Slidev's generated HTML.

packages/slidev/node/setups · high confidence

Restructure client package and introduce public API surface

The client code is reorganized into the \packages/client\ directory, establishing a clear public API entry point in \index.ts\ that exposes composables like \useSlideContext\, \useNav\, and \useDrawings\ for use in slide content. This change introduces a unified context system (\useSlideContext\) that provides access to navigation, clicks, and frontmatter data, while also adding support for optional PWA indicators and configuring UnoCSS with direction-based variants for slide transitions.

packages/client · high confidence

Reworked TypeScript type definitions for Slidev internals

The \packages/types/src\ module has been reorganized into a set of dedicated TypeScript definition files (e.g., \cli.ts\, \clicks.ts\, \config.ts\, \frontmatter.ts\, \setups.ts\, \types.ts\). This change introduces explicit type definitions for CLI arguments, the click system, code runner providers, and setup hooks, while also adding support for new features such as the \memory\ router mode, context menus, and HMR event maps. For users, this provides stricter type checking and better IDE autocomplete for configuration, setup functions, and internal APIs.

packages/types/src · high confidence

Reworked click system and new directive modules

The client modules have been restructured to introduce a new, more robust click system and several new Vue directives. The \v-click\ directive now supports named animation presets and improved context injection, while \v-motion\ has been updated to better handle click-based visibility states and print mode. New directives include \v-mark\ for rough notations (underlines, highlights, etc.), \v-drag\ for draggable elements, and a new \mermaid\ module for rendering diagrams with custom setup support. The \context.ts\ module now exposes a unified \SlidevContext\ interface with reactive navigation and configuration access.

packages/client/modules · high confidence

Reworked client setup architecture with modular initialization

The client initialization logic has been restructured into a modular setup system located in \packages/client/setup\. This change introduces dedicated setup modules for core features—including \main.ts\ (router, PWA, directives), \monaco.ts\ (editor configuration and Shiki integration), \code-runners.ts\ (runtime execution), \routes.ts\ (route definitions with password guards), \shortcuts.ts\ (keyboard navigation), and \context-menu.ts\ (UI actions)—which are now orchestrated via a centralized \\#slidev/setups\ registry. This allows users to extend or override specific client behaviors through custom setup functions rather than modifying the core initialization flow.

packages/client/setup · high confidence

Slidev theme scaffolding tool now uses ESM

The \create-theme\ package has been migrated to ESM (ECMAScript Modules), replacing the previous CommonJS implementation. This change updates the entry point to \index.mjs\ and adjusts internal imports (such as using \pathe\ instead of \node:path\) to align with modern Node.js module standards, ensuring the theme generator CLI runs correctly in ESM environments.

packages/create-theme · high confidence

Support background prop in cover and intro layouts

The cover and intro layouts in the create-theme template now accept a background prop, allowing users to customize the background of these specific slide layouts via the handleBackground helper.

packages/create-theme/template/layouts · high confidence

Update markdown-it token import path in task-lists plugin

The task-lists plugin now imports the Token class from the .mjs extension file instead of the .js file, ensuring compatibility with modern module resolution standards.

patches · high confidence

VS Code extension rebuilt with Slidev language server and tsdown bundler

The VS Code extension has been rewritten to include a dedicated Slidev language server and is now bundled using tsdown instead of the previous tooling. This change introduces new capabilities such as a Slidev panel for previewing slides, a tree view for managing projects and slides, slide reordering, and folding support. The extension now targets Node 20 and uses the reactive-vscode framework, resulting in a smaller extension size and improved build reliability.

packages/vscode · high confidence

Virtual module system restructured into modular templates

The Slidev virtual module system has been reorganized from a monolithic loader into a collection of distinct, modular template files (e.g., \conditional-styles.ts\, \configs.ts\, \global-layers.ts\, \monaco-deps.ts\, \slides.ts\, \titles.ts\). This change improves maintainability and allows for more granular control over how virtual modules like \/@slidev/slides\, \/@slidev/configs\, and \/@slidev/global-layers\ are generated. It also introduces deprecation warnings for legacy virtual modules (\/ @slidev/routes\ and \/ @slidev/titles.md\), guiding users toward the new \\#slidev/slides\ and \\#slidev/title-renderer\ imports.

packages/slidev/node/virtual · high confidence

Test coverage

Add basic Cypress fixture suite for slide rendering and v-click behavior; Added comprehensive test suite for parser, MCP, and utility modules; Added end-to-end tests for base-path navigation, iframe layout, presenter resizer, and smoke testing; Added infrastructure to test base-path navigation in hash router mode; Added public API snapshots for @slidev/parser and @slidev/types; Added snapshot tests for parser and font utility outputs; Added test fixture for code snippet regions.

Dependencies

Slidev 53.0.0: Monorepo restructuring, pnpm v12, and Node.js 22 requirement

This release upgrades the project to version 53.0.0, requiring Node.js \>= 22.12.0 and migrating the package manager to pnpm v12.4.2. The monorepo has been restructured to use pnpm catalogs for dependency management, and the build pipeline now uses tsdown instead of tsup. Key dependency updates include migrating to Shiki v2, upgrading Mermaid to v12, and integrating the Model Context Protocol (MCP) SDK v2. The VS Code extension now targets VS Code ^1.99.0, and the CLI has been fully migrated to ESM.

(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 40 → 47 (+7.1)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 86 → 72 (-14.4)
  • Architecture 83 (new)
  • Maturity 81 → 78 (-3.7)
  • Readiness 20 → 38 (+17.2)
  • Security 38 → 77 (+38.6)
  • Accessibility 39 (new)
  • Performance 60 (new)

Resolved (100)

  • ADR not followed: Plan 012: Fix the no-op HMR utils refresh (missing await) (plans/012-hmr-utils-refresh.md)
  • Boundary-crossing change coupling: ClicksSlider.vue ↔ overview.vue (packages/client/internals/ClicksSlider.vue)
  • Boundary-crossing change coupling: NoteDisplay.vue ↔ overview.vue (packages/client/internals/NoteDisplay.vue)
  • Change coupling: Controls.vue ↔ NavControls.vue (packages/client/internals/Controls.vue)
  • Change coupling: MenuButton.vue ↔ SelectList.vue (packages/client/internals/MenuButton.vue)
  • Change coupling: NavControls.vue ↔ RecordingControls.vue (packages/client/internals/NavControls.vue)
  • Change coupling: Toc.vue ↔ TocList.vue (packages/client/builtin/Toc.vue)
  • Change coupling: VClick.ts ↔ VClicks.ts (packages/client/builtin/VClick.ts)
  • Change coupling: cli.ts ↔ index.ts (packages/slidev/node/cli.ts)
  • Change coupling: notes.vue ↔ presenter.vue (packages/client/pages/notes.vue)
  • Change coupling: utils.ts ↔ setups.ts (packages/slidev/node/utils.ts)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • …and 80 more

New (155)

  • Boundary-crossing change coupling: useSlideInfo.ts ↔ loaders.ts (packages/client/composables/useSlideInfo.ts)
  • Change coupling: CodeBlockWrapper.vue ↔ KaTexBlockWrapper.vue (packages/client/builtin/CodeBlockWrapper.vue)
  • Change coupling: config.ts ↔ shim.d.ts (packages/parser/src/config.ts)
  • Change coupling: extendConfig.ts ↔ shim.d.ts (packages/slidev/node/vite/extendConfig.ts)
  • Coverage not measured — JavaScript/TypeScript suite
  • Documentation: no project overview (docs/index.md)
  • FileTooLong: node/cli.ts (packages/slidev/node/cli.ts)
  • FileTooLong: pptx/normalize.ts (packages/slidev/node/commands/pptx/normalize.ts)
  • FunctionTooLong: cli.cli.command("* [entry]","Start a local server for Slidev") (packages/slidev/node/cli.ts)
  • FunctionTooLong: export.exportSlides (packages/slidev/node/commands/export.ts)
  • FunctionTooLong: loaders.createSlidesLoader (packages/slidev/node/vite/loaders.ts)
  • FunctionTooLong: normalize.buildSlideIr (packages/slidev/node/commands/pptx/normalize.ts)
  • FunctionTooLong: previewWebview.usePreviewWebview (packages/vscode/src/views/previewWebview.ts)
  • FunctionTooLong: recording.useRecording (packages/client/logic/recording.ts)
  • FunctionTooLong: server.createSlidevMcpServer (packages/slidev/node/mcp/server.ts)
  • FunctionTooLong: slidesTree.useSlidesTree (packages/vscode/src/views/slidesTree.ts)
  • FunctionTooLong: useClicks.createClicksContextBase (packages/client/composables/useClicks.ts)
  • FunctionTooLong: useDragElements.useDragElement (packages/client/composables/useDragElements.ts)
  • FunctionTooLong: useDrawings.useDrawings (packages/client/composables/useDrawings.ts)
  • FunctionTooLong: useFocusedSlide.useFocusedSlide (packages/vscode/src/composables/useFocusedSlide.ts)
  • …and 135 more

Changes since last survey

  • 44 commits — 23 feature/other, 21 fixes

By area

  • (root) — 9 commits
  • packages/client — 7 commits
  • packages/create-app — 6 commits
  • packages/slidev — 6 commits
  • .github/workflows — 4 commits
  • packages/parser — 4 commits
  • packages/vscode — 3 commits
  • docs/.vitepress — 2 commits
  • docs/features — 1 commit
  • skills/slidev — 1 commit
  • test/fixtures — 1 commit

Notable commits

  • fix: chore: fix typecheck
  • fix: fix(cli): don't crash when the public IP can't be resolved (#2726)
  • fix: fix(cli): handle publicIpv4() errors when resolving public IP (#2739)
  • fix: fix(client): declare markdown-it-github-alerts as a dependency (#2719)
  • fix: fix(client): keep the mic track alive across consecutive recordings (#2730)
  • fix: fix(client): keep v-click hidden state on annotated code and KaTeX blocks (#2712)
  • fix: fix(create-app): agent detection, close #2720
  • fix: fix(create-app): default manual setup to npm (#2703)
  • fix: fix(monaco): whitelist the monaco-write path the dev server actually resolves (#2740)
  • fix: fix(parser): ignore code block headings when picking slide titles (#2737)
  • fix: fix(parser): merge drawings config from theme defaults and nested config key (#2735)
  • fix: fix(parser): reject unit-less timestamps that are not numbers (#2732)
  • fix: fix(parser): report a src: range that points below the first slide (#2734)
  • fix: fix(parser): strip the title from markdown image destinations (#2733)
  • fix: fix(server): 404 on out-of-range slide patch (#2704)
  • fix: fix(vscode): match detected server entry against existing project paths (#2729)
  • fix: fix(vscode): retry marketplace publish on transient failures (#2741)
  • fix: fix: match notesAutoRuby keys longest-first and literally (#2731)
  • fix: fix: render iframe layouts at their on-screen resolution (#2728)
  • fix: fix: repair production smoke test (markdown-exit renderer dedupe) (#2717)
  • …and 24 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

slidevjs/slidev 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 28 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 30a0a54c8739b4b395d9b336a6304cc8ebcc3947 — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.