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
- 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
- Directory tree generation: Clean,
tree-like output - Python code outline: Detailed class/function signatures with docstrings
- File manifest: Size and type information without content
- 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
- 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
# 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# 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| 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 |
| 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 |
| 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 |
| Option | Description |
|---|---|
--verbose -v |
Enable detailed logging |
--ui -u |
Launch interactive file selector |
--version |
Show version information |
--help -h |
Display help message |
# Create comprehensive project overview
flort . --extensions py,md,txt,yml \
--exclude-patterns "*test*,*cache*" \
--show-config \
--outline \
--archive zip# Prepare codebase for AI analysis
flort src/ --extensions py,js \
--exclude-patterns "*test*,*.min.*" \
--max-depth 3 \
--show-config# Generate review-ready code package
flort --extensions py,js,ts,md \
--exclude-extensions pyc,pyo \
--ignore-dirs __pycache__,node_modules,dist \
--manifest \
--show-config# Analyze only configuration and main files
flort -f setup.py,requirements.txt,config.py,main.py \
--show-config \
--outline# Python files only, exclude tests and cache
flort --extensions py \
--exclude-patterns "*test*,*cache*,*__pycache__*" \
--exclude-extensions pyc,pyo \
--hidden \
--show-configFlort 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."""
...
# Launch curses-based file selector
flort --ui --extensions py,jsThe interactive UI allows you to:
- Navigate directory structure
- Toggle file/directory selection
- Filter by extensions
- Preview selections
- Combine with command-line options
# Generate detailed code outline
flort --extensions py --outline --show-configExtracts and displays:
- Class definitions with inheritance
- Method signatures with type annotations
- Function parameters and return types
- Docstrings and decorators
- Nested classes and methods
# See exactly what filters are applied
flort --extensions py,js --exclude-patterns "*test*" --show-configShows complete configuration including:
- Working directory and output file
- All inclusion/exclusion criteria
- Processing options and modes
- Applied filters and their effects
# 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- 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
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
)No files found:
# Check what files exist
flort --all --show-config
# Verify extensions
flort --extensions py --verboseFiles being excluded unexpectedly:
# Use show-config to see active filters
flort --extensions py --show-config --verboseBinary files included:
# Explicitly exclude binary files (default behavior)
flort --extensions py # Binary files auto-excluded
# Or explicitly include them
flort --extensions py --include-binary- 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
Licensed under the BSD 3-Clause License. See LICENSE for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: chris@watkinslabs.com
- β¨ 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
- Basic file concatenation functionality
- Directory tree generation
- Python outline support
