Thank you for your interest in contributing to Tuvix! We welcome contributions from the community.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Coding Standards
- Commit Messages
- Pull Request Process
- Testing
- Documentation
- Getting Help
This project adheres to a Code of Conduct. By participating, you are expected to uphold this code. Please read CODE_OF_CONDUCT.md before contributing.
- Fork the repository on GitHub
- Clone your fork locally
- Create a branch for your changes
- Make your changes and test them
- Submit a pull request
- Node.js 20+ with pnpm
- SQLite3
# Clone your fork
git clone https://github.com/YOUR_USERNAME/Tuvix-RSS.git
cd Tuvix-RSS
# Install dependencies
pnpm install
# Copy environment file
cp env.example .env
# Edit .env and set BETTER_AUTH_SECRET
# Generate with: openssl rand -base64 32
# Run database migrations
pnpm run db:migrate
# Start development servers
pnpm run devVisit:
- App: http://localhost:5173
- API: http://localhost:3001
Tuvix-RSS/
├── packages/
│ ├── api/ # Backend (tRPC, Node.js/Cloudflare Workers)
│ └── app/ # Frontend (React, Vite)
├── docs/ # Documentation
└── .github/ # GitHub workflows and templates
See Project Integration Guide for detailed architecture.
Use the Bug Report template to report bugs. Include:
- Clear description of the issue
- Steps to reproduce
- Expected vs actual behavior
- Environment details
Use the Feature Request template to suggest features. Include:
- Clear description of the feature
- Use case and benefits
- Possible implementation approach
Use the Question template for general questions or support.
- Use TypeScript for all code
- Avoid
anytypes - use proper typing - Use interfaces for objects, types for unions
- Enable strict mode
We use ESLint and Prettier for code formatting:
# Lint code
pnpm run lint
# Format code
pnpm run format- Keep it simple: Don't over-engineer solutions
- Type safety: Leverage TypeScript's type system
- Small PRs: Break large changes into smaller, focused PRs
- Test your changes: Add tests for new features
- Document: Update docs for significant changes
We follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Test changeschore: Build process, dependencies, etc.
api: Backend changesapp: Frontend changesdb: Database changesdocs: Documentationci: CI/CD changes
feat(app): add dark mode toggle to settings
fix(api): resolve article polling rate limit issue
docs: update deployment guide for Cloudflare
chore(deps): update dependencies
- Branch from
main: Always create your feature branch frommain
git checkout main
git pull origin main
git checkout -b feature/your-feature-name-
Make your changes: Follow coding standards and add tests
-
Test locally: Ensure all tests pass
pnpm run test
pnpm run type-check
pnpm run lint-
Commit your changes: Use conventional commit messages
-
Push to your fork:
git push origin feature/your-feature-name-
Open a Pull Request: Target the
mainbranch -
Fill out the PR template: Provide clear description and context
-
Wait for review: Maintainers will review and may request changes
-
Address feedback: Make requested changes and push updates
-
Merge: Once approved, a maintainer will merge your PR
- Must target
mainbranch - All tests must pass
- No TypeScript errors
- Code follows style guidelines
- Documentation updated (if needed)
- Clear description of changes
# Run all tests
pnpm run test
# Run tests for specific package
pnpm --filter @tuvix/api test
pnpm --filter @tuvix/app test
# Run tests in watch mode
pnpm run test:watch- Write tests for new features
- Update tests when modifying existing code
- Use descriptive test names
- Test edge cases and error conditions
Update documentation when:
- Adding new features
- Changing API behavior
- Modifying configuration
- Adding new environment variables
- Changing deployment process
- README.md: High-level project info, quick start
- docs/: Detailed guides and reference docs
- Code comments: Complex logic, non-obvious behavior
- API docs: tRPC procedures, types, endpoints
- Documentation: Check docs/ for detailed guides
- Issues: Search existing issues or create a new one
- Discussions: Use GitHub Discussions for general questions
- Discord: Join our community Discord (link in README)
# Development
pnpm dev # Start both API and app
pnpm dev:api # Start API only
pnpm dev:app # Start app only
# Building
pnpm build # Build both packages
pnpm build:api # Build API only
pnpm build:app # Build app only
# Testing
pnpm test # Run all tests
pnpm test:watch # Run tests in watch mode
pnpm type-check # Check TypeScript types
# Code Quality
pnpm lint # Lint code
pnpm format # Format code
# Database
pnpm db:generate # Generate migration from schema changes
pnpm db:migrate # Run migrationsBy contributing to Tuvix, you agree that your contributions will be licensed under the AGPLv3 license. See LICENSE for details.
Thank you for contributing to Tuvix! Your efforts help make RSS better for everyone.