Skip to main content

File Concatenation and Project Overview Tool for LLM preparation

Project description

Flort - File Concatenation and Project Overview Tool

License Python Tests

Flort Logo

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

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make your changes and add tests
  4. Run the test suite: python -m pytest
  5. 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-depth for deep directory structures
  • Use --exclude-patterns to skip large generated directories
  • Use --ignore-dirs for node_modules, .git, etc.
  • Use --manifest instead of --no-dump for large codebases

๐Ÿ“„ License

Licensed under the BSD 3-Clause License. See LICENSE for details.

๐Ÿค Support

๐Ÿ“ˆ 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-files behavior
  • ๐Ÿ› 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

flort-0.1.31.tar.gz (21.4 MB view details)

Uploaded Source

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

Hashes for flort-0.1.31.tar.gz
Algorithm Hash digest
SHA256 8823947ae1428e0b45226c8d501a607843053356e0d447059763328a7d1e26dc
MD5 06d021013a53df3759c1848825a902e0
BLAKE2b-256 c68ad6d00e89f588f0da2850eb2fda53bfd60ea7a0e13ede77b553f83776b2e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page