Releases: kodama-community/kodama
Releases · kodama-community/kodama
Release list
Version 1.0.0 release - forest
Version 0.9.9 delta
v0.9.9-delta feat: add theme-lock configuration option and implement dynamic CSS a…
Version 0.9.9 gamma
Refactor HTML figure generation in Typst - Updated the `kodama.typ` file to improve the structure of the `with-target-check` function, enhancing readability and maintainability. - Modified the CSS in `main.css` to ensure consistent styling across various elements, including updates to class names and styles for better alignment with design specifications. - Changed the image handling in `typst_image.rs` by renaming the `html_figure` function to `html_typst_figure` for clarity and consistency in the codebase.
Version 0.9.9 beta
v0.9.9-beta fix: update theme-options pseudo-elements to only display when not empty
Version 0.9.9 alpha
v0.9.9-alpha feat: add support for multiple section formats and improve section pa…
Version 0.8.0 release - Ga1ahad and Scientific Witchery
Highlights
- Unified anonymous subtree slug management across markdown and Typst pipelines with shared compiler modules.
- Added hash-anchor navigation for internal anonymous subtree entries in catalog/TOC, avoiding dead page jumps.
- Added header hash anchor (
[#]) support when slug text is hidden. - Standardized anonymous subtree ordinal initialization to start from
1for clearer catalog numbering alignment. - Preserved anonymous subtree hash-id suffix semantics for stable in-page anchor resolution.
- Refined dependency feature flags and CLI help dependency wiring.
Behavior changes and migration notes
- Anonymous subtree slugs now consistently start at
:1(instead of:0) in both markdown and Typst extraction flows. - Internal anonymous subtree catalog bullets now target in-page hash anchors (
#...) instead of standalone page URLs. - Header rendering now appends
[#]hash links whenshow_slugis disabled. - Hash-id generation preserves anonymous suffix formatting for slugs like
{source_slug}/:{ordinal}(for examplebook/index/:1->book-index:1). - Subtree slug validation and duplicate diagnostics are now emitted through shared slug-resolution utilities with clearer error messages.
Features and improvements
- Added dedicated
anonymous_slugstate management for collision-safe anonymous slug allocation. - Added dedicated
subtree_slugutilities for subtree slug resolution and uniqueness checks. - Improved markdown nested subtree extraction flow with explicit root/nested extraction paths.
- Improved catalog item rendering API to support hash-link mode for structural anonymous nodes.
- Updated featured Typst demo subtree declaration to use semantic helper syntax (
#exegesis(...)).
Performance
- Simplified compile-time slug cleanup/generation paths by removing redundant cleanup branches.
- Reduced duplicate filesystem cleanup work in compiler stale/output handling paths.
Stability and error handling
- Improved anonymous subtree collision handling with source-slug-based allocation and consistent ordinal state.
- Improved duplicate subtree slug diagnostics by distinguishing subtree kinds (
subtreevstypst subtree). - Updated dependency graph and feature flags (including clap help support) for more reliable CLI behavior.
Code organization and naming
- Split anonymous slug logic into
compiler/anonymous_slug.rs. - Split subtree slug resolution/validation into
compiler/subtree_slug.rs. - Refined parser subtree extraction naming (
extract_subtrees_root/extract_subtrees_nested) and data flow. - Cleaned anonymous slug import usage and documented ordinal-initial constant intent.
Testing and testability
- Added hash-id regression coverage for anonymous suffix separator preservation.
- Added header rendering test coverage for hash anchor output when slug link is hidden.
- Added/updated writer tests to verify TOC hash-link behavior for internal anonymous subtrees.
- Updated parser/Typst subtree tests to align with
ANON_SUBTREE_ORDINAL_INITIALsemantics.
Version 0.7.9 release - 霞光
Highlights
- Added nested markdown subtree extraction and strengthened anonymous subtree slug handling to avoid collisions.
- Added anonymous subtree support in Typst subtree flow, including internal slug allocation and structural-only behavior alignment.
- Enabled metadata values to use local links in Typst via
local(...), matching markdown-style author/reference linking workflows. - Expanded Typst helper capabilities in
kodama.typ, including semantic subtree helpers and improved local-link ergonomics. - Refined
upgradeworkflow with dedicated subcommands and Typst library sync support. - Continued modular refactors across parser, serve watch, html rendering, and content writing paths.
Behavior changes and migration notes
upgradenow exposes focused subcommands (config,typst-lib) with clearer argument behavior.- Typst
local(...)helper now supports optional text, improving parity with markdown local-link usage patterns. - Typst subtree authoring gained semantic helper aliases (for example
lemma,theorem,proof) that map to subtree taxons. - Serve command invocation now forwards explicit port values to
miniserve.
Features and improvements
- Added nested markdown subtree extraction support.
- Added robust anonymous subtree slug allocation and improved slug attribute handling.
- Added
with-target-checkfor cleaner HTML/paged target branching in Typst helper APIs. - Added Typst semantic subtree sugar helpers aligned with markdown-style structural tags.
- Added upgrade-time sync for
trees/_lib/kodama.typ.
Performance
- Reworked serve global-change handling to reuse in-memory shallows.
- Moved Typst SVG generation into a separate stage for cleaner pipeline boundaries.
- Simplified writer catalog generation and related compile-state anonymous filtering paths.
Stability and error handling
- Fixed anonymous subtree slug collision cases in nested markdown scenarios.
- Fixed serve/miniserve command wiring to include port.
- Added/kept focused test coverage for asset-link title sanitization with inline HTML input.
- Finalized release versioning back to
0.7.9after transient0.8.0bump.
Code organization and naming
- Split parser subtree logic and tests into dedicated modules.
- Split serve watch internals into strategy/analysis/runtime components.
- Split content writer and tests into submodules.
- Split
html_flakeintocore,header, and document-oriented modules. - Refactored upgrade command internals into subcommand-oriented structure.
- Replaced long HTML header argument list with a struct-based API.
Testing and testability
- Added
embed_markdowntest for stripping inline HTML from asset-link titles. - Improved readability of shared test setup helpers for shallow section construction.
- Kept subtree parsing improvements covered through parser-level regression tests.
Full commit list
6c5f6f3feat(typ): add semantic subtree sugar helpers for markdown tagscec8d1afix(serve): update command to include port for miniserve9e5980bfix(local): handle text parameter as optional in local function4692a23fix(version): downgrade kodama version from 0.8.0 to 0.7.9a5cf22cfeat(parser): implement anonymous subtree slug handling and improve slug attribute managementfb9f713refactor(subtree): enhance parameter handling and improve readability4f3f1bffeat(target-check): implement with-target-check for HTML and paged compatibilityf024035test(embed_markdown): add test for asset link title stripping inline HTML9466868fix(parser): avoid anonymous subtree slug collisions in nested markdown1a531defeat(parser): support nested markdown subtree extraction56cb7ccrefactor(graph): normalize anonymous subtree filtering in compile state12378f8chore(version): bump kodama version to 0.8.0f451506refactor(process): split content writer and tests into submodules6d8dddfrefactor(serve): split watch into strategy, analysis, and runtime modulescc265b7refactor(parser): split subtree logic and tests into submodules999a31drefactor(html_flake): split into core, header, and document modulesd1856deperf(serve): rewrite global changes from in-memory shallows380ab82refactor(writer): simplify catalog HTML generation logic65a6a05refactor(scan): move typst svg generation to separate stage191d034chore(clippy): clear warnings in typst tests and html_flake6f82f08refactor(main): reorder typst_cli module and update upgrade command description3524cf4refactor(upgrade): move config/output flags into subcommands3881091docs(upgrade): clarify top-level args apply without subcommandbc12a05refactor(html): replace header arg list with struct7bc7c43refactor(tests): improve readability of shallow_section_with_content function57c8960refactor(upgrade): split config and typst-lib into subcommands884bc40feat(upgrade): sync trees/_lib/kodama.typ during migrationf7509a3chore: add changelog for version 0.7.5 release with highlights, features, and fixes
Version 0.7.5 patch
Full Changelog: v0.7.5...v0.7.5-patch
Version 0.7.5 release - Stamina Rose
Commit range: e67d63e..3b43aa8
Highlights
- Added Typst subtree support end-to-end, including parser extraction, generated section metadata, and
kodama.typhelper APIs. - Improved serve watch behavior to reduce redundant rebuilds with better debounce batching and dirty-path invalidation scope.
- Added subtree source tracking metadata (
source-slug,source-pos) and editor-link position suffix support for VSCode-family URL schemes. - Hardened markdown pipeline around subtree/embed/link edge cases (shared references, empty paragraph cleanup, safe attribute escaping).
Behavior changes and migration notes
- Typst subtree is now supported via
kodama-subtreeand#subtree(...)helper output inkodama.typ. - Typst subtree sections now carry
source-slugmetadata; edit-link generation can resolve source file ownership correctly. - Serve dirty-path strategy now treats direct typst source edits as local rebuilds, while typst dependencies still trigger broader invalidation.
- Anonymous subtree nodes are excluded from TOC links and output as structural-only nodes.
Features and improvements
- Added minimal Typst subtree section generation through direct embed construction.
- Added
kodama.typsubtree helper with option and metadata mapping support. - Expanded Typst metadata handling and compatibility with updated
kodama.typconventions. - Added
--watch-statsinserveand improved flag visibility/aliases for watch diagnostics and snippet commands. - Added watch dirty-path classification stats and noise filtering for temp and directory events.
- Added VSCode-family editor URL position suffix support for precise source navigation.
Performance
- Serve watch batching now uses a trailing debounce window to collapse burst events into fewer rebuild runs.
- Incremental invalidation no longer upgrades every
.typstsource change into “all typst sources dirty”. - Reduced repeated recompiles triggered by noisy watcher event streams across Linux and Windows.
Stability and error handling
- Fixed broken local-link tooltip/title rendering caused by HTML content leakage.
- Fixed link attribute escaping to prevent malformed HTML titles.
- Fixed metadata parsing strategy for plain-text keys to avoid over-elaboration side effects.
- Fixed embed pipeline buffering to keep inline HTML inside link-state content capture.
Code organization and naming
- Refined subtree parsing flow for markdown and typst pipelines with clearer ownership metadata.
- Removed unused serve-watch helper paths and tightened watch-side extension/source classification.
- Bumped cache schema after subtree/paragraph cleanup changes to prevent stale artifact reuse.
Testing and testability
- Added/updated subtree extraction and parsing tests (named and anonymous subtree behaviors).
- Added watch debounce and dirty-path scope regression tests for incremental rebuild behavior.
- Added tests for source metadata propagation and TOC exclusion behavior for anonymous subtree nodes.
Full commit list
3b43aa8feat(typst): update metadata structure and enhance compatibility with kodama.typ48bfce1feat(typst): enhance metadata handling and add subtree supportf06ef75fix(serve): reduce redundant rebuilds and typst over-invalidation2b49d90fix(typst): set source-slug for subtree sectionsf4627effeat(typst): add subtree helper in kodama.typaf251dafeat(typst): add minimal subtree sections via direct embedsc1a4f36chore: fmtfe43fa2fix(writer): exclude anonymous subtree nodes from toc links941e8e7fix(parser): share root reference defs with subtree parsinga7393e9fix(parser): drop empty paragraphs around embeds and bump cache schema1a1c1abfeat(edit-link): support vscode-family position suffix schemesecd20ddfeat(parser): give anonymous subtree internal section structurefdd94c4feat(subtree): record source slug and source position metadata55075a5fix(parser): constrain subtree slug to single relative component4e3ee1dfix(metadata): parse plain keys without markdown elaborationa45d654fix(state): use plain-text tooltip for local links85bbec1fix(html): escape link attributes to prevent broken title markup0ed05d1fix(embed): keep inline html inside link content buffers3819665fix(snip): update link label formatting to support spaces in markdown4f3f277feat(parser): enhance anonymous subtree handling and add tests for extraction refactor(html): remove unused inline-section template and related script1ecd0f5Refactor Markdown Parsing and Source Management08d8afcfeat(cli): change argument visibility for watch_stats and snippet commands to short formdfe7bccfeat(serve): add --watch-stats flag for watch diagnosticsbee1073refactor(serve-watch): remove unused compose_dirty_pathsc279d3afeat(serve-watch): filter noisy paths and print dirty change statsee61be5chore: update version to 0.7.5 and fix image source in README
Version 0.7.0 release - D City Rock
Commit range: c8a6794..7932e39
Highlights
- Added
kodama checkas a no-side-effect validation command, including--strictmode. servemoved further toward true incremental behavior with in-memory shallow cache reuse.- Added cache versioning and automatic invalidation for hash/entry caches.
- Added
kodama upgradeto migrate legacy config files into the current schema. - Output writes are more robust with atomic overwrite paths for
main.css,kodama.json, andkodama.graph.json.
Behavior changes and migration notes
kodama snip --sectionnow refreshes indexes in memory and no longer emitskodama.jsonby default.- Slug parsing now preserves dotted names unless the suffix is a known source extension (
.md,.typst), fixing cases likea.b. - Include/embed/local-link URLs are normalized at parse stage, making relative and root-based references more consistent.
kodama check --stricttreats warnings as failures.
Features and improvements
- Added
checkcommand with graph validation and diagnostics output. - Added config
upgradecommand for schema migration and rewrite. - Improved parser pipeline with
TextElaboratorCJK tagging (lang="zh/ja/ko"defaults and split behavior). - Added and refined GFM alert blockquote rendering and styles.
- Improved serve watch logs with duplicate-line folding and cleaner strategy injection points.
- Improved Typst diagnostics with clearer
typst-roothinting for missing input files.
Performance
servekeeps parsed shallows in memory between rebuilds to reduce repeated parse/load overhead.serveavoids full HTML rewrite on assets-only changes.main.csssync is content-aware and skips unchanged writes.- Watch log folding reduces repeated console noise during bursty file events.
Stability and error handling
- Added cache version files and automatic stale-cache cleanup behavior.
checknow surfaces Typst image elaboration failures and include file read failures as errors.- Artifact writing for JSON outputs now uses atomic temp-file + rename semantics.
- Fixed mutable borrow conflict in the text elaborator iterator path.
- Missing trees directory handling now returns an empty workspace in readonly scan mode instead of mixed skip/fail behavior.
Code organization and naming
- Split compiler internals into focused modules (
source_scan,incremental,serve_session,stale,artifacts). - Split serve implementation into watch/process submodules and extracted watch strategy helpers.
- Split environment helpers into config/path/import/hash/cache modules.
- Removed unused helpers such as
serve_dir,build_dir, andoutput_html_path. - Simplified
TextElaboratorstruct implementation by removing unnecessary lifetime parameters.
Testing and testability
- Added regression tests for environment path/hash edge cases.
- Added serve-watch tests for duplicate-log folding and path behavior.
- Added readonly source-scan coverage for missing trees directory.
- Added unit tests around artifact write/update behavior and parser pipeline changes.
Full commit list
7932e39refactor(text_elaborator): simplify struct implementation by removing lifetime parameters feat(environment): add is_build function to check build modecaadb78refactor: reorder imports and clean up whitespace in multiple files68bc50crefactor(paths): remove unused output_html_path helper9a90ff6perf(serve): avoid full html rewrite for assets-only changes81ad9a5refactor(artifacts): write json outputs atomicallyb428278fix(check): report include read failures as diagnosticsd9e623ftest: add unit test for all_trees_source_readonly with missing trees directoryb134150refactor(env): remove unused build_dir and serve_dir helpersbf82f9bfix(check): fail on typst image elaboration errors3164910feat(check): add no-side-effect validation command with strict diagnosticsabd24cbstyle(css): update blockquote alert labels for consistency and claritya4979e8style(css): adjust alert blockquote border style for improved visibilitya79a9bcfix(css): add periods to alert blockquote labels for consistency555d429style(css): update alert blockquote styles and consolidate color variables69b4f41feat(build): sync main.css by content and atomically overwrite on changesd973969feat(parser): add alert styles for blockquotes and update test case with Japanese text3ba4af2fix(parser): resolve mutable borrow conflict in TextElaborator iteratorf0cdfbffeat(parser): emit lang attributes for CJK spans with zh default674073dfeat(parser): split CJK span classes by Han/Japanese/Korean79c1f87feat(parser): add TextElaborator process for CJK span wrapping98ee808fix(snip): update snippet prefix to include title and slug for better clarity0cf46b3fix(snip): default missing taxon to empty descriptione961585fix(config_access): remove unused serve_dir export5f912d4style: format code for improved readability and consistency8f0db02feat(snip): refresh section indexes in memory without emitting kodama.json5f6d49fchore: bump version to 0.7.0 in Cargo.toml and Cargo.lock01ab806fix(serve-watch): fold duplicate change logs across debounce batches91bd6cafix(embed): normalize include/embed/local-link URLs at parse stage1588de3feat(serve): keep in-memory shallow cache for incremental rebuilds3e3a3d3feat(cache): add versioned cache invalidation for hash and entry5a305d1refactor(serve): inject watch logging and debounce strategy4ecb1b7test(environment): add path/hash edge-case regression coverage6dc23ecchore: bump version to 0.5.2 in Cargo.toml and Cargo.lockcd8ec63refactor(environment, parser): clean up public exports and enhance markdown optionscf22d0erefactor(environment): split config, path, import, and hash helpers24503f8refactor(serve): split watch and process logic into submodules25c1fd5refactor(compiler): split compiler internals into focused modules016a29ffeat(serve): fold consecutive duplicate watch change logs113ae85fix(cli): change rebuild failure message color to warning for user editing83dd0befix(typst): hint typst-root when source file is missingf53c66echore: bump version to 0.5.1cbfdf97fix(slug): preserve dotted names without source extensionsa27cad2feat(cli): add upgrade command for config migratione647658refactor(cli): enhance documentation for output control arguments and commands