mdPress Product Roadmap

July 24, 2026 · View on GitHub

中文说明

Updated: 2026-07-23 Maintainer: mdPress product team


Version Overview

v0.1.0 ██████████████████████████████████████████ released
v0.2.0 ██████████████████████████████████████████ released (2026-03-19)
v0.3.0 ██████████████████████████████████████████ released (2026-03-19)
v0.3.1 ██████████████████████████████████████████ released (2026-03-19)
v0.4.0 ██████████████████████████████████████████ released (2026-03-19)
v0.4.1 ██████████████████████████████████████████ released (2026-03-19)
v0.4.2 ██████████████████████████████████████████ released (2026-03-19)
v0.4.3 ██████████████████████████████████████████ released (2026-03-19)
v0.5.0 ██████████████████████████████████████████ released (2026-03-20)
v0.5.1 ██████████████████████████████████████████ released (2026-03-21)
v0.5.2 ██████████████████████████████████████████ released (2026-03-22)
v0.5.3 ██████████████████████████████████████████ released (2026-03-23)
v0.5.4 ██████████████████████████████████████████ released (2026-03-23)
v0.6.0 ██████████████████████████████████████████ released (2026-03-23)
v0.6.1 ██████████████████████████████████████████ released (2026-03-24)
v0.6.2 ██████████████████████████████████████████ released (2026-03-25)
v0.6.3 ██████████████████████████████████████████ released (2026-03-25)
v0.6.4 ██████████████████████████████████████████ released (2026-03-26)
v0.6.5 ██████████████████████████████████████████ released (2026-03-27)
v0.6.6 ██████████████████████████████████████████ released (2026-03-27)
v0.6.7 ██████████████████████████████████████████ released (2026-03-27)
v0.6.8 ██████████████████████████████████████████ released (2026-03-28)
v0.6.9 ██████████████████████████████████████████ released (2026-03-28)
v0.7.0 ██████████████████████████████████████████ released (2026-03-28)
v0.7.1 ██████████████████████████████████████████ released (2026-03-29)
v0.7.2 ██████████████████████████████████████████ released (2026-03-30)
v0.7.3 ██████████████████████████████████████████ released (2026-04-01)
v0.7.4 ██████████████████████████████████████████ released (2026-04-04)
v0.7.5 ██████████████████████████████████████████ released (2026-04-06)
v0.7.6 ██████████████████████████████████████████ released (2026-04-13)
v0.7.7 ██████████████████████████████████████████ released (2026-04-15)
v0.7.8 ██████████████████████████████████████████ released (2026-04-18)
v0.7.9 ██████████████████████████████████████████ released (2026-04-19)
v0.7.10 ██████████████████████████████████████████ released (2026-05-08)
v0.7.11 ██████████████████████████████████████████ released (2026-06-17)
v0.7.12 ██████████████████████████████████████████ released (2026-07-05)
v0.7.13 ██████████████████████████████████████████ released (2026-07-05)
v0.7.14 ██████████████████████████████████████████ released (2026-07-10)
v0.7.15 ██████████████████████████████████████████ released (2026-07-22)
v0.8.0 ██████████████████████████████████████████ released (2026-07-23)
v0.8.1 ██████████████████████████████████████████ released (2026-07-23)
v0.8.2 ██████████████████████████████████████████ released (2026-07-24)
v1.0.0 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ planned (target: 2027-Q1)

v0.1.0 - Foundational Markdown To PDF

Release date: 2026-03 Theme: core build pipeline

v0.1.0 established the base architecture of mdPress and shipped a complete Markdown-to-PDF workflow.

Delivered Features

FeatureDescription
Markdown -> PDF conversionBuilt on Chromium rendering for professional-quality output
Full GFM supportTables, task lists, footnotes, strikethrough, and autolinks
book.yaml config systemBook metadata, chapters, styles, and output options
Auto-generated TOCBuilt from heading hierarchy with page numbers and links
Cover page generationTitle, author, version, date, image, and background support
Syntax highlightingPowered by Chroma with 100+ languages
Multi-chapter assemblyNested chapter definitions supported
Theme systemBuilt-in technical, elegant, and minimal themes
Image handlingLocal and remote images embedded as base64 when needed
Cross referencesFigure and table IDs plus {{ref:id}} support
Headers and footersTemplate variables for page number, chapter title, and book title
mdpress initProject initialization with sample files
mdpress themesTheme inspection commands
Multiple page sizesA4, A5, Letter, Legal, and B5
Custom CSSExternal CSS overrides
GLOSSARY.mdGlossary highlighting and appendix generation
CI/CD integrationGitHub Actions workflow support

v0.2.0 - Multi-Format Output And Usability

Release date: 2026-03-19 Theme: lower the barrier to entry and expand output capability

v0.2.0 moves mdPress from a PDF-first generator toward a multi-format publishing platform, with a strong focus on usability and migration compatibility.

Delivered Features

FeaturePriorityDescription
Single-page HTML outputP0--format html generates a self-contained HTML document
GitHub repository sourcesP0Build directly from GitHub URLs without a local clone
SUMMARY.md compatibilityP0Support GitBook-style chapter definition files
Zero-config auto-discoveryP0Scan Markdown files automatically when book.yaml is absent
Live preview via serveP0Local HTTP server with file watching and WebSocket reload
site output clarificationP0Sharpen the responsibility split between html, serve, and site
doctor commandP1Quick environment and project-readiness checks

Improvements

ImprovementDescription
--formatAllow pdf, html, and comma-separated multi-format builds
--outputProvide a unified output path or prefix for builds
Better errorsAttach actionable remediation hints to errors
CI/CD templatesShip GitHub Actions and GitLab CI templates

Milestones

2026-03-19  v0.2.0 release ✓

v0.3.0 - ePub Output And Plugin System

Release date: 2026-03-19 Theme: broader output support and extensibility

v0.3.0 expanded mdPress into a true multi-format publishing platform with a plugin architecture and first-class support for math and diagrams.

Delivered Features

FeaturePriorityDescription
ePub 3 outputP0Standard ePub 3 books with cover, TOC, and metadata
Plugin systemP0Full plugin lifecycle with external process loading and hook registration
KaTeX math supportP1Inline ($...$) and block ($$...$$) LaTeX math via KaTeX
Mermaid diagram supportP1Native Mermaid rendering in all HTML-based outputs; automatic Mermaid syntax checks in validate
GitBook migration toolP1mdpress migrate converts GitBook projects to mdPress format
Multi-format all shorthandP1--format all builds PDF, HTML, site, and ePub in one command
GitHub Actions templateP2Pre-built workflow for automated book builds in CI

v0.3.1 Patch (2026-03-19)

FixDescription
CJK PDF font embeddingInject @font-face rules with file:// URLs so Chrome can embed CJK glyphs
TOC depth controloutput.toc_max_depth config to limit heading depth in table of contents
Smart output filenameDerive output filename from book title instead of defaulting to output.pdf
Regexp performancePromote regexp compilation to package level in crossref, glossary, markdown, and image processing
Git author fallbackFall back to git config user.name when no author is specified

v0.4.0 - Typst Backend And Incremental Builds

