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-lint
git clone https://github.com/hyperb1iss/siren
cd siren
cargo build --release
brew 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=error
Siren 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! โก๏ธ