Thanks for your interest in contributing to Kaban!
# Clone the repository
git clone https://github.com/beshkenadze/kaban
cd kaban
# Install dependencies
bun install
# Build all packages
bun run build
# Run linting
bun run lint
# Run tests
bun run testpackages/
├── core/ # Database, services, schemas
├── cli/ # CLI commands and MCP server
└── tui/ # Terminal UI
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes
- Run
bun run lintandbun run test - Commit with conventional commit messages (see below)
- Push and open a Pull Request
We use Conventional Commits for automated releases. Your commit messages directly control version bumping and changelog generation.
<type>(<scope>): <description>
[optional body]
[optional footer]
| Type | Version Bump | Changelog Section | Example |
|---|---|---|---|
feat: |
Minor (0.2.0 → 0.3.0) | Features | feat: add dark mode toggle |
fix: |
Patch (0.2.0 → 0.2.1) | Bug Fixes | fix: resolve crash on startup |
perf: |
Patch | Performance | perf: optimize database queries |
deps: |
Patch | Dependencies | deps: upgrade zod to v4 |
feat!: |
Major (0.2.0 → 1.0.0) | Features | feat!: redesign API |
docs: |
No bump | Hidden | docs: update README |
chore: |
No bump | Hidden | chore: update gitignore |
refactor: |
No bump | Hidden | refactor: extract utils |
test: |
No bump | Hidden | test: add unit tests |
ci: |
No bump | Hidden | ci: fix workflow |
For breaking changes, either:
# Option 1: Add ! after type
git commit -m "feat!: remove deprecated API"
# Option 2: Add BREAKING CHANGE footer
git commit -m "feat: redesign config format
BREAKING CHANGE: config.json structure changed"Add scope for clarity:
git commit -m "feat(cli): add hook status command"
git commit -m "fix(tui): handle empty board state"
git commit -m "perf(core): optimize task queries"# Feature (bumps minor version)
git commit -m "feat: add TodoWrite sync hook for Claude Code"
# Bug fix (bumps patch version)
git commit -m "fix: resolve symlink path for npm global installs"
# Multiple changes in one commit
git commit -m "feat(hook): add conflict resolution strategies
- Add todowrite_wins, kaban_wins, most_progressed strategies
- Add configurable cancelled task policy
- Add sync logging to ~/.claude/hooks/sync.log"Releases are fully automated using release-please.
Push to main → release-please creates PR → Merge PR → Auto-publish
- Push conventional commits to
mainbranch - release-please automatically creates a "Release PR" with:
- Bumped versions in all
package.jsonfiles - Updated
CHANGELOG.mdwith your commit messages - Git tag preparation
- Bumped versions in all
- Review and merge the Release PR
- Automatic publishing:
- npm packages with OIDC provenance
- GitHub Release with notes
- Homebrew formula update
When you push feat: add dark mode, release-please creates a PR titled:
chore(main): release 0.3.0
The PR contains:
- Version bumps:
0.2.0→0.3.0in all packages - CHANGELOG.md update with "Features" section
- Ready to merge
For urgent releases outside the normal flow:
- Go to Actions → Manual Release
- Click Run workflow
- Enter version (e.g.,
0.3.1) - Optionally skip tests
- Click Run
All packages maintain the same version:
@kaban-board/core@kaban-board/cli@kaban-board/tui
- TypeScript strict mode
- Biome for linting and formatting
- No
anytypes - Run
bun run checkbefore committing
# Run all tests
bun run test
# Run specific package tests
cd packages/cli && bun test
cd packages/core && bun test
# Type checking
bun run typecheckOpen an issue for questions or discussions.