Changelog
All notable changes to markymark are documented here. Each release links to the full diff on GitHub.
v0.6.0 (2026-02-25)
Section titled “v0.6.0 (2026-02-25)”Completes the extraction pipeline migration started in v0.5.0. All remaining symbol types — code spans, XML tags, tasks, embeds, callouts, block refs, link definitions, query blocks, and properties — are now extracted through the full Zig→FFI→Rust→LSP/MCP stack. The legacy regex-based Rust extractors have been removed; zig-kernels is now mandatory. The RealmIndex has been rebuilt as v2 with string interning and incremental document updates.
Note: Agents like Claude Code use both LSP and MCP simultaneously — they are complementary protocols, not alternative paths. This release completes MCP parity with LSP for all extracted element types.
Features
Section titled “Features”- Complete extraction pipeline (ix3) — 9 new element types extracted by the Zig md4c ExtractionRenderer, serialized in blob v2 format (128-byte header with backward compatibility), and wired through
from_blob,from_scan,ScanBackend, and LSP/MCP - RealmIndex v2 (n7wx) — String interning via
lassodeduplicates URI and heading allocations; newupdate_document()computes contribution diffs incrementally; O(1)stem_to_urisindex for wiki link resolution; lazytag_to_docsbuilt on first access - Blob v2 header — 128-byte header with v1/v2 backward compatibility
- MCP batch indexing migrated from
from_asttofrom_scan
Bug Fixes
Section titled “Bug Fixes”- Preserve frontmatter and mask it before engine/scan parsing
- Pick earliest frontmatter close delimiter in mixed-ending files
- Property scan past non-property lines and CRLF frontmatter handling
- Correct offset recovery for code spans and tasks
- Windows: append
.exeto binary path and download URL - VSCode: return bare name for PATH fallback on unsupported platforms
Breaking Changes
Section titled “Breaking Changes”zig-kernelsis now mandatory — regex extractors have been removed- Zig 0.15.2+ required for all builds (enforced by
build.rs)
Refactoring
Section titled “Refactoring”scanner.rssplit into 4 submodulesfrom_blob.rsconverted to module directory withheader.rs,owned.rs, and 4 test submodulesdocument.zigsplit into helpers, free functions, stored types, and FFI typesextraction_renderer_tests.zigsplit into 4 thematic test filesextract.rsconverted to submodule directory with frontmatter, tasks, blocks, links, and tags
Infrastructure
Section titled “Infrastructure”- Zig 0.15.2 archive corruption fix — archives repacked with system
aron Linux targets
Full diff: v0.5.1…v0.6.0
v0.5.1 (2026-02-21)
Section titled “v0.5.1 (2026-02-21)”Focused improvements to the Zig md4c parsing pipeline and Rust error handling.
Bug Fixes
Section titled “Bug Fixes”- O(n) autolink paren trimming — the GFM autolink parenthesis-balancing loop in the Zig md4c port was quadratic; rewritten as a single-pass O(n) scan
Improvements
Section titled “Improvements”BlobErrornow implementsDisplayandErrortraits, enablingBox<dyn Error>,?operator, andanyhowintegration with per-variant diagnostic messages- Extract
map_md4c_heading/map_md4c_linkhelpers inMd4cScanBackend
Full diff: v0.5.0…v0.5.1
v0.5.0 (2026-02-20)
Section titled “v0.5.0 (2026-02-20)”Replaces the tree-sitter incremental indexing pipeline with a new md4c-based DocumentEngine. The new pipeline vendors Bun’s md4c Zig parser for single-pass markdown extraction, serializes results to a compact binary blob format, and crosses the FFI boundary into Rust — eliminating double-parse overhead.
Features
Section titled “Features”- New md4c parsing pipeline — Vendored Bun’s md4c CommonMark parser (Zig), streaming
ExtractionRendererextracts headings, links, tags, and block IDs in a single pass, exposed through C ABI with Rust FFI bindings - DocumentEngine with blob serialization — Zig
DocumentEngineproduces a compact binary blob; Rust-sideDocumentIndex::from_blob()deserializes without re-parsing - LSP pipeline overhaul —
scan_allreplaces tree-sitter incremental indexing, eliminating the previous double-parse (tree-sitter parse + separate extraction pass) - Async debounce —
did_changenotifications debounced at 75ms with generation counters preventing stale batches after close/reopen cycles
Bug Fixes
Section titled “Bug Fixes”- Removed undefined behavior in
DocumentIndexarena_ref mutex escape - Removed unsound
Syncimpl onDocumentIndex - Fixed
extractFromMarkdowndouble-free and heading text leak on OOM - Fixed
toOwnedSlicecascade leak and append double-frees inparseAll - Fixed
normalizeLabelmemory leak in vendored md4c parser - Wiki link alias detection: compare
text != target - Slug truncation no longer returns empty string
Breaking Changes
Section titled “Breaking Changes”- Tree-sitter incremental indexing replaced by md4c-based DocumentEngine
- New document processing pipeline — plugins relying on tree-sitter internals will need updates
Infrastructure
Section titled “Infrastructure”- Release process formalized in RELEASING.md with 7-crate publish order
prepare-releaseskill added for guided 4-phase release workflow- Golden blob roundtrip test catches unilateral Zig/Rust format drift
Full diff: v0.4.2…v0.5.0
v0.4.2 (2026-02-20)
Section titled “v0.4.2 (2026-02-20)”Features
Section titled “Features”- get-diagnostics MCP tool — new MCP tool with
file://URI validation and structured doc support
Bug Fixes
Section titled “Bug Fixes”- Include new entries from large insertions in incremental merge
- Correct assertion message in realm_stats preview check
- Create parent dirs in
TempWorkspace::writefor nested paths
Performance
Section titled “Performance”- Eliminate eager allocation of heading names in
SearchSymbols
Refactoring
Section titled “Refactoring”- Split
incremental/tests.rsinto submodules - Split
runtime_engine_tests.rsinto 9 submodules - Move
realm.rstorealm/module directory withtypes.rs,helpers.rs, andtests.rs - Extract shared
TempWorkspacetest helper and migrate across test suites
Full diff: v0.4.1…v0.4.2
v0.4.1 (2026-02-19)
Section titled “v0.4.1 (2026-02-19)”Features
Section titled “Features”- LSP debounce —
did_changenotifications debounced with 75ms async cancellation
Bug Fixes
Section titled “Bug Fixes”- Detect edits in large gaps between extractor entries during incremental indexing
- Deduplicate link edges per document in graph analysis
- Improve markdown link resolution with path-relative lookup
Full diff: v0.4.0…v0.4.1
v0.4.0 (2026-02-19)
Section titled “v0.4.0 (2026-02-19)”Major release introducing Zig SIMD acceleration kernels, MCP intelligence tools, incremental indexing, and a VSCode extension.
Note: Agents like Claude Code use both LSP and MCP simultaneously — they are complementary protocols, not alternative paths. This release adds MCP tools that pair with the existing LSP capabilities.
Features
Section titled “Features”- Zig SIMD kernels — Format scanners (
env_scan,ini_scan,toml_scan,yaml_scan,json_keys) with SIMD-accelerated key extraction; link graph engine; batched fuzzy match; Aho-Corasick multi-pattern scanner; slug generation via C ABI - MCP tools —
search-workspace(full-text search with frontmatter/property/tag filtering),search-for-pattern(regex search with glob filtering and context lines),graph-analysis(link graph intelligence with orphans, hubs, broken links, clusters) - Incremental indexing (Phase 3) — All 5 extractors carry byte offsets for selective merge; range intersection with neighbor window and tail-boundary guard; benchmarked 1.23x speedup
- VSCode extension — Marketplace-ready extension with binary discovery and LSP client
Bug Fixes
Section titled “Bug Fixes”- Implement
___chkstk_msfor Windows x86_64 to resolve stack frame issues - CRLF offset drift fix in incremental indexing
- Insertion-point boundary correction
Breaking Changes
Section titled “Breaking Changes”- New feature-gated Zig dependency (
zig-kernelsfeature flag)
Refactoring
Section titled “Refactoring”- Split
state.rs(1170 lines) intostate/{mod,completion,navigation,rename}.rs - Renamed
runtime_enginetoenginewith submodules - Extracted tool handlers into
tools/submodule
Full diff: v0.3.0…v0.4.0
v0.3.0 (2026-02-16)
Section titled “v0.3.0 (2026-02-16)”Introduces the Zig SIMD kernel foundation and incremental tree-sitter parsing.
Features
Section titled “Features”- Zig kernel scaffold —
zig/directory withbuild.zig, source structure, andmarkymark-kernelsRust crate with FFI bridge - SIMD kernels —
heading_scan,link_scan,tag_scan,block_scan,token_estimate,content_hashimplemented in Zig with Rust FFI wrappers - Shared BRZA kernels — Similarity, normalize, entities, quantize, and embedding index kernels ported with Rust FFI wrappers
- Incremental tree-sitter parsing —
MarkdownTreestored per document,TextDocumentSyncKind::INCREMENTALenabled, incremental parsing wired end-to-end - Core traits —
ScanBackendandEmbeddingProvidertraits added tomarkymark-core
Bug Fixes
Section titled “Bug Fixes”- Enable PIC in Zig static library for Linux x86_64 linking
- Defensive FFI hardening: replace
as u32casts withtry_fromat FFI boundary - Initialize written parameter in scan FFI functions
- Skip invalid incremental edits when
old_end < start
Breaking Changes
Section titled “Breaking Changes”- First Zig dependency introduced (optional via
zig-kernelsfeature flag)
Full diff: v0.2.0…v0.3.0
v0.2.0 (2026-02-16)
Section titled “v0.2.0 (2026-02-16)”Introduces arena allocation, multi-format structured document support, and security hardening.
Features
Section titled “Features”- Arena allocation —
bumpalo-based arena infrastructure inmarkymark-core, migrated through parser and index layers withDocumentArenaandArenaHashMap - Multi-format support — JSON, JSONC, JSON5, JSONL, YAML, TOML,
.env, and INI parsers withStructuredDocumentIndex,AnyDocumentIndex, andRealmIndexintegration - LSP multi-format —
DocumentSymbols, hover, and find-references for structured documents - Tree-sitter migration — Upgraded from tree-sitter 0.19 to 0.26 with
tree-sitter-mdwrapper - Security — Advisory security workflow with SARIF uploads, lefthook pre-commit hooks, custom semgrep rules with fixture validation
- Plugin distribution —
marketplace.jsonfor self-hosted plugin distribution
Bug Fixes
Section titled “Bug Fixes”- Resolve
frontmatter_and_propertiesSIGSEGV - Preserve duplicate block IDs across documents
- Ignore XML-like syntax inside fenced code blocks
BlockEntryrange propagation for go-to-definition
Performance
Section titled “Performance”- Optimize
remove_from_cross_doc_indexesto O(doc size) - Real corpus benchmarks added
Refactoring
Section titled “Refactoring”- Split
types.rsinto submodules below 1000 LOC
Full diff: v0.1.0-alpha.2…v0.2.0
v0.1.0-alpha.2 (2026-02-13)
Section titled “v0.1.0-alpha.2 (2026-02-13)”Second alpha release focused on plugin distribution improvements.
Features
Section titled “Features”- CI per-platform pre-packaging for plugin binary distribution
- Download-on-first-run fallback for marketplace installs
Full diff: v0.1.0-alpha.1…v0.1.0-alpha.2
v0.1.0-alpha.1 (2026-02-13)
Section titled “v0.1.0-alpha.1 (2026-02-13)”Initial alpha release of markymark — a high-performance Markdown LSP server built in Rust. Includes core LSP capabilities: document symbols, go-to-definition, find-references, rename, hover, completion, and diagnostics for Markdown files with wiki-link support.
Full changelog: v0.1.0-alpha.1