Smart search & replace for code and files with case-aware transformations and built-in undo/redo.
- CLI tool - Production ready with full Windows, macOS, and Linux support
- MCP server - AI integrations for Claude, Cursor, and other MCP-compatible tools
- VS Code / Cursor extension - Instant renaming without leaving your editor
- Written in Rust - High performance and memory safety with >90% code coverage
- Documentation - Comprehensive guides at docspring.github.io/renamify
curl -fsSL https://docspring.github.io/renamify/install.sh | sh
# Using Cargo
cargo install --git https://github.com/DocSpring/renamify
# Or clone and build
git clone https://github.com/DocSpring/renamify
cd renamify
cargo build --release
# Binary will be at ./target/release/renamify
npx @renamify/mcp-server
See MCP Server documentation for Claude and Cursor setup.
- Smart Case Conversion: Automatically detects and converts between different case styles (snake_case, kebab-case, camelCase, PascalCase, SCREAMING_SNAKE_CASE, Train-Case, Title Case, dot.case)
- Safe by default: Plan → Review → Apply workflow prevents accidents
- Built-in undo/redo: Full history tracking separate from git. No need to git stash or commit with
--no-verify
before renaming. - File and directory renaming: Rename everything in one atomic operation
- Respects ignore files: Works with
.gitignore
,.ignore
,.rgignore
,.rnignore
- Cross-platform: Full support for Linux, macOS, and Windows
- Line filtering: Exclude matches on lines matching a regex pattern (e.g., skip comments, TODOs)
# Preview changes before applying
renamify plan old_name new_name
# Rename with automatic approval
renamify rename old_name new_name --yes
# Undo the last rename
renamify undo
# See what would change with different preview formats
renamify plan myProject betterName --preview table
renamify plan myProject betterName --preview diff
# Exclude matches in comments and TODO lines
renamify plan old_name new_name --exclude-matching-lines '^//'
renamify plan old_name new_name --exclude-matching-lines '(TODO|FIXME)'
Watch Renamify rename itself to renamed_renaming_tool
, then use the renamed binary to change it back:
# Clone and build
git clone https://github.com/DocSpring/renamify
cd renamify
cargo build --release
# Use renamify to rename itself to renamed_renaming_tool
./target/release/renamify rename renamify renamed_renaming_tool --preview table
# Rebuild with the new name
rm -rf target
cargo build --release
# Now use renamed_renaming_tool to rename itself back to renamify!
./target/release/renamed_renaming_tool rename renamed_renaming_tool renamify --preview table
# Back to the original
rm -rf target
cargo build --release
./target/release/renamify --help
This demonstrates Renamify's power: it can rename entire projects including all code references, file names, and directory names - all while maintaining perfect consistency across different naming conventions.
Renamify respects various ignore files to skip files and directories during scanning:
.gitignore
- Standard Git ignore patterns.ignore
- Generic ignore file (like ripgrep).rgignore
- Ripgrep-specific ignore patterns.rnignore
- Renamify-specific ignore patterns
You can control how ignore files are handled using the -u
flag:
- Default: Respects all ignore files and skips hidden files
-u
: Ignores.gitignore
but respects other ignore files-uu
: Ignores all ignore files and shows hidden files-uuu
: Same as-uu
plus treats binary files as text
The .rnignore
file is useful when you want to exclude files specifically from renamify operations without affecting Git or other tools.
Renamify follows Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for backward-compatible functionality additions
- PATCH version for backward-compatible bug fixes
The MCP server and VS Code extension depend on the CLI and must maintain version compatibility:
- Major version: Must match the CLI major version exactly
- Minor version: Must be ≤ CLI minor version (can use older features, not newer ones)
- Patch version: Independent, can be any value
- CLI
2.3.1
→ MCP2.0.5
✅ (major matches, minor 0 ≤ 3) - CLI
2.3.1
→ MCP2.3.9
✅ (major matches, minor 3 ≤ 3) - CLI
2.3.1
→ MCP2.4.0
❌ (minor 4 > 3, might use unavailable features) - CLI
2.3.1
→ MCP3.0.0
❌ (major version mismatch)
The CLI provides version information via:
renamify version --output json
# {"name":"renamify","version":"0.1.0"}
Both the MCP server and VS Code extension verify CLI compatibility on startup and will fail gracefully if the CLI version doesn't meet requirements.
# Install all development dependencies (Rust, tools, etc.)
./scripts/dev-setup.sh
- Rust 1.80.1 or later (installed by dev-setup.sh)
- cargo (included with Rust)
cargo build --release
cargo test
For debugging tokenization issues, you can set the DEBUG_TOKENIZE
environment variable to see detailed output of how Renamify parses identifiers into tokens:
DEBUG_TOKENIZE=1 cargo test test_name
This is particularly useful when troubleshooting issues with case conversions or acronym handling.
The renamify-core
library maintains comprehensive test coverage:
cargo install cargo-llvm-cov
cargo llvm-cov --package renamify-core --html
# Open target/llvm-cov/html/index.html to view the report
We use automated checks to maintain code quality:
# Format code
cargo fmt --all
# Run clippy
cargo clippy --all-targets --all-features
# Check shell scripts
./scripts/shellcheck.sh
# Or let git hooks handle it automatically
git commit # lefthook will run checks pre-commit
- Package Managers: Help us get Renamify into Homebrew, AUR, Scoop, Chocolatey, etc.
- Language-Specific Features: Contribute language-aware renaming (imports, modules, namespaces)
- Documentation: Help improve our docs, add more examples, fix any inaccuracies
- Bug Reports: Found an issue? Please report it!
- Open an issue if you find a bug or have a feature request
- PRs welcome! All checks must pass (formatting, linting, tests)
- We use lefthook for git hooks
MIT License - Copyright (c) 2025 DocSpring
Renamify was created by DocSpring
Fill, sign, and generate PDFs at scale