All notable changes to CodeWiki. The format follows Keep a Changelog, and the project uses Semantic Versioning.
- Google provider.
google(Gemini API key) andgoogle-vertex(Vertex AI with Google credentials: ADC or Workload Identity Federation, plus--google-projectand--google-location) run on Gemini without a base URL. Agent loops use pydantic-ai's nativeGoogleModel, so Gemini 3 thought signatures survive tool-call turns, and the cost summary prices Gemini runs from genai-prices (#20). - Rust analyzer. Structs, unions, enums, traits, free functions, and
impl/trait methods become components, with trait-impl, field-type,
struct-literal, and call edges.
#[cfg(test)]modules are skipped, andbuild.rsis classified as a build artifact. - Dart / Flutter analyzer. Classes, mixins, extensions, enums, top-level
functions and getters, and methods become components, with inheritance,
field-type, instantiation and call edges.
package:/relative imports, exports andpartfiles decide which definition a name resolves to, and library-private names never resolve outside their library; names not visible through imports are dropped rather than guessed. Without apubspec.yamlin the analyzed tree,package:imports cannot be resolved, so Dart calls fall back to name matching across Dart files (with a warning). Flutter-aware: widgets and State classes are typed, instantiations inbuild()become widget-to-widget edges,ref.watch/ref.readlink widgets to Riverpod providers (including@riverpodcodegen), and GoRouter routes link to their screens. Generated*.g.dart/*.freezed.dartfiles and.dart_tool/are ignored, and Dart modules get Flutter-specific documentation guidance. - Go analyzer. Functions, methods, structs, interfaces (and their method
signatures), and other defined types (
type Kind int) become components. Methods are keyed by their receiver type (Buffer.Push, pointer or value receiver alike), whichever file of the package declares them. Edges cover calls (plain,pkg.F(), and method calls on receivers, parameters and locals whose type can be inferred), struct field and embedded types, composite literals, types named in signatures and localvars, and types that implement an interface of their own package. Names resolve inside the package (directory) they name; imports of the repository's own packages map to directories through the module path ingo.mod(and localreplacedirectives), and standard-library or third-party calls are dropped._test.gofiles andvendor/are skipped. - Zig analyzer. Functions, containers (
struct,enum,union,opaque), their member functions (Point.add), and generic type functions (fn List(comptime T: type) type { return struct {...}; }) become components. Edges cover calls (plain,alias.fn(), and method calls onSelf, parameters, and locals whose type can be inferred),T{...}literals, and types named in parameters, return types, fields, and annotated locals.@import("x.zig")aliases and re-exports (const T = @import("x.zig").T;) resolve to the file that declares the name, as do module names that the rootbuild.zigregisters withaddModule;std,builtin, and third-party packages are dropped.testblocks andzig-cache/,.zig-cache/,zig-out/are skipped,build.zigis also a build artifact, andbuild.zig.zonis a manifest. - Vue single-file components. Each
.vuefile becomes a component (ArticleList.vue::ArticleList), and its options-API members (methods,computed,watch, lifecycle hooks such asmountedorsetup) become its methods.<script>and<script setup>blocks go through the JavaScript or TypeScript analyzer (lang="ts"), keeping the.vuefile's line numbers. Edges link a component to the.vuefiles and modules it imports (relative paths and the@/alias), to the components its template uses (<article-preview>or<ArticlePreview>), and to the members and script functions its template expressions call or bind. - Autotools build files.
configure.ac,Makefile.am(and other*.am),acinclude.m4, and macros underm4/are build artifacts. AMakefile.amgets a unit per library or program it builds (libfoo.la), linked to the sources in its_SOURCESlists, andSUBDIRSlinks to the sub-directoryMakefile.ams. Aconfigure.acgets a unit perAC_ARG_ENABLE/AC_ARG_WITHoption and links to theMakefile.ams thatAC_CONFIG_FILESgenerates.
- Docs mirror the module tree (#125).
A module's page now sits next to the folder that holds its sub-modules
(
auth.md,auth/login.md) instead of every page sharing one flat folder. Links between pages are relative. After each run, pages saved in the wrong folder are moved and wrong links are repaired.--flatkeeps the old layout for small models. The layout is recorded inmetadata.json, and--updatekeeps it, so existing flat docs stay flat. The GitHub Pages viewer, the web app and the MCP tools (doc_pathinprocessing_order.json) follow the layout.
2.0.0 - 2026-09-18
The first release since 1.0.1. Everything that landed on main in between is
listed here.
- Artifact-aware generation (#106). Build, CI, container, packaging,
manifest, configuration, schema, and script files become nodes in the
dependency graph, with heuristic edges to the code they reference. A
deterministic artifact index goes into every module prompt, and a
guaranteed Build, Deployment and Configuration module is inserted when
clustering drops most artifact nodes. Flags:
--artifacts/--no-artifacts,--artifact-token-budget,--with-prose,--artifact-exclude. - Component-level incremental updater (#111).
--updatenow diffs the saved dependency graph against the current code, repairs the module tree (renames, deletions, routing of new components, re-clustering of grown modules), builds a change report per leaf module, and runs one agent per affected module that patches its page and the pages that describe it. Falls back to a full build when too much changed. Every decision is written toupdate_record.json. Flags:--update-rung,--tau-ren,--tau-nb,--tau-grow,--tau-full,--tau-tree,--k-hop,--max-diff-tokens. --compare-to <commit>to set the base commit for an update (#67).- More complete code graphs. Free functions become documentation units in function-centric projects. Scope-, namespace-, include-, and import-aware call resolution for C, C++, Java (#64, #68), and C# raised to the Java standard. An external symbol table keeps library calls out of the graph.
- Language analyzers: Kotlin (#41), PHP, Ruby (#97), Scala (#108).
- Subscription providers
claude-codeandcodex(#60, #70): every LLM call goes through the local CLI viacaw, no API key needed. - Atlas Cloud provider (#69), Azure OpenAI (#49), AWS Bedrock (#40).
- MCP server (#9, #66) with eight LLM-free tools (
analyze_repo,read_code_components,write_doc_file,edit_doc_file,save_module_tree,get_processing_order,get_prompt,close_session) plus the legacygenerate_docsandget_module_tree; file side-channel workspace; module-level change detection;codewiki mcpcommand; a Claude skill underskills/. - Prompt caching for agentic calls,
--prompt-caching/--no-prompt-caching(#81). .gitignorehandling,--use-gitignore/--no-gitignore(#80).- Configurable
--max-tokens,--max-token-per-module,--max-token-per-leaf-module,--max-depth;--fallback-model;--instructionsandcodewiki config agentdefaults. SECURITY.mdandLICENSE(#107). CI workflow: pytest and ruff on Python 3.12.CHANGELOG.md(this file) and theguides/folder.
--updateruns the component-level updater. The 1.x file-level invalidation is still available as--update-rung 0.- Artifacts are documented by default.
--no-artifactsrestores the code-only behaviour of 1.x. generator_versioninmetadata.jsonis read from the package version instead of a hardcoded string.- Hand-written guides moved from the top level and
docker/intoguides/:DEVELOPMENT.md->guides/development.md,IDE_DRIVEN_GUIDE.md->guides/mcp-ide-mode.md,docker/DOCKER_README.md->guides/docker.md. New:guides/cli-reference.md,guides/providers.md,guides/artifact-aware-generation.md,guides/incremental-updates.md. - README rewritten around 2.0. The benchmark section reports the 2.0 rebenchmark on the seven CodeWikiBench repositories, with DeepWiki and 1.0 re-run under the same setting.
- Component ids reformatted to
path::name(#48). Ruff rule set pinned; Node.js requirement clarified as install-time only. - Project URLs in
pyproject.tomlpoint at the real repository.
- Overview and module prompts exceeding the Codex input cap on large repositories (#92, #94).
- Resume skipping modules whose documentation was missing (#94).
--updatein whole-repository mode not regenerating invalidated modules (#100).- The CLI adapter not passing
commit_id, which made--updatebehave like a full build. - Leaf-node filtering dropping identifiers such as
handleInvalidInput(#102); leaf-node reduction now logged at INFO (#103). - C codebases producing zero leaf nodes.
node_modulesexcluded from analysis; missing runtime dependencies added; non-standard responses from OpenAI-compatible proxies handled.- Mermaid validation hang in the MCP server; MCP path-traversal guards and edit-history caps.
- Star history chart in the README (#95); mermaid-py behaviour comments (#110).
- CLI release:
codewiki config set,codewiki config show,codewiki config validate,codewiki generatewith--output,--create-branch,--github-pages,--no-cache,--include,--exclude,--focus,--doc-type,--verbose. - API keys stored in the system keychain with a file fallback.
- Initial public release with the paper: hierarchical decomposition, recursive agents, Mermaid diagrams, seven languages (Python, Java, JavaScript, TypeScript, C, C++, C#), web application, Docker image, CodeWikiBench.