Enhanced project initialization tool built on top of `uv`. Shinobi helps you set up Python projects with best practices and common tools pre-configured.
Right now the only way to install shinobi is through pip. Soon we will make it available through installer / brew
# Install Shinobi
pip install shinobi Shinobi provides a simple CLI interface for initializing new Python projects:
# Show help
shinobi
# Initialize a new project
shinobi init
# Show help for init command
shinobi init --helpWhen you run shinobi init, you'll be guided through an interactive setup process that includes:
- Project name and description
- GitHub repository details (optional)
- Python version selection
- IDE preference (VS Code or Cursor)
- Additional features:
- GitHub Actions workflows
- Pre-commit hooks with Ruff
- Modern Python project structure with
srclayout - Built-in testing with pytest
- Optimized Python
.gitignorefrom Toptal - MIT License template
- Interactive project configuration with questionary
- Fast and reliable dependency management with
uv - Development dependencies group for testing and linting
- Pre-commit hooks for automated checks
- Pytest setup with comprehensive configuration
- Test directory structure with example tests
- Pre-configured test discovery and execution
- Ruff for lightning-fast linting and formatting
- Pre-commit hooks for automated code quality checks
- GitHub Actions workflows for CI/CD
- VS Code configuration with Ruff integration
- Cursor IDE rules for UV usage
- Editor-agnostic project structure
- GitHub Actions workflows for:
- Automated linting with Ruff
- Automated testing with pytest
- Pre-commit hooks for:
- Ruff linting
- Ruff formatting
project_name/
├── src/ # Source code directory
│ └── main.py # Main application code
├── tests/ # Test directory
│ └── __init__.py
│ └── test_main.py # Example test file
├── .github/ # GitHub Actions workflows
│ └── workflows/ # CI/CD workflows
├── .vscode/ # VS Code settings
├── .cursor/ # Cursor rules
├── .pre-commit-config.yaml
├── pyproject.toml # Project configuration
└── README.md
uv run pytestThis project uses Ruff for linting and formatting. To run the checks:
# Lint
uv run ruff check
# Format
uv run ruff formatAlways use uv for package management:
# Add a new dependency
uv add package_name
# Add a development dependency
uv add --dev package_name
# Update dependencies from requirements
uv syncAlways use uv run to execute Python files:
uv run file.py