Thank you for your interest in contributing to this project! This document provides guidelines and instructions for contributing.
- Node.js >= 24.0.0
- pnpm >= 11.0.0
-
Fork and clone the repository
-
Install dependencies:
pnpm install
-
Build all packages:
pnpm run build
-
Create a new branch from
main:git checkout -b feat/your-feature-name
-
Make your changes in the relevant package(s) under
packages/ -
Test your changes:
pnpm run build pnpm run lint
This project uses Conventional Commits with the following types:
feat: New featuresfix: Bug fixesdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringperf: Performance improvementstest: Adding or updating testsbuild: Build system changesci: CI/CD changeschore: Other changes that don't modify src or test filesrevert: Revert previous commits
Commit message format:
<type>(<scope>): <subject>
<body>
<footer>
Example:
feat(oxlint): add new rule for import sorting
Added eslint-plugin-import-x configuration to enforce
consistent import ordering across all projects.
Closes #123
Important:
- Keep the subject line under 50 characters
- Use imperative mood ("add" not "added")
- No period at the end of the subject
- Reference issues in the footer
For any user-facing changes, create a changeset:
pnpm run changesetFollow the prompts to:
- Select which packages are affected
- Choose the bump type (major, minor, patch)
- Write a clear summary of the changes
When to create changesets:
- New features (minor)
- Bug fixes (patch)
- Breaking changes (major)
- Documentation updates that affect package usage (patch)
Skip changesets for:
- Internal refactoring
- Test updates
- CI/CD changes
- Repository maintenance
All code must pass OXLint checks:
pnpm run lintThe pre-commit hook will automatically lint staged files.
Run cspell to check for typos:
pnpm run cspellAdd project-specific terms to .cspell.json or codebook.toml (the Codebook config), then merge both word lists:
pnpm run cspell:syncpnpm run cspell fails while the lists differ. The lists are merged, never replaced, so remove a word from both files.
Each package should have:
packages/your-package/
├── src/
│ └── index.ts # Main entry point
├── package.json # Package manifest
├── README.md # Package documentation
├── tsconfig.json # TypeScript config
└── LICENSE # MIT license
name: Must follow@mheob/<package-name>patternversion: Managed by changesetsexports: Define proper entry pointsfiles: Include only necessary files in npm packagerepository: Link to monorepolicense: MIT
Before submitting a PR:
- Build all packages:
pnpm run build - Run linting:
pnpm run lint - Run spell check:
pnpm run cspell - Test in a local project if possible
- Ensure all tests pass and code is linted
- Create a changeset if needed
- Update documentation if required
- Push your branch and create a pull request
- Fill out the PR template completely
- Link any related issues
- Wait for review and address feedback
Use conventional commit format:
feat(package-name): add new feature
- At least one maintainer approval is required
- CI checks must pass
- Kodiak bot may auto-merge approved PRs
Releases are handled by maintainers:
- Merge changesets to main
- CI creates a "Version Packages" PR
- Maintainer merges the version PR
- CI automatically publishes to npm
- Follow the existing rule structure
- Group related rules together
- Add comments for non-obvious configurations
- Test with various project types
- Maintain consistency with existing style
- Document any opinionated choices
- Consider impact on existing users
- Keep rules aligned with conventional commits spec
- Document custom scopes and types
- Check existing issues and discussions
- Review documentation in package READMEs
- Ask questions in issue comments
- Reach out to maintainers if needed
By contributing, you agree that your contributions will be licensed under the MIT License.