Thank you for your interest in contributing to Statekit! This document provides guidelines and information for contributors.
Before creating a bug report, please check existing issues to avoid duplicates. When creating a bug report, include:
- A clear, descriptive title
- Steps to reproduce the behavior
- Expected behavior
- Actual behavior
- Go version and OS
- Minimal code example that demonstrates the issue
Feature requests are welcome! Please:
- Check if the feature aligns with our scope constraints
- Describe the use case and expected behavior
- Explain why existing features don't address your need
- Fork the repository and create your branch from
main - Write tests for any new functionality
- Follow the coding style (run
go fmtandgo vet) - Update documentation if needed
- Write clear commit messages following Conventional Commits
- Go 1.21 or later
- Git
# Clone your fork
git clone https://github.com/YOUR_USERNAME/statekit.git
cd statekit
# Run tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Format code
go fmt ./...
# Run linter
go vet ./...- Follow standard Go conventions
- Use
go fmtfor formatting - Use
go vetfor static analysis - Keep functions focused and small
- Write descriptive variable and function names
- Write table-driven tests where appropriate
- Test both success and error cases
- Use meaningful test names that describe behavior
- Aim for high coverage on critical paths
Follow Conventional Commits:
feat: add new feature
fix: resolve bug in interpreter
docs: update README examples
test: add tests for hierarchical states
refactor: simplify transition resolution
- Update README.md for user-facing changes
- Update CLAUDE.md for architectural changes
- Add godoc comments for exported types and functions
statekit/
├── types.go # Public types
├── builder.go # Fluent builder API
├── interpreter.go # Runtime execution
├── internal/ir/ # Internal representation
├── export/ # XState exporter
├── examples/ # Usage examples
└── docs/ # Documentation
- All PRs require at least one review
- CI must pass (tests, linting)
- Changes must include appropriate tests
- Documentation must be updated if needed
Releases are managed using Relicta. The maintainers will handle versioning and releases.
Feel free to open an issue for any questions about contributing.
Thank you for contributing!