Release date: 2026-03-19 Theme: performance and zero-dependency PDF

Delivered Features

FeaturePriorityDescription
Typst backendP2Use Typst instead of Chromium for true zero-external-dependency PDF
Incremental buildsP2Rebuild only changed chapters
Parallel buildsP2Use multiple CPU cores for chapter parsing and rendering
PDF watermarkingP2Text watermarks with opacity control
Custom PDF marginsP2Per-side margin configuration in multiple units
PDF bookmarksP2Auto-generated from heading hierarchy for better navigation
Build cacheP2File-hash-based cache to avoid redundant work
PlantUML supportP2Auto-detect and render PlantUML diagrams in code blocks

Typst Backend Direction

DimensionChromium backendTypst backend
External dependencyRequires Chrome or ChromiumNone, if bundled or invoked via Typst CLI
Layout qualityExcellent web-standard renderingExcellent professional typesetting
CJK supportStrongStrong
Build speedModerate due to browser startupFaster native compilation path
Binary sizeSmall without ChromiumLikely larger if Typst is bundled
CSS compatibilityFullRequires adaptation into Typst styling

CLI direction (implemented):

  • --format pdf uses Chromium (default PDF backend)
  • --format typst uses Typst as an alternative PDF backend

Incremental Build Plan

.mdpress-cache/
├── manifest.json
├── ch01.html
├── ch02.html
└── ...

Expected flow:

  1. Compute SHA-256 for every chapter
  2. Compare hashes with manifest.json
  3. Rebuild only changed chapters
  4. Merge cached chapters with newly compiled chapters
  5. Produce the final output

Expected payoff: rebuilding a 500-page book after editing one chapter should drop from roughly 120 seconds to under 10 seconds.


v0.5.0 - PlantUML Local Rendering And Test Infrastructure

Release date: 2026-03-20 Theme: offline capability and test coverage foundation

v0.5.0 closes the most critical gap for enterprise users (offline PlantUML rendering), repairs the release CI pipeline, and establishes a golden test framework to prevent backend regressions.

Delivered Features

FeaturePriorityDescription
PlantUML local renderingP1renderLocal() invokes local plantuml CLI or plantuml.jar; enabled via plantuml.use_local: true
Golden test frameworkP2Snapshot-based regression tests in tests/golden/; regenerate with -update flag
Doctor PlantUML checkP1mdpress doctor detects local PlantUML availability and prints install hints
CI Node.js 24 upgradeP0goreleaser-action@v7, codecov-action@v5 ahead of 2026-06-02 deadline
Release CI Docker fixP0Removed stale Docker Hub login step; images publish exclusively to GHCR

Test Coverage Milestones

Packagev0.4.3v0.5.0Delta
internal/plantuml54.8%75%++20 pp
internal/source41.2%62%++21 pp
cmd47.7%60%++12 pp
Overall62.3%≥ 68%+6 pp

v0.5.1 - Sidebar Navigation and Context Fixes

Release date: 2026-03-21 Theme: UI refinement and bug fixes

v0.5.1 delivers accordion-style sidebar navigation improvements and fixes critical context propagation issues affecting PlantUML rendering, SUMMARY.md title handling, and migration workflows.

Delivered Features

FeaturePriorityDescription
Accordion sidebar navigationP1Expanding a chapter section automatically collapses sibling sections at the same level for cleaner GitBook-like navigation
Smoother sidebar transitionsP2CSS transitions upgraded to Material Design easing curves for better expand/collapse animations

Fixed Issues

FixPriorityDescription
PlantUML context propagationP0Replaced context.Background() with caller-provided context, ensuring build timeout and cancellation signals propagate correctly
Generic SUMMARY.md title filteringP0Titles like "在线阅读", "Read Online", and "Contents" now correctly recognized as generic navigation headings
book.json title priorityP1When book.json provides a title, it is no longer overwritten by README.md inference during auto-discovery
Missing migrate command in READMEP1Added the migrate command to the "All Commands" table in both English and Chinese READMEs
GitLab CI lint version mismatchP2Aligned golangci-lint from v2.1 to v2.11.3 to match GitHub Actions
Misspelling in completion commandP2Fixed behaviourbehavior in comment

v0.5.2 - Windows Compatibility and CI Fixes

Release date: 2026-03-22 Theme: Cross-platform robustness and CI reliability

v0.5.2 improves Windows support with plugin executable resolution via PATHEXT, fixes cross-platform test failures, and hardens the CI supply chain by upgrading all GitHub Actions to their latest major versions.

Delivered Features

FeaturePriorityDescription
Windows plugin executable resolutionP1Plugin paths without extensions auto-resolve via PATHEXT (.exe, .bat, .cmd)
Search focus style and a11y trapsP2Improved keyboard accessibility with visible focus indicators

Fixed Issues

FixPriorityDescription
Cross-platform test pathsP0Replaced hardcoded Unix paths with t.TempDir() in config tests, fixing Windows CI
Codecov action parameterP1Corrected file to files for codecov-action@v5
Dependabot config syntaxP1Fixed invalid pull-requests.max-number to open-pull-requests-limit
ePub test resource leakP2Added missing reader.Close() in epub test

v0.5.3 - Code Block Fixes and Documentation

Release date: 2026-03-23 Theme: Bug fixes and documentation alignment

v0.5.3 fixes critical code block rendering issues in site output and updates project documentation.

Fixed Issues

