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
Metadata
Release files for src2md 3.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| src2md-3.1.1.tar.gz | 5.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| src2md-3.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.8 kB
Release files / src2md-3.1.1.tar.gz
| Download URL | src2md-3.1.1.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
29d712cf8a510f8991a56a73abaa19c88387f3c4974326ac9f164283c8c700f1
|
|
BLAKE2b-256 checksum How to use checksums |
daaae2aa5c3250455cb8c541d943ae89ea9e2b78af401959de9000cdd8ae8c90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / src2md-3.1.1-py3-none-any.whl
| Download URL | src2md-3.1.1-py3-none-any.whl |
|---|---|
| Size | 6.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a4c99497ba7e613fa583e205d512918ee2ad87d13e0b7e50a516d8fd2b188d28
|
|
BLAKE2b-256 checksum How to use checksums |
fe5dd1656e1e998507195d0d5842599fb8d224220b7537623ed2004392a51ea5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|