Project To Markdown
Convert an entire source code project into one or more structured Markdown
documents — ready for documentation, code review, archival, or feeding to a
large-language-model.
Everything runs locally. No network calls. No AI.
Features
- One-click export from the Command Palette, the Explorer context menu, or
a Status Bar button.
- Streaming pipeline — handles repositories with 100 000+ files without
loading them into memory at the same time.
- Chunked output — splits the result into
project.part1.md,
project.part2.md, … when a configurable size threshold is exceeded.
- Built-in ignore rules for
node_modules, build outputs, binaries,
lockfiles, media, archives, plus full .gitignore parsing.
- Smart language detection with proper Markdown fence escaping for files
that themselves contain triple backticks.
- Symbol summary for TypeScript/JavaScript, Python, Java/Kotlin, Go, Rust,
C/C++, C#.
- Dependency analysis for
package.json, requirements.txt, Cargo.toml,
go.mod, pom.xml, Gemfile.
- Sidecar JSON —
.manifest.json, .summary.json, optional .index.json.
- Incremental cache for faster repeat runs.
- Optional SHA-256, line, and word counts per file.
- Cancellation, progress notification, dedicated Output Channel.
Usage
- Open the Command Palette and run Project To Markdown: Generate
Documentation (or right-click a folder in the Explorer and pick
Generate Markdown, or click Project → MD in the Status Bar).
- Pick the source folder to scan.
- Pick the output folder to write to.
- Watch progress in the notification. The Output Channel
Project To Markdown shows the per-file log.
- When finished you'll get
project-name.md (plus the optional sidecars)
inside the chosen output folder.
Settings
All settings live under projectToMarkdown.*:
| Setting |
Default |
Purpose |
maxFileSize |
5242880 |
Skip files larger than this many bytes (5 MB default). |
includeHidden |
false |
Include dot-files / dot-folders. |
generateTree |
true |
Include the ASCII directory tree. |
generateStats |
true |
Append the statistics section. |
ignorePatterns |
[] |
Extra glob patterns to ignore. |
followSymlinks |
false |
Follow symbolic links during scan. |
maxFiles |
100000 |
Hard cap on the number of files processed. |
skipBinary |
true |
Skip files detected as binary. |
useGitignore |
true |
Honor .gitignore files in addition to built-ins. |
chunkSizeMb |
50 |
Split output into multiple .md parts when exceeded; 0 disables chunking. |
includeHashes |
false |
Include SHA-256 hashes per file. |
includeLineCounts |
true |
Include line counts per file. |
includeWordCounts |
false |
Include word counts per file. |
incremental |
false |
Reuse cache of file hashes on repeat runs. |
extractSymbols |
true |
Emit a quick symbol summary per file. |
analyzeDependencies |
true |
Summarize dependency manifests. |
writeManifest |
true |
Write <project>.manifest.json sidecar. |
writeSummary |
true |
Write <project>.summary.json sidecar. |
writeSearchIndex |
false |
Write <project>.index.json sidecar. |
Development
npm install
npm run build # bundles dist/extension.js with esbuild
npm run compile # strict TypeScript type-check
npm run lint # ESLint
npm test # integration tests via @vscode/test-electron
Press F5 inside VS Code to launch the Extension Development Host.
License
MIT — see LICENSE.
| |