Convert source code directories into a single Markdown file
Project description
src2md
Sometimes you just want to paste a codebase into a chatbot. src2md converts a source code directory into a single Markdown file -- that's it.
No frameworks. No token optimizers. No LLM integrations. Just your code in a format any LLM can read.
Install
pip install src2md
Usage
# Output to stdout (pipe to clipboard, redirect to file, etc.)
src2md /path/to/project | pbcopy
src2md /path/to/project > output.md
# Or save to a file directly
src2md /path/to/project -o output.md
# Include recent git history for extra context
src2md /path/to/project --log
That gives you a Markdown file with every matching file in fenced code blocks with syntax highlighting, respecting your .gitignore automatically.
Options
src2md path [options]
-o, --out FILE Output file (default: stdout)
--include PATTERN ... File patterns to include (default: common extensions)
--exclude PATTERN ... File/dir patterns to exclude (default: .* hidden files)
--log [N] Include recent git history (default: 25 commits)
Examples
# Only Python files
src2md . --include '*.py'
# Everything except tests and docs
src2md . --exclude tests docs
# Python files with last 50 commits of history
src2md . --include '*.py' --log 50
.gitignore
If your project is a git repo, src2md automatically respects .gitignore. No need to configure anything -- node_modules/, __pycache__/, dist/, etc. are excluded if your .gitignore says so.
For non-git directories, use --exclude to skip what you don't need.
Supported languages
Python, C/C++, JavaScript/TypeScript, Java, Go, Ruby, PHP, Swift, Kotlin, Rust, R, Bash, SQL, HTML, CSS, SCSS, JSON, XML, YAML, TOML, Markdown, LaTeX, Lua, Zig, Nim, Elixir, Erlang, Haskell, OCaml, Scala, Clojure, Dart, Vue, Svelte, and more.
Why?
Agentic coding tools (Claude Code, Cursor, etc.) can browse your repo directly.
But sometimes you're just talking to a plain chatbot -- ChatGPT, Claude.ai, etc. -- and you want to give it your whole project as context. Copy-pasting files one by one is tedious. src2md does it in one command.
This can also breathe some life into older or smaller LLMs for coding tasks -- give them the full project context they'd otherwise never see. Just be aware that src2md does nothing smart about context limits. A large repo produces a large file. If your LLM has a small context window, use --include and --exclude to narrow things down.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file src2md-3.1.0.tar.gz.
File metadata
- Download URL: src2md-3.1.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0d7366054d805fd37e44b6571085c189fbaac68e1c93769e792ef9129947237
|
|
| MD5 |
fb855fdf257e8b135945f04fd5784113
|
|
| BLAKE2b-256 |
de5fea7887b0f48bf540f2a86f72bb282b69dfb6f38389fcb95b77c8054a9d17
|
File details
Details for the file src2md-3.1.0-py3-none-any.whl.
File metadata
- Download URL: src2md-3.1.0-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73281914c1ea225653eb48fd448f5c6679737fba12280920e15b3e656aea25b0
|
|
| MD5 |
73a4abbfe77994973d05d5a66d960260
|
|
| BLAKE2b-256 |
fa9dae35a764fe6f2e9bee62c6114769209c7035660e16811d2d2c73f22458b1
|