v1.0.0
v1.0.0
Released: 2026-03-23
Breaking Changes
Switch to Rust-only formatting engine — the TypeScript formatter (MdxFormatter class, html-block-formatter, indent-detector) has been removed entirely (2fc80ab)
Rust napi native module is now required — no fallback to TypeScript if unavailable
Removed production dependencies: unified, remark-parse, remark-mdx, remark-frontmatter, unist-util-visit, prettier (moved to devDependency)
Removed exported types: FormatterOperation, MdxJsxElement, MdxJsxAttribute, IndentDetectorLike, PositionMapEntry, and AST re-exports (Node, Parent, Position, Root)
CI now requires Rust toolchain to build the napi module before running tests
Features
Rust engine with 3-7x performance improvement over TypeScript (bf95183)
Standalone Rust CLI binary (
mdx-formatter) with--write,--check,--config(crates/mdx-formatter-cli)WASM support for browser environments via
mdx-formatter-wasmcrate (041b4df)Interactive playground on doc site using WASM engine (041b4df)
napi-rs cross-platform binaries: macOS (arm64, x64), Linux (x64), Windows (x64)
Config file loading in Rust:
.mdx-formatter.json,package.jsonkey, 3-layer mergeAll 10 formatting settings fully implemented in Rust with serde deserialization
342 Rust tests + 85 passthrough tests confirming feature parity
Bug Fixes
Add empty frontmatter guard to prevent reversed-range corruption in YAML formatting (bf95183)
Use
settings.indentJsxContent.indentSizeinstead of hardcoded 2-space indent (bf95183)Add JSON config shape validation — reject arrays/primitives (bf95183)
Fix all numeric fallbacks:
||→??to prevent overriding explicit 0 values (14f48e8)Rust CLI: use
try_format()instead offormat()to avoid panic on parse failure (bf95183)Rust: deduplicate
parse()/try_parse()—parse()now delegates totry_parse()(bf95183)Rust: avoid String allocation in block_components/container_components lookup (bf95183)
Fix napi CI: replace deprecated macos-13 with macos-latest (e6f9d58)
Other Changes
Remove dead code: originalContent, positionMap, buildPositionMap(), getLineAtPosition(), getEnabledRules() (14f48e8)
Remove 6 unused type exports and unreachable estree block (14f48e8, 83ca23b)
Remove 4 unused production dependencies: remark, remark-directive, remark-gfm, remark-stringify (d9068bb)
Move HTML_ELEMENTS Set to module-level constant for performance (bf95183)
CI: add timeout-minutes and concurrency group (d9068bb)
CI: add Rust toolchain and wasm-pack build steps (d778ba2, 29dca44)
Fix CLAUDE.md: husky → lefthook (d9068bb)
Update all docs to reflect Rust-only engine (87bf605, 7a022df)
Doc site: playground with WASM engine, settings panel, JSX text inputs (6100b54, 8c25ed7)
Doc site versioning: snapshot v0.x docs for TypeScript engine era
Reorder header navigation