Thanks for your interest in contributing to Cleanuparr! This guide will help you get started with development.
Before starting any work, please let us know what you want to contribute:
- For existing issues: Comment on the issue stating you'd like to work on it
- For new features/changes: Create a new issue first and mention that you want to work on it
This helps us avoid redundant work, git conflicts, and contributions that may not align with the project's direction.
Wait for approval from the maintainers before proceeding with your contribution.
- .NET 9.0 SDK
- Node.js 18+
- Git
- (Optional) Make for database migrations
- (Optional) IDE: JetBrains Rider or Visual Studio
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/Cleanuparr.git cd Cleanuparr - Add the upstream repository:
git remote add upstream https://github.com/Cleanuparr/Cleanuparr.git
Cleanuparr uses GitHub Packages for NuGet dependencies. You'll need a PAT with read:packages permission:
- Go to GitHub Settings > Developer Settings > Personal Access Tokens > Tokens (classic)
- Click "Generate new token" → "Generate new token (classic)"
- Give it a descriptive name (e.g., "Cleanuparr NuGet Access")
- Set an expiration (recommend 90 days or longer for development)
- Select only the
read:packagesscope - Click "Generate token" and copy it
Add the Cleanuparr NuGet repository:
dotnet nuget add source \
--username YOUR_GITHUB_USERNAME \
--password YOUR_GITHUB_PAT \
--store-password-in-clear-text \
--name Cleanuparr \
https://nuget.pkg.github.com/Cleanuparr/index.jsonReplace YOUR_GITHUB_USERNAME and YOUR_GITHUB_PAT with your GitHub username and the PAT you created.
Navigate to the backend directory:
cd code/backendBuild the application:
dotnet build Cleanuparr.Api/Cleanuparr.Api.csprojRun the application:
dotnet run --project Cleanuparr.Api/Cleanuparr.Api.csprojRun tests:
dotnet testThe API will be available at http://localhost:5000
For JetBrains Rider or Visual Studio:
- Open the solution file:
code/backend/cleanuparr.sln - Set
Cleanuparr.Apias the startup project - Press
F5to start the application
Cleanuparr uses two separate database contexts: DataContext and EventsContext.
Install Make if not already installed:
- Windows: Install via Chocolatey (
choco install make) or use WSL - macOS: Install via Homebrew (
brew install make) - Linux: Usually pre-installed, or install via package manager (
apt install make,yum install make, etc.)
From the code directory:
For data migrations (DataContext):
make migrate-data name=YourMigrationNameFor events migrations (EventsContext):
make migrate-events name=YourMigrationNameExample:
make migrate-data name=AddUserPreferences
make migrate-events name=AddAuditLogEvents-
Navigate to the frontend directory:
cd code/frontend -
Install dependencies:
npm install
-
Start the development server:
npm start
The UI will be available at http://localhost:4200
-
Navigate to the docs directory:
cd docs -
Install dependencies:
npm install
-
Start the development server:
npm start
The documentation site will be available at http://localhost:3000
To build the Docker image locally for testing:
-
Navigate to the
codedirectory:cd code -
Build the image:
docker build \ --build-arg PACKAGES_USERNAME=YOUR_GITHUB_USERNAME \ --build-arg PACKAGES_PAT=YOUR_GITHUB_PAT \ -t cleanuparr:local \ -f Dockerfile .Replace
YOUR_GITHUB_USERNAMEandYOUR_GITHUB_PATwith your credentials. -
Run the container:
docker run -d \ --name cleanuparr-dev \ -p 11011:11011 \ -v /path/to/config:/config \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ cleanuparr:local
-
Access the application at http://localhost:11011
Use Docker Buildx for multi-platform builds:
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg PACKAGES_USERNAME=YOUR_GITHUB_USERNAME \
--build-arg PACKAGES_PAT=YOUR_GITHUB_PAT \
-t cleanuparr:local \
-f Dockerfile .- Follow existing conventions and Microsoft C# Coding Conventions
- Use meaningful variable and method names
- Add XML documentation comments for public APIs
- Write unit tests whenever possible
- Follow existing conventions and the Angular Style Guide
- Use TypeScript strict mode
- Write unit tests whenever possible
- Use clear, concise language
- Include code examples where appropriate
- Update relevant documentation when adding/changing features
- Check for spelling and grammar
git checkout -b feature/your-feature-name
# or
git checkout -b fix/your-bug-fix-name- Write clean, well-documented code
- Follow the code standards outlined above
- Test your changes thoroughly!
Write clear, descriptive commit messages:
git add .
git commit -m "Add feature: brief description of your changes"git fetch upstream
git rebase upstream/maingit push origin feature/your-feature-name- Go to the Cleanuparr repository
- Click "New Pull Request"
- Select your fork and branch
- Fill out the PR template with:
- A descriptive title (e.g., "Add support for Prowlarr integration" or "Fix memory leak in download client polling")
- Description of changes
- Related issue number
- Testing performed
- Screenshots (if applicable)
- Maintainers will review your PR
- Address any feedback or requested changes
- Once approved, your PR will be merged
We're always looking for testers to help validate new features before they are released. If you'd like to help test upcoming changes:
- Join our Discord community
- Let us know you're interested in testing
- We'll provide you with pre-release builds and testing instructions
Your feedback helps us catch issues early and deliver better releases.
- Discord: Join our Discord community for real-time help
- Issues: Check existing GitHub issues or create a new one
- Documentation: Review the complete documentation
By contributing to Cleanuparr, you agree that your contributions will be licensed under the same license as the project.
Thanks for contributing to Cleanuparr!