The docmd 0.7.8 release introduces the Git plugin for repository-aware metadata, a completely redesigned terminal interface with live progress feedback, parallel page processing for dramatically faster builds, automatic plugin installation for official plugins, and container syntax compatibility for users migrating from other documentation engines.

✨ Highlights

Build Engine - Parallel Processing

The page rendering pipeline has been redesigned from sequential to batched parallel processing, delivering significant speedup on documentation sites of all sizes.

What changed:

  • Batched file I/O: Files are now read 64 at a time and written 128 at a time via Promise.all, instead of one-by-one sequential reads
  • Pipeline overlap: File reading, markdown parsing, and HTML writing phases now overlap across batches
  • Parallel writes: All rendered HTML files are written to disk concurrently in batches instead of sequentially

Projected performance (simple pages):

Scale Before (0.7.7) After (0.7.8) Improvement
~1,000 pages ~22s ~12s ~45% faster
~10,000 pages ~4 min+ ~1.5 min ~60% faster
File read phase Sequential 64-file batches 64x concurrency
File write phase Sequential 128-file batches 128x concurrency
Progress feedback None (silent) Live progress bar Real-time

The performance improvement scales with documentation size. Larger sites (1,000+ pages) with heavy I/O benefit the most from batched parallel processing.

Terminal Interface - Unified TUI

All terminal output has been redesigned into a unified, high-signal design system shared across every command. No more silent waits, inconsistent formatting, or cluttered multi-line output.

New TUI primitives:

Feature Description
Progress bar ━━━━━━━━━━━━───────── 42/100 (42%) - single-line, updates in-place
Spinner ⠋ ⠙ ⠹ - braille-dot animation during long operations
Timer Every build, rebuild, and project shows elapsed time
Sections Consistent ┌─ Section / └── framing across all commands

Unified output across all commands:

image

Commands unified:

  • docmd build - section header with source/output/versions/locales, progress bar, timing
  • docmd dev - animated spinner during initial build and rebuilds, timing per-rebuild
  • Multi-project builds - per-project spinner animation, per-project timing, total summary
  • docmd live - consistent section framing matching all other commands

Git Plugin

The new Git plugin brings repository-aware metadata to your documentation pages, last-updated timestamps, commit history tooltips, and edit links, all derived directly from your Git history with zero configuration.

// Configure edit links
plugins: {
  git: {
    repo: 'https://github.com/your-org/docs',
    branch: 'main'
  }
}

Features:

  • Last Updated Timestamps: Shows when each page was last modified, using relative formatting for recent changes
  • Commit History Tooltip: Hover to see recent commits with author names and messages
  • Edit Links: Automatically constructs “Edit this page” links for GitHub, GitLab, and Bitbucket
  • Graceful Degradation: Automatically disables itself if the project is not in a Git repository

The plugin replaces the legacy editLink configuration option with a more feature-rich alternative.
See the Git plugin documentation for full details.

Auto-Installation for Official Plugins

Official plugins listed in your docmd.config.js are now automatically installed if missing. When you add a plugin to your config that isn’t installed, docmd downloads it from npm on the next build.

// docmd.config.js
plugins: {
  pwa: {},     // Not installed? docmd auto-installs it
  threads: {}  // Same here
}

Security features:

  • Only works for official @docmd/plugin-* packages in the registry
  • Installs the exact version matching your @docmd/core version
  • Uses your project’s package manager (npm, pnpm, yarn, or bun)
  • Shows progress in the terminal

Container Syntax Compatibility

Users migrating from VitePress, Docusaurus, or similar documentation engines can now use familiar container syntax without modification.

VitePress-style containers now work:

:::tip
This renders as a tip callout.
:::

:::warning
This renders as a warning callout.
:::

:::details Click to expand
This renders as a collapsible section.
:::

Docusaurus-style containers now work:

:::note
This renders as an info callout.
:::

:::caution
This renders as a warning callout.
:::

Additionally, spaceless syntax is now supported for all containers:

:::callout info
Works the same as ::: callout info
:::

:::tabs
Works the same as ::: tabs
:::

This allows documentation to be migrated from other engines with minimal changes.

Migration-Friendly Aliases

Alias Maps To Origin
:::tip callout tip VitePress
:::warning callout warning VitePress
:::danger callout danger VitePress
:::info callout info VitePress
:::details collapsible VitePress
:::note callout info Docusaurus
:::caution callout warning Docusaurus

These aliases work silently alongside the standard docmd syntax. Your existing documentation continues to work unchanged, whilst imported content from other engines renders correctly.

Internal Improvements

British English Standardisation

Documentation has been updated to use British English spelling consistently throughout. This includes terminology like “optimised”, “centralised”, “localisation”, and “colour” where appropriate.

Code Quality

  • Replaced em-dashes with standard hyphens across documentation and code comments for improved readability
  • Standardised comment formatting in source files
  • Improved TypeScript type definitions for plugin APIs

📝 Complete Changelog

Features

  • Git Plugin (Core): New core plugin for last-updated timestamps, commit history, and edit links with graceful degradation
  • Auto-Install: Official plugins in config are automatically installed if missing
  • Container Aliases: VitePress and Docusaurus container syntax now works out of the box
  • Spaceless Containers: All containers now accept syntax with or without space after :::
  • Parallel Processing: Batched file I/O with 64-file read and 128-file write concurrency
  • Unified TUI: Progress bar, spinner, timer, and consistent section output across all commands

Improvements

  • Build Performance: Up to ~60% faster builds on large sites through parallel I/O batching
  • Live Progress: Real-time progress bar during page processing
  • Animated Spinners: Visual feedback during builds, rebuilds, and multi-project processing
  • Build Timing: Every operation reports elapsed time
  • Git Widget UI: Tooltip uses CSS :hover/:focus-within for smooth, jitter-free display
  • Code Block Styling: docmd-code-block-wrapper now uses the universal --shadow-sm variable, matching all other container blocks
  • Live Editor TUI: Unified section framing and graceful shutdown
  • Documentation: British English spelling standardisation
  • Code Style: Consistent formatting across codebase
  • Plugin Registry: Added Git plugin to official registry

Deprecations

  • editLink Config: The standalone editLink configuration option is deprecated in favour of the Git plugin

Migration Guide

Adopting the Git Plugin

If you were using the editLink configuration, replace it with the git plugin. The new approach is smarter, it automatically detects your git repository root and computes the correct file path, so you no longer need to hardcode a directory in the URL.

Before (deprecated):

export default defineConfig({
  editLink: {
    enabled: true,
    baseUrl: 'https://github.com/org/repo/edit/main/docs' // ← hardcoded dir
  }
});

After:

export default defineConfig({
  plugins: {
    git: {
      repo: 'https://github.com/org/repo', // ← just the repo, no path needed
      branch: 'main'
    }
  }
});

The plugin resolves the correct file path relative to the git root automatically. This means edit links work correctly in monorepos and multi-project setups without any manual path configuration.

Additional options:

Option Default Description
repo - Repository URL (any provider)
branch 'main' Branch to link to
editPath 'edit' URL segment for edit page. Use '-/edit' for GitLab, 'src' for Bitbucket
editLink true Set false to disable the edit link
editLinkText i18n string Custom label for the edit link

For Users Migrating from Other Engines

If you are importing documentation from VitePress, Docusaurus, or similar engines:

  1. Your existing :::tip, :::warning, :::note containers will render correctly
  2. Spaceless syntax like :::tabs works alongside the standard ::: tabs
  3. No changes to your markdown files are required

We recommend gradually transitioning to the standard docmd syntax (::: callout tip) for new content, as it provides more flexibility with titles and icons.