# cunw ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/RemiKalbe/cunw/.github%2Fworkflows%2Ftests.yaml) ![Crates.io Version](https://img.shields.io/crates/v/cunw) cunw (codebase unwrap) is a command-line interface (CLI) tool that generates a structured representation of a codebase, making it easy to provide context to a large language model (LLM). It recursively traverses a directory, collects file content, and generates a single file that represents the structure and content of the codebase. ## 🌟 Features - Recursively traverses a directory and collects file content - Generates a file representing the codebase structure and content - Supports excluding files based on glob patterns - Respects `.gitignore` files by default (can be disabled) - Allows specifying the maximum depth of directory traversal - Supports following symbolic links (disabled by default) ## 📦 Installation ### Precompiled Binaries You can easily install cunw through cargo: ```bash cargo install cunw ``` Or download the precompiled binaries from the [releases page](https://github.com/RemiKalbe/cunw/releases). ### From Source To install cunw, ensure you have Rust and Cargo installed on your system. Then, clone the repository and build the project: ```bash git clone https://github.com/RemiKalbe/cunw.git cd cunw cargo build --release ``` The compiled binary will be available at `target/release/cunw`. ## 🚀 Usage ```bash cunw [OPTIONS] ``` ### Options - `-p, --path `: The path to the directory containing the codebase. - `-o, --output `: The path of the output file. Default: `output.txt` - `-e, --exclude `: Exclude files or directories matching the specified glob pattern. - `--do-not-consider-ignore-files`: Do not consider `.gitignore` files when filtering. Default: `false` - `--dangerously-allow-dot-git-traversal`: Include `.git` directory in the search. Default: `false` - `-d, --max-depth `: Maximum depth to walk into the directory tree. - `-f, --follow-symbolic-links`: Follow symbolic links. Default: `false` - `-v, --verbose`: Set the verbosity level. Can be used multiple times to increase verbosity. ### Example To generate a file representation of a codebase located at `path/to/codebase`, excluding files matching `*.txt` and save the output to `codebase.md`: ```bash cunw path/to/codebase -o codebase.md -e "*.txt" ``` ## 📝 Output Format The generated file will have the following structure: ```xml . └─ . ├─ ./src │ ├─ main.rs │ └─ lib.rs ├─ .gitignore ├─ Cargo.lock └─ Cargo.toml [package] name = "cunw" version = "0.1.0" edition = "2021" [dependencies] fn main() { println!("Hello, world!"); } ``` The `` section represents the directory tree of the codebase, and each `` section contains the content of a specific file. ## 🤝 Contributing Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository. ## 📄 License This project is licensed under the [MIT License](LICENSE).