catall v1.0.5

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

APT Repository Download Package MIT License GitHub project

Features

Installation

curl -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 catall

Examples

catall - 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

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
  

Built-in Extension Collections

cpp
python
php
nodejs
web
java
go
rust
dotnet
ruby
shell
config

Archive, Man Page, and Autocompletion Support

Configuration

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,dat

Why catall?

catall 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.