Skip to content

Configuration

Renamify looks for configuration in .renamify/config.toml:

# Renamify Configuration File
[defaults]
# Default preview format: "table", "diff", or "json"
preview = "diff"
# Whether to rename files by default
rename_files = true
# Whether to rename directories by default
rename_dirs = true
# Default unrestricted level
# 0 = respect all .gitignore files (default)
# 1 = -u (don't respect .gitignore files in the repo)
# 2 = -uu (don't respect .gitignore or .ignore files)
# 3 = -uuu (don't respect any ignore files, search binary files)
unrestricted_level = 0
# Whether to use color output by default
# Options: true, false, or omit for auto-detection based on terminal
# use_color = true

See .renamify/config.toml.example for a complete example configuration.

Disable colored output (respects the NO_COLOR standard):

Terminal window
NO_COLOR=1 renamify plan old new

Equivalent to the -y flag (assume yes for all prompts):

Terminal window
RENAMIFY_YES=1 renamify plan old new
# Same as: renamify -y plan old new

Useful for:

  • CI/CD environments
  • Automated scripts
  • Non-interactive contexts

Control how Renamify initializes its workspace:

Terminal window
# Automatically add to .gitignore without prompting
renamify --auto-init=repo plan old new
# Add to local git exclude instead
renamify --auto-init=local plan old new
# Add to global git excludes
renamify --auto-init=global plan old new
# Disable auto-initialization completely
renamify --no-auto-init plan old new
Terminal window
# For CI/CD - assume yes and use repo initialization
export RENAMIFY_YES=1
renamify --auto-init=repo plan old new

Renamify creates and manages these directories and files:

.renamify/
├── config.toml # Project configuration (optional)
├── plan.json # Current active plan
├── history.json # Operation history
├── renamify.lock # Process lock file (temporary)
└── backups/ # Backup directories
├── abc123-timestamp/
│ ├── file1.js # Original file contents
│ ├── file2.py
│ ├── checksums.json # Integrity verification
│ └── operation-info.json # Operation metadata
└── def456-timestamp/

Most users should add to their repository’s .gitignore:

# Renamify workspace
.renamify/

For personal use without affecting the team:

# Add to .git/info/exclude
.renamify/

For all your projects:

Terminal window
# Configure global excludes file
git config --global core.excludesfile ~/.gitignore_global
# Add to ~/.gitignore_global
echo '.renamify/' >> ~/.gitignore_global

For projects with many files, consider these optimizations:

Terminal window
# Use specific includes to limit scope
renamify plan old new --include "src/**/*.{js,ts}"
# Exclude large directories early
renamify plan old new --exclude "node_modules/**,target/**"
# Use unrestricted flags judiciously
renamify plan old new -u # Only if you need gitignored files

Very large plans may require significant memory. Monitor usage with:

Terminal window
# Check plan file size
ls -lh .renamify/plan.json
# For huge plans, consider splitting the work:
renamify plan old new --include "src/module1/**" # First part
renamify apply
renamify plan old new --include "src/module2/**" # Second part
renamify apply
  • Handles path length limitations (260 chars)
  • Prevents Windows reserved filenames (CON, PRN, AUX, etc.)
  • Supports both / and \ path separators
  • Detects case-insensitive APFS/HFS+ filesystems
  • Uses two-step renames for case-only changes
  • Handles Unicode normalization differences
  • Generally case-sensitive filesystem support
  • Efficient parallel directory traversal
  • Memory-mapped file reading for performance

Planned configuration features (not yet implemented):

[defaults]
# Automatic git operations
auto_commit = false
commit_message_template = "Renamify: {old} → {new}"
[safety]
# Backup retention
backup_retention_days = 30
max_backup_size_mb = 1000
# Conflict handling
conflict_strategy = "ask" # ask, skip, force
[performance]
# Parallel processing
max_threads = 0 # 0 = auto-detect
# Memory limits
max_plan_size_mb = 100