| Crates.io | flash-watcher |
| lib.rs | flash-watcher |
| version | 0.1.2 |
| created_at | 2025-05-23 00:23:46.063873+00 |
| updated_at | 2025-05-23 03:57:50.732075+00 |
| description | A blazingly fast file watcher that executes commands when files change |
| homepage | https://github.com/sage-scm/Flash |
| repository | https://github.com/sage-scm/Flash |
| max_upload_size | |
| id | 1685736 |
| size | 241,424 |
A blazingly fast file watcher that executes commands when files change.
2.1ms startup time • 1.7x faster than watchexec • 18x faster than watchman
Think nodemon, but more general purpose and written in Rust.
cargo install flash-watcher
git clone https://github.com/sage-scm/Flash.git
cd Flash
cargo install --path .
Download pre-built binaries from the releases page.
flash [OPTIONS] <COMMAND>...
<COMMAND>...: Command to run when files change-w, --watch <WATCH>: Paths/patterns to watch (supports glob patterns like src/**/*.js)-e, --ext <EXT>: File extensions to watch (e.g., "js,jsx,ts,tsx")-p, --pattern <PATTERN>: Specific glob patterns to include (e.g., "src/**/*.{js,ts}")-i, --ignore <IGNORE>: Glob patterns to ignore (e.g., "/node_modules/")-d, --debounce <DEBOUNCE>: Debounce time in milliseconds [default: 100]-r, --restart: Restart long-running processes instead of spawning new ones-c, --clear: Clear console before each command run-n, --initial: Run command on startup-f, --config <CONFIG>: Use configuration from file--stats: Show performance statistics while running--stats-interval <SECONDS>: Statistics update interval in seconds [default: 10]--bench: Run benchmark against other file watchers--fast: Fast startup mode - minimal output and optimizations-h, --help: Print help-V, --version: Print versionFlash supports powerful glob pattern matching for both watching files and filtering them:
-w)Watch specific file patterns directly:
# Watch all JavaScript files in src directory
flash -w "src/**/*.js" echo "JS file changed"
# Watch multiple specific patterns
flash -w "src/**/*.js" -w "public/**/*.css" echo "File changed"
-i)Ignore specific directories or files:
# Ignore node_modules and dist directories anywhere in the tree
flash -w "." -i "**/node_modules/**" -i "**/dist/**" echo "File changed"
# Ignore minified files
flash -w "src" -i "**/*.min.js" echo "File changed"
-p)Specifically include only certain file patterns:
# Only include TypeScript files in src and test directories
flash -w "." -p "src/**/*.ts" -p "test/**/*.ts" echo "TS file changed"
The most powerful usage comes from combining these options:
flash -w "." -e "js,ts" -p "src/**/*.{js,ts}" -i "**/node_modules/**" -i "**/dist/**" echo "File changed"
Watch current directory and restart a Node.js server when changes occur:
flash -r node server.js
Watch TypeScript files in the src directory and run the build script:
flash -w src -e ts npm run build
Watch multiple directories but ignore node_modules:
flash -w src -w tests -i "**/node_modules/**" cargo test
Watch using glob patterns to include only specific files:
flash -p "src/**/*.{js,jsx,ts,tsx}" -p "public/**/*.css" npm run build
Clear console and run command on startup:
flash -c -n -r npm start
Run with performance statistics:
flash --stats --stats-interval 5 npm run dev
Ultra-fast startup mode (minimal output):
flash --fast npm run dev
You can define a configuration file in YAML format to avoid typing long commands:
# flash.yaml
command: ["npm", "run", "dev"]
watch:
- "src/**" # Watch all files in src directory recursively
- "public/*.html" # Watch HTML files in public directory
ext: "js,jsx,ts,tsx"
pattern:
- "src/**/*.{js,jsx,ts,tsx}" # JavaScript/TypeScript files in src
ignore:
- "**/node_modules/**" # Ignore node_modules directory
- "**/.git/**" # Ignore .git directory
- "**/*.min.js" # Ignore minified JS files
debounce: 200
initial: true
clear: true
restart: true
Then run Flash with:
flash -f flash.yaml
You can also override configuration file settings with command line arguments.
flash -w "src/**" -w "public/**" -e js,jsx,ts,tsx,css,html -i "**/node_modules/**" -r -c -n npm start
flash -w "src/**/*.rs" -w "tests/**/*.rs" -i "target/**" -c cargo test
flash -w "docs/**/*.md" -c -n mdbook build
Flash is designed to be blazingly fast and resource efficient. To see how it compares to other file watchers:
flash --bench
This will show sample benchmark results. For real benchmarks, you can run:
# Run actual benchmarks (requires benchmarks feature)
cargo bench --features benchmarks
# Or install with benchmarks enabled
cargo install flash-watcher --features benchmarks
Note: The --bench flag shows sample benchmark data for demonstration. For real benchmarks, use cargo bench --features benchmarks. Benchmarks are disabled by default in CI/CD pipelines to save workflow minutes.
For developers, we provide convenient scripts:
# Generate code coverage reports (fast, excludes benchmarks)
./scripts/coverage.sh
# Run performance benchmarks (slow, requires benchmarks feature)
./scripts/benchmark.sh
Flash is designed for speed. See our performance benchmarks for detailed comparisons with other file watchers.
We welcome contributions! Please see CONTRIBUTING.md for details on how to get started.
This project is licensed under the MIT License - see the LICENSE file for details.