Before You Start
Read the Community Guidelines
Review the community standards and code of conduct.
Check Existing Issues
Browse GitHub Issues to see if your bug or feature is already reported.
Discuss Major Changes
For significant features or architectural changes, open a discussion or issue first to get feedback before investing time in development.
New to contributing? Check out the Jellyfin contribution guide to find where you can help.
Development Setup
Before contributing, set up your development environment:Fork the Repository
- Go to github.com/jellyfin/jellyfin
- Click Fork in the top right
- Clone your fork:
Set Up Development Environment
Follow the Building from Source guide to install prerequisites and build the project.
Development Workflow
Create a Feature Branch
Create a new branch for your work:Branch naming conventions:
feature/description- New featuresfix/description- Bug fixesrefactor/description- Code refactoringdocs/description- Documentation changes
Make Your Changes
Write your code following the coding standards below.
Write Tests
Add or update tests for your changes:
- Unit tests in
tests/directory - Follow existing test patterns
- Aim for good code coverage
Commit Your Changes
Submitting a Pull Request
Create Pull Request
- Go to your fork on GitHub
- Click Pull Request
- Select your branch and the
masterbranch of jellyfin/jellyfin - Fill out the PR template
Write a Clear Description
Your PR description should:
- Explain what changes you made
- Explain why these changes were necessary
- Reference any related issues (e.g., “Fixes #1234”)
- Describe how to test the changes
- Note any breaking changes
Respond to Review Feedback
- Address reviewer comments promptly
- Make requested changes in new commits
- Don’t force-push after review starts (squashing happens at merge)
- Ask questions if feedback is unclear
Pull Request Template
Jellyfin uses a PR template (see.github/pull_request_template.md):
Coding Standards
Jellyfin follows strict coding standards enforced by analyzers:C# Style Guidelines
Use Modern C# Features
- Use nullable reference types (
#nullable enable) - Use pattern matching where appropriate
- Use expression-bodied members for simple properties/methods
- Use
varfor obvious types
Follow .NET Conventions
- PascalCase for public members
- camelCase for private fields (with
_prefix) - Use meaningful, descriptive names
- Avoid abbreviations
Add XML Documentation
Document public APIs:
Use Code Analyzers
The project uses multiple analyzers:
- StyleCop (style rules)
- SerilogAnalyzer (logging)
- IDisposableAnalyzers (resource management)
- MultithreadingAnalyzer (concurrency)
EditorConfig
Jellyfin includes an.editorconfig file that defines formatting rules. Ensure your editor/IDE respects these settings:
Key Rules
Dependency Injection
Jellyfin uses dependency injection extensively:Good Example
Async/Await
Use async/await correctly:Exception Handling
Commit Message Guidelines
Write clear, descriptive commit messages following these rules:Format
Rules
Use Imperative Mood
Write as if giving a command:
- ✅ “Fix bug in user authentication”
- ❌ “Fixed bug in user authentication”
- ❌ “Fixes bug in user authentication”
Examples
Read How to Write a Git Commit Message for more detailed guidance.
Testing Guidelines
All code changes should include appropriate tests:Unit Tests
Write unit tests in the corresponding test project:tests/Jellyfin.Api.Tests/Controllers/SystemControllerTests.cs
Integration Tests
For API endpoint tests, use the integration test project:Test Structure
Follow the Arrange-Act-Assert pattern:Code Review Process
All pull requests go through code review:Automated Checks
- CI builds and tests your code
- Code analyzers check style and quality
- All checks must pass
Maintainer Review
- At least one maintainer reviews your code
- They may request changes or ask questions
- Address feedback in new commits
What Reviewers Look For
Code Quality
- Follows coding standards
- Well-structured and maintainable
- Proper error handling
- No code smells
Functionality
- Solves the stated problem
- No breaking changes (unless justified)
- Edge cases handled
- Performance considerations
Testing
- Adequate test coverage
- Tests actually verify functionality
- Integration tests for new features
Documentation
- XML docs for public APIs
- Clear commit messages
- Updated documentation if needed
Common Pitfalls to Avoid
Getting Help
If you need help contributing:Matrix Chat
Join the community chat for real-time help
GitHub Discussions
Ask questions and discuss ideas
Contributing Docs
Read the full contributing documentation
Issue Tracker
Report bugs and track feature requests
Recognition
Your contributions are valued! Contributors are:- Listed in the CONTRIBUTORS.md file
- Mentioned in release notes
- Part of the Jellyfin community
Check out the Jellyfin Contributor Graph to see all contributors.
Additional Resources
Building from Source
Set up your development environment
API Overview
Learn about the Jellyfin API architecture
Plugin Development
Extend Jellyfin with plugins
Feature Requests
Vote on and suggest new features