Skip to content

Releases: kodama-community/kodama

Version 1.0.0 release - forest

Choose a tag to compare

@kokic kokic released this 19 May 03:44
v1.0.0

refactor: adjust the architecture and naming

Version 0.9.9 delta

Choose a tag to compare

@kokic kokic released this 17 Apr 14:15
v0.9.9-delta

feat: add theme-lock configuration option and implement dynamic CSS a…

Version 0.9.9 gamma

Choose a tag to compare

@kokic kokic released this 08 Apr 17:50
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

Choose a tag to compare

@kokic kokic released this 07 Apr 15:38
v0.9.9-beta

fix: update theme-options pseudo-elements to only display when not empty

Version 0.9.9 alpha

Choose a tag to compare

@kokic kokic released this 31 Mar 05:56
v0.9.9-alpha

feat: add support for multiple section formats and improve section pa…

Version 0.8.0 release - Ga1ahad and Scientific Witchery

Choose a tag to compare

@kokic kokic released this 14 Mar 11:24

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 1 for 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 when show_slug is disabled.
  • Hash-id generation preserves anonymous suffix formatting for slugs like {source_slug}/:{ordinal} (for example book/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_slug state management for collision-safe anonymous slug allocation.
  • Added dedicated subtree_slug utilities 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 (subtree vs typst 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_INITIAL semantics.

Version 0.7.9 release - 霞光

Choose a tag to compare

@kokic kokic released this 06 Mar 14:56

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 upgrade workflow 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

  • upgrade now 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-check for 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.9 after transient 0.8.0 bump.

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_flake into core, 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_markdown test 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

  • 6c5f6f3 feat(typ): add semantic subtree sugar helpers for markdown tags
  • cec8d1a fix(serve): update command to include port for miniserve
  • 9e5980b fix(local): handle text parameter as optional in local function
  • 4692a23 fix(version): downgrade kodama version from 0.8.0 to 0.7.9
  • a5cf22c feat(parser): implement anonymous subtree slug handling and improve slug attribute management
  • fb9f713 refactor(subtree): enhance parameter handling and improve readability
  • 4f3f1bf feat(target-check): implement with-target-check for HTML and paged compatibility
  • f024035 test(embed_markdown): add test for asset link title stripping inline HTML
  • 9466868 fix(parser): avoid anonymous subtree slug collisions in nested markdown
  • 1a531de feat(parser): support nested markdown subtree extraction
  • 56cb7cc refactor(graph): normalize anonymous subtree filtering in compile state
  • 12378f8 chore(version): bump kodama version to 0.8.0
  • f451506 refactor(process): split content writer and tests into submodules
  • 6d8dddf refactor(serve): split watch into strategy, analysis, and runtime modules
  • cc265b7 refactor(parser): split subtree logic and tests into submodules
  • 999a31d refactor(html_flake): split into core, header, and document modules
  • d1856de perf(serve): rewrite global changes from in-memory shallows
  • 380ab82 refactor(writer): simplify catalog HTML generation logic
  • 65a6a05 refactor(scan): move typst svg generation to separate stage
  • 191d034 chore(clippy): clear warnings in typst tests and html_flake
  • 6f82f08 refactor(main): reorder typst_cli module and update upgrade command description
  • 3524cf4 refactor(upgrade): move config/output flags into subcommands
  • 3881091 docs(upgrade): clarify top-level args apply without subcommand
  • bc12a05 refactor(html): replace header arg list with struct
  • 7bc7c43 refactor(tests): improve readability of shallow_section_with_content function
  • 57c8960 refactor(upgrade): split config and typst-lib into subcommands
  • 884bc40 feat(upgrade): sync trees/_lib/kodama.typ during migration
  • f7509a3 chore: add changelog for version 0.7.5 release with highlights, features, and fixes

Version 0.7.5 patch

Choose a tag to compare

@kokic kokic released this 01 Mar 17:01

Full Changelog: v0.7.5...v0.7.5-patch

Version 0.7.5 release - Stamina Rose

Choose a tag to compare

@kokic kokic released this 27 Feb 11:57

Commit range: e67d63e..3b43aa8

Highlights

  • Added Typst subtree support end-to-end, including parser extraction, generated section metadata, and kodama.typ helper 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-subtree and #subtree(...) helper output in kodama.typ.
  • Typst subtree sections now carry source-slug metadata; 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.typ subtree helper with option and metadata mapping support.
  • Expanded Typst metadata handling and compatibility with updated kodama.typ conventions.
  • Added --watch-stats in serve and 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 .typst source 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

  • 3b43aa8 feat(typst): update metadata structure and enhance compatibility with kodama.typ
  • 48bfce1 feat(typst): enhance metadata handling and add subtree support
  • f06ef75 fix(serve): reduce redundant rebuilds and typst over-invalidation
  • 2b49d90 fix(typst): set source-slug for subtree sections
  • f4627ef feat(typst): add subtree helper in kodama.typ
  • af251da feat(typst): add minimal subtree sections via direct embeds
  • c1a4f36 chore: fmt
  • fe43fa2 fix(writer): exclude anonymous subtree nodes from toc links
  • 941e8e7 fix(parser): share root reference defs with subtree parsing
  • a7393e9 fix(parser): drop empty paragraphs around embeds and bump cache schema
  • 1a1c1ab feat(edit-link): support vscode-family position suffix schemes
  • ecd20dd feat(parser): give anonymous subtree internal section structure
  • fdd94c4 feat(subtree): record source slug and source position metadata
  • 55075a5 fix(parser): constrain subtree slug to single relative component
  • 4e3ee1d fix(metadata): parse plain keys without markdown elaboration
  • a45d654 fix(state): use plain-text tooltip for local links
  • 85bbec1 fix(html): escape link attributes to prevent broken title markup
  • 0ed05d1 fix(embed): keep inline html inside link content buffers
  • 3819665 fix(snip): update link label formatting to support spaces in markdown
  • 4f3f277 feat(parser): enhance anonymous subtree handling and add tests for extraction refactor(html): remove unused inline-section template and related script
  • 1ecd0f5 Refactor Markdown Parsing and Source Management
  • 08d8afc feat(cli): change argument visibility for watch_stats and snippet commands to short form
  • dfe7bcc feat(serve): add --watch-stats flag for watch diagnostics
  • bee1073 refactor(serve-watch): remove unused compose_dirty_paths
  • c279d3a feat(serve-watch): filter noisy paths and print dirty change stats
  • ee61be5 chore: update version to 0.7.5 and fix image source in README

Version 0.7.0 release - D City Rock

Choose a tag to compare

@kokic kokic released this 25 Feb 17:44

Commit range: c8a6794..7932e39

Highlights

  • Added kodama check as a no-side-effect validation command, including --strict mode.
  • serve moved further toward true incremental behavior with in-memory shallow cache reuse.
  • Added cache versioning and automatic invalidation for hash/entry caches.
  • Added kodama upgrade to migrate legacy config files into the current schema.
  • Output writes are more robust with atomic overwrite paths for main.css, kodama.json, and kodama.graph.json.

Behavior changes and migration notes

  • kodama snip --section now refreshes indexes in memory and no longer emits kodama.json by default.
  • Slug parsing now preserves dotted names unless the suffix is a known source extension (.md, .typst), fixing cases like a.b.
  • Include/embed/local-link URLs are normalized at parse stage, making relative and root-based references more consistent.
  • kodama check --strict treats warnings as failures.

Features and improvements

  • Added check command with graph validation and diagnostics output.
  • Added config upgrade command for schema migration and rewrite.
  • Improved parser pipeline with TextElaborator CJK 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-root hinting for missing input files.

Performance

  • serve keeps parsed shallows in memory between rebuilds to reduce repeated parse/load overhead.
  • serve avoids full HTML rewrite on assets-only changes.
  • main.css sync 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.
  • check now 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, and output_html_path.
  • Simplified TextElaborator struct 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

  • 7932e39 refactor(text_elaborator): simplify struct implementation by removing lifetime parameters feat(environment): add is_build function to check build mode
  • caadb78 refactor: reorder imports and clean up whitespace in multiple files
  • 68bc50c refactor(paths): remove unused output_html_path helper
  • 9a90ff6 perf(serve): avoid full html rewrite for assets-only changes
  • 81ad9a5 refactor(artifacts): write json outputs atomically
  • b428278 fix(check): report include read failures as diagnostics
  • d9e623f test: add unit test for all_trees_source_readonly with missing trees directory
  • b134150 refactor(env): remove unused build_dir and serve_dir helpers
  • bf82f9b fix(check): fail on typst image elaboration errors
  • 3164910 feat(check): add no-side-effect validation command with strict diagnostics
  • abd24cb style(css): update blockquote alert labels for consistency and clarity
  • a4979e8 style(css): adjust alert blockquote border style for improved visibility
  • a79a9bc fix(css): add periods to alert blockquote labels for consistency
  • 555d429 style(css): update alert blockquote styles and consolidate color variables
  • 69b4f41 feat(build): sync main.css by content and atomically overwrite on changes
  • d973969 feat(parser): add alert styles for blockquotes and update test case with Japanese text
  • 3ba4af2 fix(parser): resolve mutable borrow conflict in TextElaborator iterator
  • f0cdfbf feat(parser): emit lang attributes for CJK spans with zh default
  • 674073d feat(parser): split CJK span classes by Han/Japanese/Korean
  • 79c1f87 feat(parser): add TextElaborator process for CJK span wrapping
  • 98ee808 fix(snip): update snippet prefix to include title and slug for better clarity
  • 0cf46b3 fix(snip): default missing taxon to empty description
  • e961585 fix(config_access): remove unused serve_dir export
  • 5f912d4 style: format code for improved readability and consistency
  • 8f0db02 feat(snip): refresh section indexes in memory without emitting kodama.json
  • 5f6d49f chore: bump version to 0.7.0 in Cargo.toml and Cargo.lock
  • 01ab806 fix(serve-watch): fold duplicate change logs across debounce batches
  • 91bd6ca fix(embed): normalize include/embed/local-link URLs at parse stage
  • 1588de3 feat(serve): keep in-memory shallow cache for incremental rebuilds
  • 3e3a3d3 feat(cache): add versioned cache invalidation for hash and entry
  • 5a305d1 refactor(serve): inject watch logging and debounce strategy
  • 4ecb1b7 test(environment): add path/hash edge-case regression coverage
  • 6dc23ec chore: bump version to 0.5.2 in Cargo.toml and Cargo.lock
  • cd8ec63 refactor(environment, parser): clean up public exports and enhance markdown options
  • cf22d0e refactor(environment): split config, path, import, and hash helpers
  • 24503f8 refactor(serve): split watch and process logic into submodules
  • 25c1fd5 refactor(compiler): split compiler internals into focused modules
  • 016a29f feat(serve): fold consecutive duplicate watch change logs
  • 113ae85 fix(cli): change rebuild failure message color to warning for user editing
  • 83dd0be fix(typst): hint typst-root when source file is missing
  • f53c66e chore: bump version to 0.5.1
  • cbfdf97 fix(slug): preserve dotted names without source extensions
  • a27cad2 feat(cli): add upgrade command for config migration
  • e647658 refactor(cli): enhance documentation for output control arguments and commands