Thank you for your interest in contributing to Pushduck! We welcome contributions from the community and are excited to work with you.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Pull Request Process
- Coding Standards
- Testing
- Documentation
- Release Process
- Getting Help
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to maintainers.
Before contributing, please read our Philosophy & Scope to understand what Pushduck does (and doesn't do). This will help ensure your contribution aligns with the project's goals.
- Node.js 18+ and pnpm 9+
- Git for version control
- AWS Account or compatible S3 service for testing
- TypeScript knowledge (helpful but not required)
-
Fork the repository on GitHub
-
Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/pushduck.git cd pushduck -
Install dependencies:
pnpm install
-
Set up environment variables:
cp examples/enhanced-demo/env.example examples/enhanced-demo/.env.local # Edit the .env.local file with your S3 credentials -
Run the development server:
pnpm dev
pushduck/
├── packages/
│ ├── pushduck/ # Main library package
│ ├── cli/ # CLI tool for setup
│ └── ui/ # UI components (optional)
├── examples/
│ └── enhanced-demo/ # Complete demo application
├── docs/ # Documentation site
├── scripts/ # Release and maintenance scripts
└── .github/ # GitHub workflows and templates
# Development
pnpm dev # Start development servers
pnpm build # Build all packages
pnpm test # Run test suite
pnpm lint # Lint code
pnpm type-check # TypeScript type checking
# Release (maintainers only)
pnpm release:prepare # Prepare a new release
pnpm release:publish # Publish the release
pnpm release:status # Check release status
# Maintenance
pnpm clean # Clean build artifacts
pnpm format # Format code with Prettier- Check existing issues to avoid duplicates
- Use the bug report template when creating new issues
- Include reproduction steps and environment details
- Add relevant labels (bug, needs-triage, etc.)
- Check the roadmap and existing feature requests
- Use the feature request template
- Explain the use case and expected behavior
- Consider implementation complexity
-
Pick an issue (good first issues are labeled)
-
Comment on the issue to claim it
-
Create a branch from
main:git checkout -b feature/your-feature-name
-
Make your changes following our coding standards
-
Test your changes thoroughly
-
Submit a pull request
- Tests pass:
pnpm test - Linting passes:
pnpm lint - Types are correct:
pnpm type-check - Build succeeds:
pnpm build - Documentation updated (if needed)
Use our pull request template and include:
- Clear description of changes
- Issue reference (fixes #123)
- Testing instructions
- Breaking changes (if any)
- Screenshots (for UI changes)
- Automated checks must pass (CI/CD)
- Code review by maintainers
- Testing in demo environment
- Approval and merge
- Strict mode enabled - no
anytypes - Proper type exports for public APIs
- JSDoc comments for public functions
- Generic constraints where appropriate
We use Prettier and ESLint for consistent formatting:
# Auto-format code
pnpm format
# Check linting
pnpm lint
# Fix auto-fixable issues
pnpm lint --fix- Files:
kebab-case.ts - Functions:
camelCase - Types:
PascalCase - Constants:
SCREAMING_SNAKE_CASE - Components:
PascalCase
We follow Conventional Commits specification:
# Format: <type>(<scope>): <subject>
feat(client): add progress tracking for uploads
fix(server): handle edge case in presigned URL generation
docs(readme): update installation instructions
test(upload): add integration tests for S3 clientTypes:
feat: New featurefix: Bug fixdocs: Documentation changestest: Adding or updating testsrefactor: Code refactoringperf: Performance improvementschore: Maintenance tasks
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests with coverage
pnpm test:coverage- Unit tests for utilities and core functions
- Integration tests for S3 operations
- E2E tests for critical user flows
- Mock external dependencies (AWS SDK, etc.)
// packages/pushduck/src/__tests__/client.test.ts
import { describe, it, expect, vi } from 'vitest';
import { createS3Client } from '../client';
describe('createS3Client', () => {
it('should create S3 client with correct configuration', () => {
// Test implementation
});
});- API Documentation - JSDoc comments in code
- User Guides - In
/docsdirectory - Examples - Working code in
/examples - README - Project overview and quick start
- Clear examples for all public APIs
- TypeScript code blocks with proper syntax highlighting
- Step-by-step guides for complex setups
- Troubleshooting sections for common issues
# Start documentation development server
pnpm docs
# Build documentation for production
pnpm build:docsNote: Only maintainers can create releases
-
Enhanced CLI (Recommended):
pnpm release:prepare # Interactive setup pnpm release:publish # Create GitHub release
-
GitHub UI: Create releases directly on GitHub
-
Manual Dispatch: Trigger via GitHub Actions
We follow Semantic Versioning (SemVer):
- Patch (0.1.1): Bug fixes, documentation updates
- Minor (0.2.0): New features, backward compatible
- Major (1.0.0): Breaking changes
- All tests passing
- Documentation updated
- Examples working
- CHANGELOG.md updated
- Version bumped correctly
- GitHub release created
- NPM packages published
- GitHub Discussions: Ask questions and share ideas
- GitHub Issues: Report bugs and request features
- Discord: Join our community chat (coming soon)
- Email: abhayramesh@duck.com
- GitHub: @abhay-ramesh
- Twitter: @abhayramesh
- Critical bugs: 24-48 hours
- Feature requests: 1-2 weeks
- General questions: 2-5 days
Contributors are recognized in:
- README.md contributors section
- GitHub releases changelog
- Documentation acknowledgments
- Social media shout-outs
By contributing to Pushduck, you agree that your contributions will be licensed under the MIT License.
Your contributions help make Pushduck better for everyone. Whether you're fixing bugs, adding features, improving documentation, or helping other users, every contribution matters.
Thank you for contributing!