Code quality enchantress with style
Siren is a powerful frontend for multiple linting tools that makes maintaining code quality a delightful experience. Inspired by the mythological sirens, Siren draws developers in with beautiful vibrant output, smart defaults, and an intuitive interface - making code quality standards irresistible to adopt.
- 🌈 Multi-language Support - Currently works with Rust, Python, JavaScript/TypeScript and HTML/Templates
- 🔍 Framework Detection - Automatically identifies project types and frameworks
- 🧙♀️ Smart Tool Selection - Chooses the right linters based on detected technologies
- 🪄 Unified Interface - One command to rule all your linting needs
- 💅 Vibrant Output - Colorful, stylish terminal experience
- ⚙️ Configuration Flexibility - Smart defaults with extensive customization options
- ⚡ High Performance - Lightning-fast execution with Rust's efficiency
- 🔧 Auto-fixing - Automatically resolves common issues when possible
- 🔄 Git Integration - Focuses on recently modified files for efficient workflows
- 📊 Interactive Progress - Live-updating spinners show the status of each tool
cargo install siren-lintgit clone https://github.com/hyperb1iss/siren
cd siren
cargo build --releasebrew install hyperb1iss/tap/siren# Run Siren with no arguments to check the entire project
siren
# Format your code beautifully across all languages
siren format
# Check just the files you've changed
siren --git-modified
# Automatically fix what can be fixed
siren fix
# Focus on a specific directory or file
siren check src/components/
# Target a specific language
siren check --lang rust
# Format and fix in one command
siren format-fix src/Siren supports a growing collection of languages and tools, automatically selecting the best options for your project.
| Language | Formatting | Linting | Type Checking | Fixing |
|---|---|---|---|---|
| 🦀 Rust | rustfmt |
clippy |
- | clippy --fix |
| 🐍 Python | black, ruff format |
pylint, ruff check |
mypy |
ruff --fix |
| 🌐 JavaScript | prettier |
eslint |
- | eslint --fix |
| 📘 TypeScript | prettier |
eslint |
- | eslint --fix |
| 🖥️ HTML/Templates | djlint |
djlint |
- | djlint --reformat |
- 🎨 CSS/SCSS:
prettier,stylelint - 🐹 Go:
gofmt,golangci-lint - 💎 Ruby:
rubocop,sorbet - 📝 Markdown:
prettier,markdownlint - And many more...
Siren believes in "convention over configuration" but respects your preferences.
- Works Out-of-box - Zero config needed for common projects
- Progressive Configuration - Add settings only when you need to customize
- Sensible Defaults - We make the hard choices so you don't have to
- Override Anything - But you can always do it your way
Siren uses TOML for configuration. Place a .siren.toml file in your project root:
# .siren.toml example
[general]
fail_level = "error"
use_relative_paths = true
[languages.python]
line_length = 100
ignore_rules = ["E203", "W503"]
[tools.eslint]
extra_args = ["--max-warnings", "10"]
auto_fix = true# Format your code beautifully across all languages
$ siren format
# Check just the files you've changed
$ siren --git-modified
# Use glob patterns to check specific files or directories
$ siren check . "src/components/**/*.tsx" "lib/**/*.js"
# Fix issues in specific parts of your codebase
$ siren fix core/templates "**/*.html"
# Chain commands for workflow efficiency
$ siren format-fix --git-modified# Run comprehensive checks before a release
$ siren check --strict
# Integrate with CI pipeline
$ siren check --ci --fail-level=error
# Create a team config (coming soon)
$ siren init --team# See what Siren detects in your project
$ siren detect
# Learn what tools are available
$ siren list-tools
# Get suggestions for improving code quality (coming soon)
$ siren suggest# Add to your .bashrc or .zshrc
alias lint="siren"
alias lintfix="siren fix"
alias format="siren format"
alias check="siren --git-modified"# In .git/hooks/pre-commit
siren check --git-staged --fail-level=error# .github/workflows/quality.yml
steps:
- name: Check code quality
run: siren check --ci --fail-level=errorSiren is currently in active development. Check the Project Checklist for the current status and roadmap.
The following features are implemented and working:
- ✅ Core architecture and command structure
- ✅ Tool registry and plugin system
- ✅ Support for Rust, Python, and HTML tools
- ✅ Partial support for JavaScript/TypeScript tools
- ✅ Project detection and file collection
- ✅ Basic configuration loading and defaults
- ✅ Colorful terminal output
Coming soon:
- 🔄 Enhanced reporting (HTML, CI annotations)
- 🔄 Additional language support
- 🔄 More comprehensive documentation
- 🔄 Configuration validation and wizards
- 🔄 Performance optimizations
Contributions are what make the open source community such a vibrant place! Any contributions you make are greatly appreciated.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AwesomeFeature) - Commit your changes (
git commit -m 'Add some AwesomeFeature') - Push to the branch (
git push origin feature/AwesomeFeature) - Open a Pull Request
Contributing guide coming soon.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Created by Stefanie Jane 🌠
If you find Siren useful, buy me a Monster Ultra Violet! ⚡️