Fast recursive repository and text export utility for Linux.
Export repositories, source trees, configs, text projects, and archives into a single readable stream for AI context, code review, audits, and debugging.
Architectures: amd64, arm64, armhf
man catallcurl -fsSL https://repo.kocar.net/repo.key \
| sudo gpg --dearmor -o /usr/share/keyrings/kocartech.gpg
echo "deb [signed-by=/usr/share/keyrings/kocartech.gpg] https://repo.kocar.net stable main" \
| sudo tee /etc/apt/sources.list.d/kocartech.list
sudo apt update
sudo apt install catallcatall - cat files with path headers
Usage:
catall [options] DIR
Without arguments, catall shows this help.
Normal examples:
catall .
catall -r .
catall -A .
catall -r -A .
catall -r -D .
catall -r -D -A .
catall -S .
catall -S -A .
catall -r -S -A .
catall -H '--- FILE: {relpath} ---' .
catall -A -H '===== {path} =====' .
catall -r -s '\n--- END FILE ---\n' .
Project examples:
catall --extcol cpp -r .
catall --extcol python -r .
catall --extcol nodejs --exclude-ext json -r .
catall --extcol php -e vue -e ts -x vendor -x .git -r .
catall --extcol laravel -r .
catall --list-extcols
Archive examples:
catall archive.tar.gz
catall archive.zip
catall -a -r .
catall --archives .
Options:
-r, --recursive Recurse into subdirectories
-A, --absolute Print absolute paths in headers
-S, --simple Simple file headers: path:
-D, --dir-headers Print directory headers
--dir-header FMT Directory header format
Default: "=== DIRECTORY: {path} ==="
-H, --header FMT File header format
Default: "===== {path} ====="
Tokens: {path} {relpath}
-s, --separator STR Printed after each file. Default: "\n\n"
-b, --binary Include binary-looking files and known binary extensions
Default skips binary extensions and binary-looking files
-m, --max-size BYTES Skip files larger than BYTES
Default: 1048576 bytes
-M, --no-max-size Disable default max-size limit
-e, --ext EXT Add extension manually, repeatable
Also overrides binary-extension exclusion for EXT
--extcol NAME Add extension collection, repeatable
--exclude-ext EXT Remove extension from final extension set
-x, --exclude PATH_OR_PREFIX Exclude relative path/prefix, repeatable
--include-hidden Include dot files and dot directories
--no-gitignore Do not read .gitignore
-a, --archives Search archive/compressed files
Direct archive paths are auto-detected
Native tools are preferred, 7z is fallback
-L, --follow-symlinks Follow symlinks
-T, --limit-text CHARS Limit displayed file content to CHARS
then print ...
-F, --limit-files COUNT Limit displayed files
then print ==...MORE FILES...==
-q, --quiet Suppress filesystem/read errors
--show-skipped Show skipped files
--show-skipped-reasons Show skipped files with reasons
--list-extcols Show available extension collections
-h, --help Show help
--version Show version
cpp
python
php
nodejs
web
java
go
rust
dotnet
ruby
shell
config.tar, .tar.gz, .tgz, .tar.xz, .tar.bz2, .gz, .xz, .bz2, and .zip.7z when available.-a or --archives.man catall.Global config file:
/etc/catall/catall.conf
Example:
[collections]
laravel=php,blade.php,js,ts,vue,css,scss,json,env,md
django=py,html,css,js,json,yml,yaml,toml,md
[binary_exts]
extra=wasm,map,bin,datcatall was built to simplify exporting repositories, source trees, configuration files, and archives into clean readable text streams without binary junk and formatting issues.
Unlike plain recursive concatenation tools, catall understands project structures, extension collections, archive formats, hidden files, and .gitignore rules.
It is especially useful for AI workflows, debugging, repository snapshots, audits, documentation generation, and preparing compact readable context for LLMs.
The Debian package also includes Bash autocompletion
and an installed manual page available through
man catall.