| Crates.io | devtool |
| lib.rs | devtool |
| version | 0.8.23 |
| created_at | 2025-10-01 15:26:08.590873+00 |
| updated_at | 2025-10-23 09:39:02.880734+00 |
| description | A CLI tool for development in update rustup toolchain, mise maintained tools and homebrew packages. |
| homepage | https://github.com/jenkinpan/devtool-rs |
| repository | https://github.com/jenkinpan/devtool-rs |
| max_upload_size | |
| id | 1862732 |
| size | 307,233 |
A modern, efficient developer tool written in Rust that unifies the update process for your development environment tools and package managers with a single command. Say goodbye to multiple update commands and let devtool keep everything up to date.
English | ็ฎไฝไธญๆ
devtool to automatically update multiple supported tools~/Library/Caches/devtool/ on macOS, ~/.cache/devtool/ on Linux)latest symlink pointing to the most recent execution--dry-run to preview steps without making changes--sequential--jobs (default: 3)devtool progress-status for integration with other toolsdevtool -V or devtool --versiondevtool feedback commanddevtool currently supports automatic detection and updating of:
mise up to update all managed languages and tools (Node.js, Python, etc.)cargo install devtool
Make sure ~/.cargo/bin is in your PATH environment variable.
git clone https://github.com/jenkinpan/devtool-rs.git
cd devtool-rs
cargo build --release
cargo install --path .
Simply run devtool in your terminal to start the update process:
devtool
This is equivalent to running devtool update.
Parallel execution is now the default mode for faster updates:
# Default parallel execution with 3 concurrent jobs
devtool
# Control the number of concurrent jobs
devtool --jobs 5
# Sequential execution (override parallel mode)
devtool --sequential
# Parallel execution with dry run
devtool --jobs 3 --dry-run
Performance Benefits:
--jobs parameter (default: 3)Customize devtool behavior with these options:
| Option | Short | Description |
|---|---|---|
--dry-run |
-n |
Show steps that would be executed without actually running them |
--verbose |
-v |
Print detailed output for each step during execution |
--version |
-V |
Show version information |
--keep-logs |
Keep log files for each step, stored in unified cache directory by default | |
--no-banner |
Don't show startup banner | |
--compact |
Use more compact output format for non-interactive environments | |
--parallel |
Execute update steps in parallel (default) | |
--sequential |
Execute update steps sequentially (override parallel mode) | |
--jobs |
Number of concurrent jobs for parallel execution (default: 3) | |
--no-color |
Disable colored output | |
--help |
-h |
Show help information |
devtool now provides detailed upgrade tracking, showing exactly what was upgraded with before/after version information:
When upgrades occur, devtool shows detailed information about what was changed:
๐ ๆดๆฐๅฎๆ๏ผ2025-10-18 14:00:30 (่ๆถ: 12็ง)
โ
ๅทฒๆดๆฐ๏ผHomebrew, Rustup
โน๏ธ ๆ ๆดๆฐๅบ็จใ
๐ ๅ็บง่ฏฆๆ
๏ผ
Homebrew๏ผๅ็บง่ฝฏไปถๅ
- git: 2.45.0 โ 2.45.1
- node: 20.10.0 โ 20.11.0
- python: 3.12.0 โ 3.12.1
Rust๏ผๆดๆฐๅทฅๅ
ท้พ
- stable-aarch64-apple-darwin: 1.90.0 โ 1.91.0
- nightly-aarch64-apple-darwin: 1.92.0 โ 1.93.0
package: old_version โ new_versionpackage: new installation โ versiondevtool provides a comprehensive log storage system for easy troubleshooting and debugging:
All log files are stored in a unified location:
~/Library/Caches/devtool/~/.cache/devtool/Logs are organized by tool with timestamped directories:
~/Library/Caches/devtool/
โโโ homebrew/
โ โโโ 1761008090/
โ โ โโโ brew_cleanup.log
โ โ โโโ brew_detailed_debug.log
โ โ โโโ brew_outdated.log
โ โ โโโ brew_update.log
โ โ โโโ brew_upgrade.log
โ โ โโโ outdated_packages.json
โ โโโ latest -> 1761008090/
โโโ rustup/
โ โโโ 1761008078/
โ โ โโโ rustup_update.log
โ โโโ latest -> 1761008078/
โโโ mise/
โ โโโ 1761008076/
โ โ โโโ mise_up.log
โ โโโ latest -> 1761008076/
โโโ feedback/
โโโ devtool_feedback_*.md
Each tool generates specific log files:
Homebrew:
brew_update.log: Homebrew update outputbrew_upgrade.log: Homebrew upgrade outputbrew_cleanup.log: Homebrew cleanup outputbrew_outdated.log: Outdated packages detectionbrew_detailed_debug.log: Detailed debugging informationoutdated_packages.json: JSON format of outdated packagesRustup:
rustup_update.log: Rustup update outputMise:
mise_up.log: Mise update outputAccess latest logs: Use the latest symlink for the most recent execution
ls ~/Library/Caches/devtool/homebrew/latest/
View specific log files: Check individual log files for detailed information
cat ~/Library/Caches/devtool/homebrew/latest/brew_detailed_debug.log
Historical logs: Browse timestamped directories for previous executions
ls ~/Library/Caches/devtool/homebrew/
Use the --keep-logs flag to enable log storage:
devtool update --keep-logs
This will save all log files to the unified cache directory for later analysis.
Standard update (parallel execution by default):
$ devtool
๐ Starting devtool update: 2025-10-16 16:59:41
๐ Will execute 3 steps:
1) Homebrew update & upgrade & cleanup
2) Rustup all toolchains update
3) Mise tools update
๐ Parallel execution mode (max concurrent: 3)
[00:00:11] [#########################] 100% โ
Homebrew ๅฎๆ
[00:00:12] [#########################] 100% โ
Rustup ๅฎๆ
[00:00:12] [#########################] 100% โ
Mise ๅฎๆ
๐ Update completed: 2025-10-16 16:59:45 (Time taken: 19็ง)
โน๏ธ No updates applied.
โ ๏ธ Already latest: Rustup, Mise
โ
Updated: Homebrew
Dry run:
devtool --dry-run
User feedback:
# Interactive feedback collection
devtool feedback
# Direct feedback submission
devtool feedback --type bug --message "Found an issue with Homebrew updates" --verbose
# Feature request
devtool feedback --type feature --message "Add support for npm updates"
Check version:
devtool -V
# Output: devtool 0.3.3
Monitor progress (for scripts or status bars):
Run devtool in one terminal, query progress in another:
devtool progress-status
# Output: Progress status: ProgressStatus { state: "update", percent: Some(60), done: Some(3), total: Some(5), desc: Some("Action: Cleanup old versions"), ts: Some("2025-10-04T13:17:45.123+08:00") }
Language support:
The tool automatically detects your system language and displays the interface in Chinese or English accordingly.
devtool provides comprehensive shell completion support for all major shells:
# Generate completion for your shell
devtool completion bash # For bash
devtool completion zsh # For zsh
devtool completion fish # For fish
devtool completion powershell # For PowerShell
devtool completion elvish # For Elvish
devtool completion nushell # For Nushell
Bash:
# Add to ~/.bashrc
source <(devtool completion bash)
Zsh:
# Add to ~/.zshrc
source <(devtool completion zsh)
Fish:
# Add to ~/.config/fish/config.fish
devtool completion fish | source
Nushell:
# Add to your config.nu
use ~/.config/nushell/completions/devtool-completions.nu *
If you get command not found: devtool after installation:
# Check if ~/.cargo/bin is in your PATH
echo $PATH
# Add to your shell profile (e.g., ~/.bashrc, ~/.zshrc)
export PATH="$HOME/.cargo/bin:$PATH"
# Reload your shell configuration
source ~/.bashrc # or source ~/.zshrc
If you encounter permission errors:
# Make sure the binary is executable (Unix/Linux/macOS)
chmod +x ~/.cargo/bin/devtool
# On macOS, if blocked by Gatekeeper:
xattr -d com.apple.quarantine ~/.cargo/bin/devtool
devtool only updates tools that are already installed. To get started:
If updates fail consistently:
--verbose flag for detailed output: devtool --verbose~/.cache/devtool/logs/ for detailed error messagesForce English output if automatic language detection doesn't work:
LANG=en_US.UTF-8 devtool
Add to your shell profile for quick access:
alias dup='devtool'
alias update-dev='devtool'
Using cron (Linux/macOS):
# Edit crontab
crontab -e
# Add this line to run daily at 9 AM
0 9 * * * /home/username/.cargo/bin/devtool
Using launchd (macOS):
Create ~/Library/LaunchAgents/com.devtool.update.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.devtool.update</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yourname/.cargo/bin/devtool</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
Then load it: launchctl load ~/Library/LaunchAgents/com.devtool.update.plist
In Makefiles:
.PHONY: update-tools
update-tools:
devtool
.PHONY: dev-setup
dev-setup: update-tools
npm install
bundle install
In scripts:
#!/bin/bash
# Safe update script
if devtool --dry-run; then
echo "Dry run successful, proceeding..."
devtool
else
echo "Dry run failed, skipping update"
exit 1
fi
macOS:
devtool && osascript -e 'display notification "Updates completed" with title "devtool"'
Linux (with notify-send):
devtool && notify-send "devtool" "Updates completed"
Q: Does devtool work on Windows?
A: Partial support. Rustup and Mise work, but Homebrew is not available on Windows. We plan to add winget support in the future.
Q: Is it safe to run devtool?
A: Yes! devtool only calls the standard update commands for each tool. Use --dry-run to see exactly what will be executed before running.
Q: How long does it take?
A: Typically 30-90 seconds depending on how many updates are available and your internet speed.
Q: Can I run it in parallel?
A: Not yet, but parallel execution is planned for v0.5.0, which will significantly reduce update time.
Q: Does it update system packages (apt, yum, etc.)?
A: Not yet, but system package manager support is planned for v0.6.0.
Q: Where are log files stored?
A: Log files are stored in ~/.cache/devtool/logs/ (Linux/macOS) or %LOCALAPPDATA%\devtool\logs\ (Windows).
Q: How do I report a bug?
A: Please open an issue on GitHub with details about your environment and the error.
Q: How can I contribute?
A: See our CONTRIBUTING.md guide! We welcome bug reports, feature requests, and pull requests.
Contributions are welcome! Please feel free to submit issues and pull requests on the GitHub repository.
See CONTRIBUTING.md for detailed guidelines on:
Reporting bugs
Suggesting features
Submitting pull requests
Development setup
Adding new package managers