Thanks for your interest in contributing to Trellis! This document provides guidelines for contributing to the project.
Before creating a bug report, please check existing issues to avoid duplicates.
When reporting a bug, include:
- Trellis version (
trellis --version) - Node.js version (
node --version) - Operating system
- Steps to reproduce
- Expected vs actual behavior
- Relevant logs or screenshots
Feature requests are welcome! Please open an issue with:
- Clear description of the feature
- Use case / problem it solves
- Any implementation ideas (optional)
Documentation improvements are always appreciated:
- Fix typos or unclear explanations
- Add examples
- Improve README or guide docs
Code contributions are welcome for:
- Bug fixes
- New features (please discuss in an issue first)
- Performance improvements
- Test coverage
- Node.js 18.0.0+
- pnpm
- Python 3 (for hooks)
- Bash (for scripts)
-
Fork the repository on GitHub
-
Clone your fork
git clone https://github.com/YOUR_USERNAME/Trellis.git cd Trellis -
Install dependencies
pnpm install
-
Build the project
pnpm build
pnpm lint # ESLint for TypeScript
pnpm lint:py # Type checking for Python (basedpyright)
pnpm lint:all # Run both
pnpm typecheck # TypeScript type checkingNote: Pre-commit hooks will automatically run
eslint --fixandprettier --writeon staged.tsfiles.
Trellis/
├── src/ # TypeScript source code
│ ├── cli/ # CLI entry point
│ ├── commands/ # CLI commands (init, update)
│ ├── configurators/ # Template application logic
│ ├── templates/ # Templates copied to user projects ←
│ └── utils/ # Utility functions
├── .claude/ # Claude Code config (project's own) ←
│ ├── agents/ # Agent definitions
│ ├── commands/ # Slash commands
│ └── hooks/ # Python hook scripts
├── .trellis/ # Trellis workflow (project's own) ←
│ ├── scripts/ # Bash scripts
│ └── spec/ # Spec file templates
└── docs/ # Documentation
Important: When modifying
.claude/,.trellis/, or.cursor/, check if the same changes need to be applied tosrc/templates/. The project uses its own config files, but templates are what gets installed to user projects.
We use Conventional Commits:
type(scope): description
Types:
feat- New featurefix- Bug fixdocs- Documentation changesrefactor- Code refactoringtest- Adding or updating testschore- Maintenance tasks
Examples:
feat(cli): add --dry-run flag to init command
fix(hooks): resolve context injection for nested tasks
docs(readme): update quick start instructions
-
Create a branch from
maingit checkout -b feat/your-feature-name
-
Make your changes and commit following the commit guidelines
-
Ensure quality checks pass
pnpm lint && pnpm typecheck -
Push to your fork
git push origin feat/your-feature-name
-
Open a Pull Request against
mainbranch- Provide a clear description of changes
- Reference any related issues
- Include screenshots for UI changes
-
Address review feedback if requested
Every contribution helps make Trellis better. We appreciate your time and effort!