FixPriorityDescription
Invisible code block textP0Chroma syntax highlighter injected inline style="background-color:#fff" on <pre> tags, making code blocks unreadable. Fix strips chroma's inline style during post-processing.
Site code block color schemeP1Changed site output code blocks from dark theme to light theme (#f6f8fa background, #24292e text) matching the chroma "github" palette

Changed

ChangeDescription
Documentation updatesUpdated ARCHITECTURE docs version, fixed ROADMAP version ordering, added Typst format to README table
Removed stale NEXT-STEPS.mdDeleted outdated planning document that referenced v0.4.3 as latest

v0.5.4 - Site Enhancement and Bug Fixes

Release date: 2026-03-23 Theme: Rich site features and security hardening

v0.5.4 is a major feature release for the site output format, adding client-side full-text search, dark mode, breadcrumb navigation, page TOC, code copy buttons, and SEO optimization. It also fixes several bugs including ePub resource leaks, UTF-8 truncation issues, and a symlink-based path traversal vulnerability in the dev server.

Delivered Features

FeaturePriorityDescription
Full-text searchP0Client-side search with Cmd/Ctrl+K shortcut, keyboard navigation, and result highlighting
Dark mode toggleP0Three-way theme switcher (light/dark/system) with localStorage persistence
SEO meta tagsP1Auto-generated description and Open Graph tags per page
Sitemap generationP1sitemap.xml for search engine indexing
Breadcrumb navigationP1Page hierarchy trail on each site page
Page TOC sidebarP1"On this page" sidebar with scroll-spy via IntersectionObserver
Code block copy buttonP1Hover-to-reveal copy button with clipboard integration
Sidebar collapseP2Desktop sidebar collapsible with persistent state
Lazy loading imagesP2loading="lazy" on all <img> tags automatically
CJK heading IDsP1Custom heading ID transformer that preserves Unicode letters

Fixed Issues

FixPriorityDescription
ePub zip writer resource leakP1Added defer w.Close() for all error paths
UTF-8 truncation in SVG coverP1Rune-based truncation replaces byte-based slicing
SVG XML attribute escapingP2Added " and ' entity escaping
Symlink path traversalP1filepath.EvalSymlinks() added to serve path check
Scroll behavior regressionP2Fixed ternary always returning 'auto' instead of 'smooth'
Description meta truncationP2Rune-based truncation for multi-byte character safety

v0.6.0 - Self-Upgrade, Doctor Enhancement, and User Manual

Release date: 2026-03-23 Theme: production readiness foundation

v0.6.0 bridges the gap between feature-driven development (v0.1–v0.5) and the production-ready v1.0.0 release.

Delivered Features

FeaturePriorityDescription
mdpress upgrade commandP0Self-upgrade from GitHub releases with platform detection, SHA-256 checksum verification, and --check dry-run mode
Enhanced mdpress doctorP0Six new environment checks: Go version (≥1.26), Git availability, network connectivity, disk space, CJK font detection, and plugin health; new --verbose flag
Bilingual user manualP0Complete Chinese + English user manual (60+ Markdown files) built with mdPress itself
ParseVersionPart utilityP2Reusable version-string parser for doctor and upgrade commands

Improvements

ImprovementPriorityDescription
Path traversal hardeningP1LocalSource.Prepare() validates subdirectory paths against traversal attacks
Cross-platform path handlingP1filepath.Join replaces string concatenation in HasLangsFile for Windows compatibility
Documentation updatesP2upgrade command added to README command table (EN + ZH) and COMMANDS docs

Fixed Issues

FixPriorityDescription
Lint cleanupP2Removed duplicate test helpers and unused imports across cmd/*_test.go
Chinese text truncation testP2Increased input size so the ≥160-rune truncation path is exercised

Tests

  • 1,500+ new test lines across 12 files
  • Full coverage of upgrade command: version comparison, asset selection, download, and binary replacement
  • Expanded doctor, cmd, themes, quickstart, validate tests
  • Comprehensive utility function tests for file, cjk, image packages
  • Expanded plugin lifecycle and error-path tests

v0.6.1 - Bug Fixes and Documentation

Release date: 2026-03-24 Theme: quality and consistency

v0.6.1 is a patch release that fixes bugs discovered in v0.6.0 and improves documentation coverage.

Fixed Issues

FixPriorityDescription
Typst timeout configurationP0compileToPDF() now uses the configured g.timeout instead of a hardcoded 120-second value
Format validation for TypstP0Added typst to validFormats so book.yaml accepts typst as an output format
Git branch name validationP1Branch name regex now requires leading alphanumeric character to prevent CLI flag injection
ePub cleanup error handlingP1os.Remove errors on failed builds are now logged instead of silently ignored
Error message consistencyP2Replaced remaining Chinese error messages with English in parser.go and crossref.go
GoReleaser Homebrew URL caseP2Corrected mdPress to mdpress in the Homebrew Cask verified URL
Gosec exclusion orderingP2Sorted gosec rule exclusions numerically in .golangci.yml

Documentation

ChangeDescription
Doctor command docsUpdated doctor.md and doctor_zh.md with all v0.6.0 environment checks
User manual links in READMEAdded links to the bilingual user manual in both READMEs
version command in COMMANDSAdded the version command to the command matrix and hierarchy diagram
ROADMAP updateAdded v0.6.0 and v0.6.1 release notes
.gitignore enhancementAdded .agent/, .env, and credential file patterns

v0.6.2 - Security Hardening And Bug Fixes

Release date: 2026-03-25 Theme: security and correctness

v0.6.2 is a security-focused release that hardens the preview server, upgrade command, image handling, and theme CSS against injection and traversal attacks. It also fixes numerous parser, cache, and rendering bugs.

Security Fixes

FixPriorityDescription
WebSocket origin validationP0Preview server validates Origin header against Host to prevent cross-origin hijacking
Upgrade URL domain validationP0Binary downloads verify the URL points to github.com or *.githubusercontent.com
Absolute image path rejectionP1resolveLocalImagePath rejects absolute paths to prevent reading arbitrary local files
Theme CSS injection preventionP1Theme color and font values validated against unsafe characters before CSS output
CSS color pattern tightenedP1rgb()/hsl() patterns restrict content to safe characters
Security headersP2Preview server sets X-Content-Type-Options: nosniff and X-Frame-Options: DENY

Fixed Issues

FixPriorityDescription
Chapter cache key mismatchP0Cache key uses same fallback logic as parser, preventing stale hits
PlantUML encodingP0Correct raw deflate and PlantUML custom 6-bit encoding alphabet
Heading ID race conditionP0Each Transform call uses a local usedIDs map instead of shared state
Path traversal via book.jsonP1safeJoin() rejects absolute and escaping paths
Typst font size fallbackP1Parse failures fall back to 12pt instead of invisible 0.0pt
Glossary double-wrappingP1Overlapping terms no longer create nested <span> tags
UTF-8 title capitalizationP1Uses []rune + unicode.ToUpper for multi-byte first characters
Typst template injectionP1User content with {{ }} no longer panics or injects code

Changed

ChangeDescription
Triple config load eliminateddoctor loads config once and passes it through
Dead code removedUnused CacheStatistics, no-op convertCodeSpans, duplicate fileExists removed
Glossary regex hoistedskipPattern compiled once at package level
Search index optimizationutf8.RuneCountInString() replaces len([]rune(...))

Documentation

ChangeDescription
validate commandDocumented the --report flag
completion commandCorrected --no-descriptions support from bash/zsh to bash/fish
build commandDocumented that --format all expands to pdf,html,site,epub,typst
upgrade commandRemoved fabricated exit codes section

v0.6.3 - Security Hardening And Search Redesign

Release date: 2026-03-25 Theme: security and search UX

v0.6.3 hardens the codebase against SSRF, XSS, path traversal, and template injection attacks. It also redesigns the search UI as a right-side panel.

Security Fixes

FixPriorityDescription
SSRF prevention for PlantUMLP0Validates PlantUML server URLs against private/loopback IPs via DNS resolution
Mermaid XSS fixP1Re-escapes HTML entities after unescaping in Mermaid code blocks
EPUB path traversal preventionP1Rejects absolute image paths and validates relative paths stay within source directory
Tar path traversal preventionP1Skips tar entries containing .. during upgrade extraction
Template injection preventionP1Strips {{ and }} from Typst metadata and dimension fields
Config field validationP1Validates font_family, font_size, and code_theme against injection patterns
Custom CSS size limitP2Limits custom CSS file reads to 1 MB
URL scheme validationP2openBrowser only allows http and https schemes

Fixed Issues

FixPriorityDescription
Search broken on subpagesP0Search index fetched with absolute path instead of relative
Search result links wrongP0Search result hrefs use absolute paths for correct navigation
Off-by-one bounds checkP1Fixed submatch access in EPUB and image regex
Unchecked type assertionP1PlantUML cache uses comma-ok pattern
GitHub tempdir leakP1Prepare() cleans up temp directory on validation failure

Changed

ChangeDescription
Search redesigned as right-side panelSearch opens as a GitBook-style right panel instead of a modal overlay
Defensive slice copyPlugins() returns a copy to prevent external mutation
Goroutine panic recoveryImage prefetch goroutines recover from panics

v0.6.4 - PDF Rendering Fixes

Release date: 2026-03-26 Theme: PDF image and diagram rendering

v0.6.4 fixes critical PDF rendering issues including missing images, broken Mermaid diagrams, invisible SVG badge text, and incorrect layout.

Fixed Issues

FixPriorityDescription
PDF images not renderingP0Strip loading="lazy" from images before PDF generation
Mermaid diagrams missing textP0Remove HTML re-escaping that broke arrows and tags in Mermaid
Mermaid digits/Latin missing in PDFP1Add Latin fonts before CJK fonts in Mermaid SVG CSS rules
SVG badge CJK text missing in PDFP1Inline CJK-containing SVGs with embedded font-face
Badge images stacked verticallyP1Block display only for standalone images
mdPress docs injected into PDFP1Filter CHANGELOG.md, CONTRIBUTING.md, LICENSE.md from auto-discovery
Cover version defaults to 1.0.0P1Read version from book.json with git describe fallback
Duplicate branding on coverP2Remove inline brand footer from cover template

v0.6.5 - Security Hardening And Bug Fixes

Release date: 2026-03-27 Theme: security defense-in-depth and correctness

v0.6.5 adds five security hardening measures across the plugin system, Mermaid renderer, Typst backend, upgrade pipeline, and git integration. It also fixes GitBook migration errors and search index performance.

Security Fixes

FixPriorityDescription
Plugin path traversal enforcedP0Relative plugin paths resolving outside the project directory are now rejected instead of only logging a warning
Mermaid XSS defense-in-depthP1Strip <script> tags and event handler attributes from Mermaid diagram content after HTML unescaping
Typst output capture boundedP1Limit captured stdout/stderr from typst compile to 1 MB, preventing OOM from malicious documents
Upgrade redirect SSRF protectionP1Validate HTTP redirect targets during upgrade downloads to prevent SSRF via DNS poisoning
Git command timeoutsP1Add 5-second timeout to git describe and git config calls in auto-discovery to prevent indefinite blocking

Fixed Issues

FixPriorityDescription
GitBook plugin migration errorsP1Skip GitBook npm plugins during book.json migration instead of generating invalid configs with missing paths
Search index heading snippetsP1Compute rune slice once per chapter instead of per heading, fixing O(N*M) allocation for chapters with many headings
Inline SVG badge heightP2Fix badge height mismatch between inline SVG and <img> rendering

Changed

ChangeDescription
Removed tautological testsRemove tests that produced false coverage

v0.6.6 - Chapter Title Deduplication And SUMMARY Parsing

Release date: 2026-03-27 Theme: rendering correctness

v0.6.6 fixes duplicate chapter titles in PDF output and improves SUMMARY.md parsing to correctly handle inline links.

Fixed Issues

FixPriorityDescription
Duplicate chapter title in PDFP0Sub-chapters using h2-h6 in Markdown had their heading duplicated because the deduplication logic only matched h1 tags; now matches any heading level
SUMMARY.md parsing picks up inline linksP0Navigation prose lines were incorrectly parsed as chapter entries; now only list items with a direct link are accepted

Delivered Features

FeaturePriorityDescription
Title mismatch warningP1New book-title-mismatch rule warns when a SUMMARY.md title differs from the file's first heading; SUMMARY title takes precedence in rendered output

v0.6.7 - PDF Bookmark And Mermaid Rendering Fixes

Release date: 2026-03-27 Theme: PDF rendering correctness and security

v0.6.7 fixes duplicate PDF bookmarks from cover titles, README title deduplication for centered layouts, and ensures Mermaid diagrams fully render before PDF generation.

Fixed Issues

FixPriorityDescription
Cover title duplicate PDF bookmarkP0Cover page title changed from <h1> to styled <div>, preventing Chrome's outline generator from creating a bookmark that duplicates the first chapter entry
README title deduplication handles wrapped headingsP0stripDuplicateLeadingH1 now finds the first heading even when preceded by non-heading HTML (e.g., <div align="center">, badge images)
Mermaid diagrams fully render in PDFP0Added a wait step (up to 15s) for mermaid.js to finish rendering all diagrams before Chrome prints to PDF

Security Fixes

FixPriorityDescription
Chrome CLI output capture boundedP1Chrome CLI fallback limits captured stdout/stderr to 10 MB via chromeLimitedWriter, preventing OOM
Symlink-aware image path containmentP1resolveLocalImagePath and EPUB buildImageAssetFromSource resolve symlinks via filepath.EvalSymlinks before the containment check
Git argument injection hardenedP1discover.go git commands validated against flag injection

v0.6.8 - Thread Safety And Test Coverage

Release date: 2026-03-28 Theme: correctness and test coverage

v0.6.8 improves Markdown parser thread safety, error wrapping in the upgrade pipeline, and GitHub source hardening. It also adds comprehensive test suites for checksum verification and SSRF redirect validation.

Improvements

ImprovementPriorityDescription
Markdown parser thread safetyP1Remove unnecessary sync.RWMutex from parser; headings collected via local state, making concurrent Parse calls safe without locking
Error wrapping in upgradeP2Use %w instead of %v for inner errors so callers can unwrap them
GitHub source hardeningP1Guard .gitattributes read with stat + size check to avoid reading oversized files

Tests

TestDescription
Checksum verification testsComprehensive test suite for upgrade binary checksum verification (valid match, mismatch, missing entry, case-insensitive hash, multiple formats)
SSRF redirect validation testsTest coverage for PlantUML redirect target validation (localhost, loopback IP, .local suffix, empty hostname)

v0.6.9 - Duplicate Bookmark Fix

Release date: 2026-03-28 Theme: PDF rendering correctness

v0.6.9 eliminates duplicate H1 bookmarks in PDF output by unconditionally stripping the leading <h1> from chapter content, since the template already renders the SUMMARY title as the chapter heading.

Fixed Issues

FixPriorityDescription
Eliminate duplicate H1 bookmarks in PDFP0Always strip the leading <h1> from chapter content since the template already renders the SUMMARY title as <h1 class="chapter-title">. Previously, the content H1 was only removed when its text exactly matched the SUMMARY title; now it is removed unconditionally for H1

v0.7.0 - Site UX Enhancements (Released 2026-03-28)

Theme: site output UX improvements

Delivered Features

FeaturePriorityDescription
Previous/Next navigationP0Bottom-of-page buttons linking to the previous and next chapters for continuous reading
"Built with mdPress" brandingP1Subtle footer link in site output; localized as "使用 mdPress 构建" for Chinese books
Collapsible sidebar sectionsP2Expand/collapse arrows for chapters with sub-pages in the sidebar

Deferred to Future Release

FeaturePriorityDescription
Sidebar chapter groupingP2Support parts in book.yaml to group chapters under collapsible section headers (e.g. "Part 1: Getting Started")

v0.7.1 - Bug Fixes, Security, And Typst Promotion

Release date: 2026-03-29 Theme: correctness, security, and format promotion

v0.7.1 fixes rendering bugs in heading regex matching, Typst code span conversion, and SVG inlining. It hardens PlantUML directive parsing and removes internal paths from the serve debug panel. It also promotes Typst to a first-class output format and adds site UX improvements.

Delivered Features

FeaturePriorityDescription
Typst promoted to first-class output formatP0Typst PDF generation available as --format typst
Force flag for migrate commandP1Add --force flag to overwrite existing files during migration
Filename sanitization in init commandP1Sanitize filenames during project initialization
Post-install verification for upgradeP1Verify binary integrity after upgrade installation
Site UX featuresP1Add selection highlighting, pending navigation, and improved client-side navigation

Security Fixes

FixPriorityDescription
PlantUML directive and SVG sanitization hardenedP0Strengthen PlantUML directive parsing and SVG content sanitization
Internal paths removed from serve debug panelP1Remove internal filesystem paths from the serve debug panel output

Fixed Issues

FixPriorityDescription
Heading regex correct tag matchingP0Fix heading regex to match the correct heading level tag
Typst converter skips code spansP0Prevent Typst markup conversion inside inline code spans
SVG inlining for nested SVGsP1Fix SVG inlining when SVGs contain nested SVG elements
Typst builder uses raw MarkdownP1Fix Typst builder to pass raw Markdown instead of HTML
Windows path separator in testP2Fix path separator handling for Windows compatibility

Improvements

ImprovementDescription
Doctor context and symlink handlingImprove doctor command with better context reporting and symlink-aware checks
PDF generator error handlingCheck tmpFile.Close error in PDF generator

v0.7.2 - Go Idiom Modernization And CI Fixes

Release date: 2026-03-30 Theme: code modernization and cross-platform reliability

v0.7.2 modernizes Go idioms across the codebase, migrating from deprecated APIs to modern equivalents and fixing Windows CI test failures.

Changed

ChangeDescription
Modernize Go idiomsMigrate os.IsNotExist to errors.Is(err, fs.ErrNotExist), sort to slices package, == io.EOF to errors.Is
Remove redundant helperReplace custom equalIntSlices with slices.Equal

Fixed Issues

FixPriorityDescription
Stale error message in PDF generatorP1Fix error messages referencing old function name
Windows test failures in CIP0Fix path handling in tests for Windows compatibility

Improvements

ImprovementDescription
Test assertions strengthenedAdd missing assertions for return values in server and plugin tests
Documentation syncUpdate ARCHITECTURE, ROADMAP, command docs, and manual versions

v0.7.3 - Security Hardening And Go 1.26

Release date: 2026-04-01 Theme: security hardening and dependency updates

v0.7.3 addresses SSRF bypass vectors, upgrades the Go toolchain to 1.26.1, and modernizes octal literals and structured logging across the codebase.

Security

FixPriorityDescription
Block SSRF via 0.0.0.0/8 rangeP0Prevent server-side requests to "this network" addresses that reach localhost on Linux
Guard SUMMARY.md parsing against TOCTOUP1Detect silent truncation when file grows between stat and read

Changed

ChangeDescription
Upgrade Go to 1.26.1Update minimum Go version and all dependencies
Use explicit octal literalsMigrate 0644/0755 to 0o644/0o755 across codebase
Use slog.Any for error loggingPreserve error type information in structured logs
Update CI to Go 1.26Bump GitHub Actions, GitLab CI, and Docker to Go 1.26
Update Dockerfile to Alpine 3.23Use latest Alpine base image

Fixed Issues

FixPriorityDescription
Handle deferred cleanup errorsP2Properly acknowledge discarded error returns in deferred cleanup calls
Fix CI cache path consistencyP2Add MDPRESS_CACHE_DIR env var to CI documentation examples
Fix stale plugin registry referenceP2Remove non-existent "plugin registry" link from migrate docs

v0.7.4 - Security Hardening And Dependency Updates

Release date: 2026-04-04 Theme: defense-in-depth security, dependency upgrades, and styling consistency

v0.7.4 hardens HTML/CSS sanitizers against advanced XSS vectors, eliminates TOCTOU race conditions in file operations, upgrades KaTeX and chroma, and adds missing figure/figcaption styles to standalone and EPUB outputs.

Security

FixPriorityDescription
Harden Mermaid sanitizer regexP0Fix dangerousTagPattern to handle > inside quoted attributes; expand jsURIPattern to replace entire href/src attributes
Block vbscript/protocol-relative URLs in CSSP1Add vbscript: to CSS URL blocker; detect //evil.com protocol-relative URLs
Fix TOCTOU in build manifestP1Replace stat+read with io.LimitReader in loadManifest and computeChapterHash
Add LimitReader to CopyFileP1Defend against file growth between stat and copy with bounded reads
SSRF-safe transport for all HTTP clientsP1Apply SSRFSafeTransport to doctor and upgrade commands
SVG2 href sanitizationP2Strip bare href and single-quoted external URLs in PlantUML SVG output

Changed

ChangeDescription
Upgrade KaTeX to 0.16.44Update all CDN URLs from 0.16.11
Upgrade chroma to v2.23.1Latest syntax highlighter with improved language support
Upgrade codecov-action to v6Update CI coverage upload action
Scope KaTeX in standalone HTMLTarget #main-content to avoid processing sidebar text as math
Export SSRFSafeTransportMake SSRF-safe transport reusable via utils.SSRFSafeTransport()

Fixed

FixDescription
Add figure/figcaption styles to standalone HTMLCenter figures and captions with dark mode support via CSS variables
Add figure/figcaption base styles to EPUBInline fallback styles for images, figures, and captions
Add local execution timeout for PlantUMLPrevent indefinite hangs with unbounded context

v0.7.5 - i18n, Caption Styling, And Bug Fixes

Release date: 2026-04-06 Theme: internationalization, rendering, and correctness

v0.7.5 adds i18n support for cover page labels (Chinese, Japanese, Korean), auto-detects figure/table captions for CSS styling, allows Unicode characters in font family names, improves author discovery from git remotes, and fixes a slug collision bug in chapter HTML generation.

Delivered Features

FeaturePriorityDescription
i18n cover page labelsP1Cover page shows localized Author/Version/Date labels for zh, ja, ko languages
Figure/table caption stylingP1Paragraphs starting with "Figure N" or "图 N" etc. get class="caption" for centered styling
Unicode font family validationP1Font family names with CJK characters (e.g. 思源黑体) are now accepted
Git remote owner for authorP2Auto-discovery prefers git remote owner over GitHub URLs found in README

Fixed Issues

FixPriorityDescription
Slug collision in chapter HTMLP1Three-way slug collisions (e.g. two chapters slugifying to "intro" plus a natural "intro-2") no longer overwrite files
Context leak in image download retryP1Retry path no longer cancels context before response body is read
Executable permission after upgradeP1Explicit os.Chmod ensures binary is executable after upgrade write

Improvements

ImprovementDescription
Move test-only helper to test fileRemove expandString from production code
Caption unit testsAdd table-driven tests for caption pattern matching
Slug collision three-way testTest coverage for N-way slug deduplication

Documentation

ChangeDescription
Sync Chinese ROADMAPAdd missing v0.6.5-v0.6.9, v0.7.1-v0.7.2 sections to ROADMAP_zh.md
Document migrate flagsAdd --dry-run and --force flags to CLI reference

v0.7.6 - Security Hardening And Bug Fixes

Release date: 2026-04-13 Theme: security hardening, correctness, and documentation sync

v0.7.6 hardens config file loading against TOCTOU races, adds WebSocket pre-checks, prevents git flag injection, fixes site chapter tree slug collisions, and synchronizes architecture documentation with the codebase.

Delivered Features

FeaturePriorityDescription
Config file TOCTOU hardeningP1Use Open+Fstat+LimitReader to prevent race conditions during config loading
WebSocket pre-check before upgradeP1Return HTTP 503 before upgrading when at connection limit
Git flag injection preventionP1Prefix directory arguments with ./ to prevent - prefixed dirs from being parsed as flags
CSS behavior property sanitizationP2Block legacy IE behavior: and -moz-binding: CSS injection vectors
Serve network binding warningP2Warn when binding to non-loopback address

Fixed Issues

FixPriorityDescription
Site chapter tree slug collisionP1Use aligned chapterFiles slice for correct mapping when chapters are skipped
Temp file leak in PDF fallbackP1Clean up temporary file when rename fails
GITHUB_TOKEN double-readP1Read token once to prevent mismatch between URL embedding and log redaction
Scope KaTeX to chapter contentP2Target .chapter-content instead of document.body
Plugin cleanup on build failureP1Ensure plugin resources are released even when build fails partway through

Improvements

ImprovementDescription
Refactor GitHub source cleanupExtract cleanupOnError() and validateSubDir() methods to reduce duplication
Improve link rewrite normalizationMove extension lowercasing into NormalizePath for consistent map lookups
Sync architecture docsFix HeadingInfo fields, LocalSource field name, build manifest capitalization, and other doc-code mismatches

v0.7.7 - Security And Correctness Fixes

Release date: 2026-04-15 Theme: additional security hardening, correctness fixes, and test improvements

v0.7.7 blocks dangerous URI schemes in cover images, prevents script injection in live-reload, fixes bookmarks option and watermark opacity validation, and strengthens test assertions.

Delivered Features

FeaturePriorityDescription
Cover image URI scheme rejectionP1Block javascript:, vbscript:, and data: URIs in CSS url() context
Live-reload script injection fixP1Escape </ in inline JSON to prevent </script> injection

Fixed Issues

FixPriorityDescription
generate_bookmarks: false ignoredP1Always pass document outline option so disabling bookmarks works
Watermark opacity out of rangeP2Clamp values outside [0.0, 1.0] for defense-in-depth
Plugin cleanup in serve modeP2Ensure plugin resources are released when serve build finishes

Improvements

ImprovementDescription
Strengthen test assertionsUse t.Fatal/t.Skip in CJK tests, add warnRecorder mock, add boundary and whitespace edge cases
Sync architecture docsFix source module scope and watched file extensions

v0.7.8 - Correctness And Cross-Platform Fixes

Release date: 2026-04-18 Theme: correctness fixes, cross-platform robustness, and documentation sync

v0.7.8 fixes Typst bold+italic conversion, case-insensitive body tag search, URL-encoded image path validation, symlink-aware path traversal checks, and HTML entity handling in search index and meta descriptions.

Fixed Issues

FixPriorityDescription
Case-insensitive body tag searchP2Use EqualFold byte scan to avoid index mismatch with multi-byte lowercasing
URL-decode image paths in validatorP2Decode percent-encoded paths before filesystem validation
Typst bold+italic conversionP2***text*** now correctly produces *_text_* instead of broken output
Symlink-aware path validationP2Resolve symlinks on nearest existing ancestor for containment checks
HTML entity handling in searchP2Unescape entities in plain text so heading lookups and descriptions render correctly
Windows path validation testP1Make absolute path test case platform-aware

Improvements

ImprovementDescription
Add mermaid bracket diagnostic testsComprehensive coverage for bracket matching, nesting, quotes, and comments
Sync documentationFix changelog links, architecture version, and roadmap ordering

v0.7.9 — Windows Multilingual Build Fix

Release date: 2026-04-19 Theme: cross-platform reliability

v0.7.9 fixes a Windows-specific regression in multilingual build mode where filepath.Rel could fail due to non-absolute root paths.

Fixed Issues

FixPriorityDescription
Windows multilingual switcher injectionP1Normalize multilingual root directory to absolute path before generating landing-page and language-switcher links

Improvements

ImprovementDescription
Windows multilingual regression coverageCover absolute-path normalization and slash-normalized language-switcher links for Windows builds

v0.7.10 — Security Hardening and Stability

Release date: 2026-05-08 Theme: defensive coding, XSS hardening, and bug fixes

v0.7.10 is a security and stability release. It hardens HTML/CSS escaping in the rendered site, prevents symlink and TOCTOU vulnerabilities in the build pipeline, and fixes several user-visible bugs around config priority, slug collisions, and KaTeX rendering.

Security Fixes

FixPriorityDescription
XSS in search result excerptP0Encode &, >, " in addition to < before insertion via innerHTML
HTML entity escape for headingsP1Add single-quote &#39; encoding for safer attribute contexts
CSS escape fallback expansionP2Match CSS.escape() behavior across all CSS special characters
Symlink escape preventionP1Validate resolved subdir paths stay within source root
TOCTOU race in theme/server readsP1Atomic read paths replace stat-then-read patterns
Banner injection size guardP2Reject oversized banner payloads before injection
Plugin metadata output limitP2Cap plugin metadata responses to prevent runaway output
Go stdlib security updateP1Upgrade Dockerfile and toolchain to Go 1.26.2

Bug Fixes

FixDescription
Preserve book.json versionExplicit book.json version no longer overridden by README extraction
WebSocket nil conn panicGuard against nil connection in sentinel write
Multilingual build rootResolve build root properly across language variants
Slug deduplication collisionAvoid distinct headings collapsing into identical slugs
KaTeX multi-chapter renderingInitialize KaTeX correctly across chapter switches
Typst pipeline cleanupRemove partial PDFs on failure, sanitize embedded newlines
PlantUML error chainPreserve underlying errors with %w wrapping
Clipboard / CDN fallbackGraceful degradation when browser APIs or CDN unavailable

Improvements

ImprovementDescription
SA5011 lint complianceAdd return-after-t.Fatal and remove redundant nil checks
Test assertion strengtheningReplace no-op tests with real assertions across packages
Dead code removalDrop unused CJK fallback, manifest helpers, search variable
Dependency updatesfsnotify v1.10.1, chromedp/cdproto refresh
DocumentationDocument ResolvePath security contract, consolidate EvalSymlinksAncestor

v0.7.11 — Browser Fixes And Toolchain Upgrades

Release date: 2026-06-17 Theme: correctness fixes, smoother macOS install, dependency refresh

Fixed Issues

FixDescription
Deprecated navigator.platform usageMac detection now uses navigator.userAgent, so keyboard shortcut badges display correctly in modern browsers
SPA search scope and Escape conflictSearch helpers exposed via window globals survive SPA navigation; sidebar Escape handler guarded while the search overlay is open
Lightbox focus restoreStale focus references cleared after restore
TOCTOU gaps in file readsEPUB image loading and other stat-then-read patterns replaced with atomic reads
Git clone timeout and credential hangGIT_TERMINAL_PROMPT=0 plus WaitDelay prevent indefinite blocking; clone timeout configurable
Root SubDir containmentA subdirectory equal to the source root is no longer rejected as an escape

Improvements

ImprovementDescription
Homebrew cask quarantine removalPost-install hook strips the macOS Gatekeeper quarantine attribute automatically
Go 1.26.3 and dependency upgradesStdlib security fixes plus chroma, pflag, x/sys, and other refreshes
golangci-lint v2.12.2 in CIGitHub Actions and GitLab CI aligned on the latest linter
Expanded English CLI referenceDetailed flag descriptions across command docs

v0.7.12 — Project-Wide Hardening And CLI Polish

Release date: 2026-07-05 Theme: full project audit — security, pipeline correctness, safer self-update

Security Fixes

FixPriorityDescription
Remote plugin execution gatedP0Plugins from remote projects run only with the new --allow-plugins flag; local projects are unaffected
GITHUB_TOKEN leak in clonesP0Token no longer embedded in the clone URL or persisted in the temp clone's git config
Security headers on served pagesP1Live-reload HTML responses get X-Content-Type-Options, X-Frame-Options, CSP, etc.
Plugin trust model documentedP2Manuals warn that book.yaml plugins are arbitrary executables

Bug Fixes

FixDescription
Math preprocessor vs code blocks$/$$ substitution skips fenced code and inline code, so shell/awk/PHP samples are no longer mangled
Typst backend correctnessValid font: arrays, image path resolution via --root, prose escaping of $ # @ < > and unpaired */_
EPUB image handlingShared ../images/... assets packaged; non-base64 data URIs warn instead of aborting
Live server robustnessWatches newly created directories, serializes rebuilds, WebSocket keepalive, graceful-shutdown panic fix
serve --branch/--subdirBoth flags now registered on serve for remote previews
doctor improvementsTypst availability check; --strict exits non-zero on error-level failures
quickstart target handlingFriendly error for file targets; --force scaffolds into non-empty directories
Version reportingSource builds fall back to runtime/debug.ReadBuildInfo()

Improvements

ImprovementDescription
Safer upgradeRespects Homebrew/go install installs (override with --force); fails closed on missing checksums (--skip-checksum opts out)
New CLI flags/shorthands--allow-plugins (build/serve), -o/-f shorthands, --strict (doctor), --force/--skip-checksum (upgrade), --force (quickstart)
Linux packages and source archiveReleases add .deb/.rpm/.apk packages and a checksummed source tarball
Faster Docker buildsBuilder stage cross-compiles via $BUILDPLATFORM without QEMU emulation
Documentation accuracyRemoved nonexistent flags from examples, corrected output paths, restored EN/ZH manual parity

v0.7.13 — Beautiful Defaults

Release date: 2026-07-05 Theme: publication-grade default look and consistent site output

Changes

ChangeDescription
Retuned technical themeDeep-navy full-bleed default cover, refined navy ink palette, hierarchical book TOC, hairline table borders with tinted headers and zebra striping, framed images, tinted inline-code chips, accent-bar blockquotes; callouts no longer split across PDF pages
Centered site reading columnThe reading column centers and the right page-TOC rail collapses when empty
build --format site defaults to _book/Consistent with mdpress serve and the deploy examples; --output <dir> writes elsewhere; multi-language builds keep per-language <lang>_site/ layout

v0.7.14 — Output Ergonomics, Custom Themes, And Format Quality

Release date: 2026-07-10 Theme: predictable output paths, a real custom-theme mechanism, per-format rendering quality

Changes

ChangeDescription
Predictable --output semanticsDirectory targets receive files and in-place site pages; file-base targets produce <base>.pdf/<base>_site/; default site output builds into a temp dir and atomically swaps _book/ with pruning and a safety check for non-generated targets
Remote build outputsRemote GitHub builds without --output write to the current working directory instead of a temp dir
Build result summaryOne ✓ Generated <format> → <path> line per format, printed even with --quiet
PDF defaultsCentered page-number footer replaces the forced "Built with mdPress" footer; style.header/style.footer honored with {page}/{pages}/{title} tokens; new output.tagged_pdf toggle for smaller untagged PDFs
Real custom themesstyle.theme: mytheme.yaml loads a YAML theme file; themes/<name>.yaml in the project overrides or defines a theme; themes list/show/preview derive from live palettes
Theme retuning and theme-aware coversElegant (warm serif, bronze accent) and minimal (quiet monochrome) retuned; default covers follow the theme when no cover is configured
Site improvementsFully relative links (works on GitHub Pages project sites and file://), output.site_url for sitemap.xml, output.edit_base for per-chapter edit links, generated 404.html, dark-mode table/code fixes
Standalone HTMLCover hero section and fixed dark mode
EPUB qualityChapter titles as <h1>, theme-derived reader-friendly stylesheet, math chapters declared scripted remote-resources
Serve watcher fixThe infinite rebuild loop after the first edit is fixed by ignoring generated output directories
Scaffold cleanupquickstart/init no longer hardcode a cover background or ship a placeholder cover.svg; a .gitignore is scaffolded; shell completion instructions corrected

v0.7.15 — Audit Follow-Up: Data Loss And Never-Worked Paths

Release date: 2026-07-22 Theme: fix the issues a second full audit confirmed, and add guardrail tests for the patterns that keep producing them

Changes

ChangeDescription
serve --output <dir> is no longer destructiveThe rebuild swap deleted the contents of an existing directory; serve now refuses a non-generated target up front, the same check build --format site already had
Site root permissionsThe atomic swap published a 0700 directory as the site root — a 403 under nginx/httpd; it is now world-readable
ePub correctnessBoolean-attribute expansion no longer rewrites prose, chapters sharing a title no longer overwrite each other, cross-chapter .md links are rewritten, and package/NCX/nav references are percent-encoded
--format typst builds scaffolded projectsbook.language was passed verbatim into Typst's lang:, so every generated project failed; it is now reduced to an ISO 639 code
--format epub -o <newdir>/book.epubePub was the only backend that did not create its output directory
Typography config is honoredstyle.font_family / font_size / line_height were read only by the Typst backend; PDF, HTML and site now honor them
Site search rankingResults were truncated to 20 hits before ranking, so a title match could be missing entirely; the reported total was the truncated one
Watcher handles deletes and renamesA deleted chapter kept being served until an unrelated edit triggered a rebuild
Zero-config language detectionDefaultConfig hardcoded zh-CN, so an English docs folder built a Chinese UI and cover
--format all drops typstall failed on any machine without the optional Typst CLI; pass --format typst explicitly
Typography defaults moved into the themesAn unset style.* now means "inherit from the theme". Breaking: a book.yaml without language: resolves to en-US unless the content is predominantly CJK
Guardrail testsA cross-format matrix fixture, a style-wiring test driving the real CLI, and a test that resolves every mdpress … invocation in docs/ against the real command tree

v0.8.0 — Audit Follow-Up: Silent Content Loss

Release date: 2026-07-23 Theme: the class of bug where the build succeeds, the output looks plausible, and the author has nothing to debug with

Changes

ChangeDescription
Shared image directories![](../assets/logo.png) was dropped from site, standalone HTML and PDF with no diagnostic; containment was checked against the chapter's directory instead of the book root
Front matter, BOM and stray <h1>YAML front matter rendered as body text, a UTF-8 BOM stopped the first heading being a heading, and a second <h1> suppressed the page title
migrate no longer destroys documentsAround an already-fenced block it added a second fence, swallowing the rest of the file — in place, with no backup
validate as a CI gateMarkdown inside fenced blocks was treated as real references (92 false errors on mdPress's own manual); --strict, anchor checks, orphan and duplicate-chapter checks added
--config is honoredIt was discarded whenever a source directory was also given
Unknown book.yaml keysReported with a "did you mean" suggestion instead of being dropped silently
PDF outputoutput.margin_* reaches @page, the TOC has a heading and real page numbers via a two-pass render, and page-break-inside: avoid no longer leaves near-blank pages
ePub outputDocuments are parsed before packaging, hierarchy and highlighting are preserved, and a cover image is generated
Site weightImages ship as files rather than base64 in every page: a 3-page book with one screenshot went from 3.5 MB to 1.0 MB
Multi-language layoutBreaking: every spelling of --output now resolves to one deployable tree with the switcher at its index.html
--format site --output ./distBreaking: writes to ./dist instead of appending _site when the path does not already exist
Ctrl+C stops a buildSIGINT was captured and never acted on, leaving a finished artifact that looked deliberate
CDN assets pinned and SRI-checkedA blocked or tampered CDN now shows an explanatory notice and the diagram source instead of a blank gap
PlantUML documentation made honestmdPress does not render it; the manual advertised automatic rendering and doctor told users to install it
New commandsconfig show, cache info/clear, validate --strict, version --json, static/ passthrough, site branding, variables:, section:

v0.8.1 — Release-Run Fallout

Release date: 2026-07-23 Theme: two defects that v0.8.0's own release run exposed

Changes

ChangeDescription
A released binary reports its own tagmdpress version printed 0.8.0+dirty, and 0.7.15+dirty before it: the injected tag was discarded whenever it equalled the compiled-in default — which it does on every correctly prepared release — leaving Go's module version, stamped dirty by goreleaser's own pre-build hooks
Windows chapter pathsZero-config discovery wrote guide\README.md where init and every hand-written book.yaml write guide/README.md
Windows test coverageThe CLI test binary was built without a .exe suffix, and an image-containment case named /etc/passwd as absolute — true on Unix, merely rooted on Windows

v0.8.2 — Third-Audit Fixes And A Real Upgrade Path

Release date: 2026-07-24 Theme: a third full audit — every config key brute-forced against real output, docs mutation-checked against the binary, PDFs/ePubs/sites inspected byte for byte — plus a verification pass over the fixes

Changes

ChangeDescription
mdpress upgrade works on LinuxIt downloaded the .apk package instead of the archive and then failed to install it — impossible since v0.7.12; it now selects the archive and refuses any payload that is not a native executable
build --format site stops deleting <output>.oldThe atomic swap used that sibling name as scratch and removed it up front — exactly a user's manual backup; serve deleted it before even the safety check
PDF table of contentsRepeated headings across chapters got each other's page numbers; the two-pass render now namespaces anchors like the standalone HTML already did
build --format typstProduced no output for any book with a fenced code block or emphasis wrapped across a line — including the project's own manual, which now builds to a 214-page PDF
Data-loss fixesA chapter with lone-CR line endings lost its whole body silently; links with spaces or query strings, and image paths with %20, resolve; an image that cannot be embedded is reported
Ctrl+C interrupts a PDF buildIt was ignored for the whole 40–90 s render; time-to-exit went from ~55 s (unkillable) to 0.1 s, with no orphaned Chrome
Header/footer off the coverChrome draws them on every page from the print params where no CSS reaches page one; the cover's running head is now removed while the outline and tagged structure stay intact
ePubKeeps its table of contents under empty parents; a chapter titled "Cover"/"Nav"/"Glossary" no longer overwrites generated files; glossary term links resolve to glossary.xhtml; ids are valid XML
Config honored, not guessedThe defaults-as-sentinel defect found five more times (theme page size/margins, a language directory's language, book.json language/version, --config path spelling); loading now tracks which keys the user actually wrote
Chrome found on WindowsThe search list was Unix-only, so PDF could never work on a stock Windows install
SiteDeeply nested chapters are linked; quoted-phrase and CJK search work; dark-mode h5/h6 contrast; shared CSS/JS cut per-page weight from ~110 KB to ~9 KB
mdpress migrateResolves GitBook {{ book.x }} variables instead of shipping literal text, and says so in its report
Release safetymake bump VERSION=x.y.z replaces nine hand-edited files; the pipeline now downloads a published artifact and asserts it reports its own tag — the hole that shipped <tag>+dirty twice
Docs match the binaryRemoved keys that do not exist, corrected stale defaults, and documented every 0.8.0 feature the manual never mentioned, in both languages

v1.0.0 - Stable Release

Target release: 2027-Q1 Theme: production readiness and long-term support

Stability Goals

GoalDescription
API stabilityFreeze CLI flags and book.yaml structure under semantic versioning
Test coverageReach at least 90% coverage for core packages
DocumentationComplete user manuals, bilingual docs, API docs, and migration guides
Performance baselinesPrevent regressions across releases
Platform validationCI coverage across macOS, Linux, and Windows
Security reviewContinuous dependency scanning and known-vulnerability control

Planned Features

FeatureDescription
Official theme registryCommunity-contributed theme distribution
Official plugin registryCommunity-contributed plugin distribution
Migration toolingAutomated migration from mdBook (GitBook/HonKit migration already available via mdpress migrate)

LTS Policy

The first stable release is intended to become the first LTS version with:

  • At least 12 months of bug-fix support
  • At least 18 months of security-fix support
  • Backward compatibility for config format
  • Backward compatibility for CLI flags

Longer-Term Ideas

These items are post-v1.0.0 and will be prioritized by community demand:

FeatureDescription
GUI editorBrowser-based visual editor
Cloud build serviceSaaS build service triggered from Git repositories
Collaborative editingReal-time multi-user editing
PDF/A outputArchival-compliant PDF support
Print-focused outputBleed, color management, and ICC profile support
DOCX outputWord document export
Template marketplaceReusable design and layout presets

How To Contribute

mdPress is open source and welcomes contributions:

  • Report bugs in GitHub Issues
  • Submit feature requests and note the version you are targeting
  • Fork the repository and open pull requests
  • Improve docs and translations
  • Contribute themes

The roadmap is expected to evolve with community feedback and implementation progress.