Contributing to bunqueue: Development & PR Guide
project · contributing
Contribute to bunqueue, ship a PR.
Dev environment setup, coding standards, testing guidelines and the pull request workflow. Everything you need to land a change, whatever your experience level.
Code of Conduct
Section titled “Code of Conduct”Be respectful and inclusive. We welcome contributors of all backgrounds and experience levels.
Getting Started
Section titled “Getting Started”Prerequisites
Section titled “Prerequisites”- Bun v1.3.9+
- Git
- A GitHub account
# Fork the repo on GitHub, then:git clone https://github.com/YOUR_USERNAME/bunqueue.gitcd bunqueuebun installRunning Tests
Section titled “Running Tests”There are three suites. All three must pass before any change lands:
# Unit tests (~5000 tests)bun test
# TCP integration tests (~50 suites, spawns a real server)bun scripts/tcp/run-all-tests.ts
# Embedded integration tests (~35 suites)bun scripts/embedded/run-all-tests.tsOther useful invocations:
# Run a specific test filebun test test/queueManager.test.ts
# Run with coveragebun test --coverageNote: bun test preloads test/preload.ts, which sets BUNQUEUE_EMBEDDED=1. Tests that need real TCP behavior must opt out with an explicit embedded: false and spawn a server.
Code Style
Section titled “Code Style”We use Biome (one tool for linting + formatting):
# Lintbun run lint
# Format codebun run format
# Lint + format check in one pass (what CI / the pre-commit hook run)bun run check:biomeMaking Changes
Section titled “Making Changes”Branch Naming
Section titled “Branch Naming”feat/description- New featuresfix/description- Bug fixesdocs/description- Documentationrefactor/description- Code refactoringtest/description- Test additions
Commit Messages
Section titled “Commit Messages”Follow Conventional Commits:
feat: add stall detection for workersfix: resolve memory leak in event listenersdocs: update API referencerefactor: simplify batch operationstest: add DLQ filtering testsPull Request Process
Section titled “Pull Request Process”- Create a feature branch
- Make your changes
- Add/update tests
- Update documentation
- Run all three test suites (
bun test,bun scripts/tcp/run-all-tests.ts,bun scripts/embedded/run-all-tests.ts) andbun run check:biome - Push and create a PR
PR Template
Section titled “PR Template”## DescriptionBrief description of changes
## Type of Change- [ ] Bug fix- [ ] New feature- [ ] Breaking change- [ ] Documentation
## TestingHow was this tested?
## Checklist- [ ] Tests pass- [ ] Linting passes- [ ] Documentation updatedProject Structure
Section titled “Project Structure”src/├── cli/ # CLI commands├── client/ # Embedded client SDK├── domain/ # Core business logic├── application/ # Use cases├── infrastructure/ # External services└── shared/ # UtilitiesKey Files
Section titled “Key Files”src/domain/queue/shard.ts- Queue sharding logicsrc/application/queueManager.ts- Central coordinatorsrc/client/queue/queue.ts- Client Queue classsrc/client/worker/worker.ts- Client Worker class
Architecture Guidelines
Section titled “Architecture Guidelines”File Size
Section titled “File Size”- Max 300 lines per file
- Split if larger
Lock Order
Section titled “Lock Order”jobIndexcompletedJobsshards[N]processingShards[N]
Memory Management
Section titled “Memory Management”- Use bounded collections
- Clean up event listeners
- Release resources in shutdown
Testing Guidelines
Section titled “Testing Guidelines”Test Structure
Section titled “Test Structure”describe('Feature', () => { beforeEach(() => { // Setup });
afterEach(() => { // Cleanup });
it('should do something', () => { // Test });});What to Test
Section titled “What to Test”- Happy path
- Edge cases
- Error handling
- Concurrent operations
Documentation
Section titled “Documentation”Code Comments
Section titled “Code Comments”/** Brief description */function simpleFunction() {}
/** * Longer description for complex functions * @param input - Description * @returns Description */function complexFunction(input: string): Result {}README Updates
Section titled “README Updates”Update README.md for:
- New features
- Changed APIs
- New environment variables
Release Process
Section titled “Release Process”Releases are handled by the maintainer. Every release:
- Bumps the patch version in
package.json - Updates the changelog (
docs/src/content/docs/changelog.md) - Publishes to npm with
bun publish
Getting Help
Section titled “Getting Help”Recognition
Section titled “Recognition”Contributors are listed in:
- GitHub contributors page
- README.md acknowledgments
Thank you for contributing!