We welcome contributions! Here's how you can help make Aargon UI better for everyone.
- 🐛 Report bugs - Found a bug? Open an issue
- 💡 Suggest features - Have an idea? We'd love to hear it
- 📝 Improve documentation - Help others understand the components
- 🔧 Fix issues - Pick up an issue and submit a PR
- 🎨 Create components - Add new animated components
- 🧪 Write tests - Help improve code quality
# Fork on GitHub, then clone your fork
git clone https://github.com/aargon007/aargon-ui.git
cd aargon-ui# Install dependencies
yarn install
# Start development (recommended - uses source files)
yarn dev:source
# Or start with package builds
yarn dev:allgit checkout -b feature/amazing-feature
# or
git checkout -b fix/bug-fixThis is a Turbo monorepo with individual packages. Each package can be developed and published independently.
- Node.js 18+
- Yarn 1.22.22+
- React Native 0.81.4
- Expo ~54.0.10
- React Native Reanimated 4.1.0+
# Clone the repository
git clone https://github.com/aargon007/aargon-ui.git
cd aargon-ui
# Install dependencies
yarn install
# Build all packages
yarn build
# Run example app (source mode - no build needed)
yarn dev:source
# Run example app (with package builds)
yarn dev:all
# Develop a specific package
yarn dev --filter=aargon-buttonyarn dev:source- Uses TypeScript source files directly
- Instant hot reload
- No compilation step needed
- Fastest development experience
yarn dev:all- Compiles packages to JavaScript
- Tests production-like behavior
- Slower but more accurate
Each package follows this structure:
packages/aargon-[component]/
├── src/
│ ├── Animated[Component].tsx # Main component
│ ├── index.ts # Exports
│ └── utils.ts # Utilities and types
├── lib/ # Compiled output
├── package.json # Package configuration
├── tsconfig.json # TypeScript config
├── README.md # Package documentation
├── CHANGELOG.md # Version history
└── LICENSE # MIT License
# Development
yarn dev:source # Run example with source files
yarn dev:all # Run example with built packages
yarn dev:packages # Build packages in watch mode
yarn dev:example # Run example only
# Building
yarn build # Build all packages
yarn build:watch # Build packages in watch mode
# Publishing
yarn publish:packages # Publish all packages
yarn release # Build and publish
# Utilities
yarn lint # Lint all packages
yarn type-check # Type check all packages
yarn clean # Clean all build outputs- Use TypeScript for all new code
- Follow React Native best practices
- Use functional components with hooks
- Follow conventional commits for commit messages
- Accessibility first - Include ARIA attributes and keyboard support
- Customizable - Provide theming and styling options
- Performant - Use Reanimated for smooth 60fps animations
- TypeScript - Full type safety with comprehensive interfaces
- Documented - Include JSDoc comments and examples
Each package follows this structure:
packages/aargon-[component]/
├── src/
│ ├── Animated[Component].tsx # Main component (PascalCase)
│ ├── index.ts # Exports
│ └── utils.ts # Types, utilities, themes
├── lib/ # Compiled output
├── package.json # Package configuration
├── tsconfig.json # TypeScript config
├── README.md # Package documentation
├── CHANGELOG.md # Version history
└── LICENSE # MIT License
We use Conventional Commits:
# Features
git commit -m "feat(accordion): add new animation type"
# Bug fixes
git commit -m "fix(button): resolve touch event issue"
# Documentation
git commit -m "docs(readme): update installation guide"
# Breaking changes
git commit -m "feat(modal): change API for better UX
BREAKING CHANGE: onClose prop is now required"- Update documentation if needed
- Add tests for new features
- Update CHANGELOG.md with your changes
- Ensure all checks pass (linting, type checking, builds)
- Test on multiple platforms (iOS, Android, Web)
When creating a PR, please include:
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [ ] Tested on iOS
- [ ] Tested on Android
- [ ] Tested on Web
- [ ] Added unit tests
## Checklist
- [ ] Code follows style guidelines
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] CHANGELOG updated
- [ ] No breaking changes (or breaking changes documented)- Automated checks must pass
- Code review by maintainers
- Testing on multiple platforms
- Documentation review
- Approval and merge
When reporting bugs, please include:
- React Native version
- Package version
- Platform (iOS/Android/Web)
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots if applicable
- Code sample that reproduces the issue
For new features, please include:
- Use case - Why is this needed?
- Proposed API - How should it work?
- Alternatives - What else have you considered?
- Additional context - Any other relevant information
- Choose a component from the packages list
- Check existing issues for related work
- Create a branch for your changes
- Make your changes following the guidelines
- Test thoroughly on all platforms
- Update documentation as needed
- Submit a PR with a clear description
- Create the package structure following the template
- Implement the component with full TypeScript support
- Add comprehensive documentation (README, API docs)
- Include examples in the example app
- Add to the main README packages list
- Update CHANGELOG with new component
- Update unified package (
packages/aargon-ui) to include the new component - Test both individual and unified package installations
- Unit tests for component logic
- Integration tests for component interactions
- Visual tests for animations and styling
- Accessibility tests for screen readers and keyboard navigation
- Cross-platform testing on iOS, Android, and Web
We are committed to providing a welcoming and inspiring community for all. Please read and follow our Code of Conduct.
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Gracefully accept constructive criticism
- Focus on what is best for the community
- Show empathy towards other community members
- Harassment, trolling, or discriminatory language
- Personal attacks or political discussions
- Public or private harassment
- Publishing others' private information without permission
- Other conduct which could reasonably be considered inappropriate
We follow Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for backwards-compatible functionality
- PATCH version for backwards-compatible bug fixes
- BETA versions for pre-release testing (e.g.,
1.0.0-beta.1)
- Create changeset with
yarn changeset - Version packages with
yarn version-packages - Publish packages with
yarn release - Update documentation if needed
- Create release notes on GitHub
The unified aargon-ui package is published separately and includes all individual components:
-
Build the unified package:
cd packages/aargon-ui npm run build -
Update version in
packages/aargon-ui/package.json:{ "version": "1.0.0-beta.X" } -
Publish beta version:
npm publish --tag beta
-
Update documentation to reflect new beta version
- Beta versions are for testing and feedback
- Breaking changes are allowed between beta versions
- Documentation should clearly indicate beta status
- Feedback should be collected and addressed before stable release
- Package READMEs - Individual component documentation
- API Reference - Comprehensive prop and type documentation
- Examples - Live examples in the example app
- Changelog - Version history and breaking changes
- GitHub Issues - Bug reports and feature requests
- GitHub Discussions - General questions and discussions
- Discord - Real-time chat and support (coming soon)
- @aargon007 - Project maintainer
- @contributors - Community contributors
All contributors are recognized in:
- README.md - Contributors section
- CHANGELOG.md - Individual contributions
- GitHub - Contributor graphs and profiles
Special recognition for:
- Major contributors - Significant code contributions
- Documentation heroes - Documentation improvements
- Bug hunters - Critical bug reports and fixes
- Community champions - Helping other contributors
By contributing to Aargon UI, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Aargon UI! 🎉
Made with ❤️ by Aargon and contributors