File Concatenation and Project Overview Tool for LLM preparation
Project description
Flort - File Concatenation and Project Overview Tool
FLORT โ Flattened Layout for Organized Repo Transpilation
Flort is a powerful command-line tool for creating consolidated views of your project's source code. It intelligently combines multiple files into a single, well-organized output file with comprehensive filtering, directory tree generation, and Python code analysis capabilities.
Perfect for preparing codebases for LLM analysis, documentation generation, code reviews, or sharing complete project overviews.
- LLM training & fine-tuning
- Source code summarization
- Project documentation
- Codebase visualization
โจ Features
๐ฏ Smart File Discovery
- Extension-based filtering: Include/exclude by file type
- Pattern-based filtering: Advanced glob pattern matching
- Binary file detection: Automatic exclusion with override option
- Hidden file handling: Control visibility of dotfiles
- Directory traversal limits: Set maximum depth
- Specific file inclusion: Add individual files regardless of filters
๐ฒ Project Structure Visualization
- Directory tree generation: Clean,
tree-like output - Python code outline: Detailed class/function signatures with docstrings
- File manifest: Size and type information without content
โ๏ธ Advanced Configuration
- Configuration display: See exactly what filters were applied
- Multiple output formats: File concatenation, manifest, or outline
- Archive creation: Generate ZIP or tar.gz archives
- Content cleaning: Normalize whitespace while preserving structure
๐ง Robust Processing
- Comprehensive error handling: Graceful failure with detailed logging
- Performance optimized: Efficient processing of large codebases
- Cross-platform: Works on Linux, macOS, and Windows
- Extensive testing: 19 test cases covering all functionality
๐ Quick Start
Installation
# Install from source
git clone https://github.com/watkinslabs/flort.git
cd flort
pip install -e .
# Or install from PyPI (when published)
pip install flort
Basic Usage
# Include all Python files in current directory
flort --extensions py
# Include multiple file types, exclude tests
flort --extensions py,js,ts --exclude-patterns "*test*"
# Process specific files only
flort -f README.md,setup.py,requirements.txt
# Complex filtering with configuration display
flort --extensions py,md --exclude-extensions pyc \
--exclude-patterns "*test*,*cache*" \
--ignore-dirs __pycache__,node_modules \
--show-config
๐ Command Reference
Core Options
| Option | Description | Example |
|---|---|---|
--extensions -e |
File extensions to include | --extensions py,js,ts |
--exclude-extensions |
File extensions to exclude | --exclude-extensions pyc,pyo |
--glob -g |
Glob patterns to include | --glob "*.py,src/**/*.js" |
--exclude-patterns |
Glob patterns to exclude | --exclude-patterns "*test*,*.min.*" |
--include-files -f |
Specific files to include | --include-files config.ini,VERSION |
--ignore-dirs -i |
Directories to skip | --ignore-dirs __pycache__,node_modules |
Behavior Modifiers
| Option | Description |
|---|---|
--all -a |
Include all files (respects exclude filters) |
--hidden -H |
Include hidden files/directories |
--include-binary |
Include binary files (normally excluded) |
--max-depth |
Maximum directory traversal depth |
Output Control
| Option | Description |
|---|---|
--output -o |
Output file path (default: <dir>.flort.txt) |
--show-config |
Display configuration at start of output |
--no-tree -t |
Skip directory tree generation |
--outline -O |
Generate Python code outline |
--manifest |
Create file listing without content |
--no-dump -n |
Skip file concatenation |
--archive -z |
Create ZIP or tar.gz archive |
Utility Options
| Option | Description |
|---|---|
--verbose -v |
Enable detailed logging |
--ui -u |
Launch interactive file selector |
--version |
Show version information |
--help -h |
Display help message |
๐ก Usage Examples
๐ Project Documentation
# Create comprehensive project overview
flort . --extensions py,md,txt,yml \
--exclude-patterns "*test*,*cache*" \
--show-config \
--outline \
--archive zip
๐ค LLM Context Preparation
# Prepare codebase for AI analysis
flort src/ --extensions py,js \
--exclude-patterns "*test*,*.min.*" \
--max-depth 3 \
--show-config
๐ Code Review Package
# Generate review-ready code package
flort --extensions py,js,ts,md \
--exclude-extensions pyc,pyo \
--ignore-dirs __pycache__,node_modules,dist \
--manifest \
--show-config
๐ Specific Analysis
# Analyze only configuration and main files
flort -f setup.py,requirements.txt,config.py,main.py \
--show-config \
--outline
๐ฏ Filtered Processing
# Python files only, exclude tests and cache
flort --extensions py \
--exclude-patterns "*test*,*cache*,*__pycache__*" \
--exclude-extensions pyc,pyo \
--hidden \
--show-config
๐ Output Format
Flort generates well-structured output with clear sections:
## Florted: 2025-06-01 16:45:30
## Flort Configuration
Working Directory: /path/to/project
Output File: project.flort.txt
Target Directories: .
### Inclusion Criteria:
- Extensions: py, js, md
- Exclude patterns: *test*, *cache*
### Exclusion Criteria:
- Binary files (use --include-binary to include)
- Hidden files (use --hidden to include)
---
## Directory Tree
project/
โโโ README.md
โโโ setup.py
โโโ src/
โ โโโ main.py
โ โโโ utils.py
โโโ tests/
โโโ test_main.py
## Python Code Outline
### File: src/main.py
FUNCTION: main() -> None
DOCSTRING:
Main entry point for the application.
CLASS: Application
DOCSTRING:
Core application class.
METHOD: __init__(self, config: dict)
METHOD: run(self) -> int
## File Data
--- File: README.md
--- Characters: 1,234
--- Token Count: 456
# Project Title
...file content...
--- File: src/main.py
--- Characters: 2,345
--- Token Count: 567
def main():
"""Main entry point."""
...
๐ง Advanced Features
Interactive File Selection
# Launch curses-based file selector
flort --ui --extensions py,js
The interactive UI allows you to:
- Navigate directory structure
- Toggle file/directory selection
- Filter by extensions
- Preview selections
- Combine with command-line options
Python Code Analysis
# Generate detailed code outline
flort --extensions py --outline --show-config
Extracts and displays:
- Class definitions with inheritance
- Method signatures with type annotations
- Function parameters and return types
- Docstrings and decorators
- Nested classes and methods
Configuration Transparency
# See exactly what filters are applied
flort --extensions py,js --exclude-patterns "*test*" --show-config
Shows complete configuration including:
- Working directory and output file
- All inclusion/exclusion criteria
- Processing options and modes
- Applied filters and their effects
๐งช Development & Testing
Running Tests
# Run all tests
python -m pytest tests/ -v
# Run specific test categories
python -m pytest tests/test_flort.py::TestUtils -v
python -m pytest tests/test_flort.py::TestTraverse -v
python -m pytest tests/test_flort.py::TestCLI -v
# Run with coverage
python -m pytest tests/ --cov=flort --cov-report=html
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and add tests
- Run the test suite:
python -m pytest - Submit a pull request
๐ API Usage
Flort can also be used programmatically:
from flort import get_paths, concat_files, FileFilter
# Discover files with custom filtering
file_list = get_paths(
directories=["src/"],
extensions=["py", "js"],
exclude_patterns=["*test*"],
ignore_dirs=[Path("__pycache__")]
)
# Concatenate to output file
success = concat_files(file_list, "output.txt")
# Advanced filtering with FileFilter
filter_obj = FileFilter(
include_extensions=["py"],
exclude_patterns=["*test*"],
include_binary=False
)
๐ Troubleshooting
Common Issues
No files found:
# Check what files exist
flort --all --show-config
# Verify extensions
flort --extensions py --verbose
Files being excluded unexpectedly:
# Use show-config to see active filters
flort --extensions py --show-config --verbose
Binary files included:
# Explicitly exclude binary files (default behavior)
flort --extensions py # Binary files auto-excluded
# Or explicitly include them
flort --extensions py --include-binary
Performance Tips
- Use
--max-depthfor deep directory structures - Use
--exclude-patternsto skip large generated directories - Use
--ignore-dirsfor node_modules, .git, etc. - Use
--manifestinstead of--no-dumpfor large codebases
๐ License
Licensed under the BSD 3-Clause License. See LICENSE for details.
๐ค Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: chris@watkinslabs.com
๐ Changelog
v 0.1.23 (2025-06-01)
- โจ Added exclude functionality (
--exclude-extensions,--exclude-patterns) - โจ Added configuration display (
--show-config) - โจ Added binary file control (
--include-binary) - โจ Added depth limiting (
--max-depth) - โจ Added file manifest mode (
--manifest) - ๐ Fixed
-f/--include-filesbehavior - ๐ Fixed directory tree generation
- ๐ Fixed pattern matching logic
- ๐งช Added comprehensive test suite (19 tests)
- ๐ Complete documentation rewrite
v 0.1.1
- Basic file concatenation functionality
- Directory tree generation
- Python outline support
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
File details
Details for the file flort-0.1.31.tar.gz.
File metadata
- Download URL: flort-0.1.31.tar.gz
- Upload date:
- Size: 21.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8823947ae1428e0b45226c8d501a607843053356e0d447059763328a7d1e26dc
|
|
| MD5 |
06d021013a53df3759c1848825a902e0
|
|
| BLAKE2b-256 |
c68ad6d00e89f588f0da2850eb2fda53bfd60ea7a0e13ede77b553f83776b2e9
|