diff --git a/.github/upgrades/scenarios/new-dotnet-version_02bc64/Risk Management Strategies.md b/.github/upgrades/scenarios/new-dotnet-version_02bc64/Risk Management Strategies.md new file mode 100644 index 00000000..68b6997b --- /dev/null +++ b/.github/upgrades/scenarios/new-dotnet-version_02bc64/Risk Management Strategies.md @@ -0,0 +1,393 @@ +# Risk Management Strategies for .NET 11.0 Preview Migration + +Based on the comprehensive plan I created, here's a detailed explanation of the risk management strategies: + +--- + +## 🎯 Overall Risk Philosophy + +The migration employs a **defense-in-depth** approach with **three layers of protection**: + +1. **Preventive Controls** - Stop problems before they occur (bottom-up strategy, tier ordering) +2. **Detective Controls** - Identify problems early (extensive testing at each tier) +3. **Corrective Controls** - Fix or rollback when problems occur (contingency plans, git rollback) + +--- + +## πŸ“Š Risk Classification System + +### Four-Tier Risk Model + +| Risk Level | Impact Scope | Mitigation Priority | Example | +|------------|--------------|---------------------|---------| +| **CRITICAL** | Entire solution | Highest | .NET 11.0 preview instability, Database providers | +| **HIGH** | Multiple projects | High | SkiaSharp native interop, Main application | +| **MEDIUM** | Single/few projects | Medium | API compatibility, Networking | +| **LOW** | Limited scope | Standard | Test projects, Utility libraries | + +--- + +## 🚨 Critical Risk Management + +### Risk #1: .NET 11.0 Preview Framework Instability + +**Why Critical**: Affects entire solution; preview = not production-ready + +**Mitigation Strategies**: + +1. **Early Detection** (Bottom-Up Strategy) + - Tier 2 is the **canary tier** - first to use .NET 11.0 + - Issues discovered in Tier 2 affect only 3 projects, not 40 + - Can assess viability before committing entire solution + +2. **Progressive Exposure** + - Each tier tests more functionality + - Build confidence incrementally + - Learn .NET 11.0 behavior patterns early + +3. **Pause Points** + - After Tier 2: Assess preview framework stability + - After Tier 6: Database providers validated (critical milestone) + - After Tier 11: Application functional + +4. **Rollback Capability** + - Git branch isolation (`upgrade-to-NET11`) + - Can revert entire migration with single git operation + - Alternative target ready (.NET 10.0 LTS) + +5. **Monitoring** + - Track .NET 11.0 preview announcements + - Monitor GitHub issues for known problems + - Stay connected with .NET community + +**Decision Triggers**: +- βœ… **Continue** if Tier 2 succeeds with acceptable issues +- ⚠️ **Pause** if critical bugs discovered +- πŸ›‘ **Abort** if blocking issues with no workaround + +--- + +### Risk #2: Database Provider Compatibility (Tier 6) + +**Why Critical**: All data access depends on these; application unusable if broken + +**Mitigation Strategies**: + +1. **Dedicated Tier** (Tier 6) + - Isolated focus on database providers only + - No mixing with other concerns + - Full attention on validation + +2. **Extensive Testing Regime** +``` +βœ“ Connection tests (pooling, SSL, timeouts) +βœ“ Migration tests (existing migrations, upgrades) +βœ“ CRUD tests (all operations) +βœ“ Query translation tests (LINQ to SQL) +βœ“ Transaction tests (commit, rollback) +βœ“ Performance tests (baseline comparison) +βœ“ Concurrency tests (locking, isolation) +βœ“ Edge case tests (nulls, large datasets, errors) +``` + +3. **Dual Provider Validation** + - Test both PostgreSQL AND SQLite + - Ensure both work independently + - Validate switching between providers + - Real-world scenario testing + +4. **Performance Baseline** + - Document .NET 9.0 query performance + - Compare .NET 11.0 against baseline + - Acceptable: <10% regression + - Red flag: >20% regression (investigate or pause) + +5. **GO/NO-GO Decision Point** + - **Tier 6 is the primary gate** + - Must pass ALL criteria before proceeding + - If fails: entire migration may pause + - Options: + - Report to Npgsql/EF Core teams + - Wait for provider fixes + - Implement workarounds (if feasible) + - Switch to .NET 10.0 LTS + +**Why This Works**: +- Catches database issues before 90% of codebase migrated +- Business logic (Tiers 8+) depends on stable database layer +- Prevents cascading failures up the stack + +--- + +## 🎯 High Risk Management + +### Risk #3: Media Processing (SkiaSharp) - Tier 8 + +**Challenge**: Native library interop may break with .NET 11.0 + +**Mitigation**: + +1. **Native Library Verification** + - Test library loading explicitly + - Verify cross-platform compatibility (Linux primary) + - Validate font rendering (HarfBuzz) + +2. **Functional Testing** + - Image processing workflows + - Thumbnail generation + - Format conversions + +3. **Contingency** + - Check for SkiaSharp .NET 11.0 updates + - Report issues to SkiaSharp maintainers + - May need to wait for library updates + - Can isolate failure to drawing subsystem + +### Risk #4: Main Application (Jellyfin.Server) - Tier 11 + +**Challenge**: Entry point where all features converge + +**Mitigation**: + +1. **Foundation First** + - Tiers 2-10 stable before reaching application + - Issues isolated to lower tiers + - Less debugging needed at application level + +2. **Comprehensive Smoke Testing** +``` +βœ“ Application starts + βœ“ Web UI loads + βœ“ Authentication works + βœ“ Library browsing + βœ“ Playback initiates + βœ“ API responds +``` + +3. **Staged Validation** + - Build validation first + - Startup validation next + - Feature validation last + +--- + +## πŸ”„ The Bottom-Up Strategy as Risk Management + +### Why Bottom-Up Reduces Risk + +1. **Failure Blast Radius Control** +``` +Tier 2 failure: Affects 3 projects only +Tier 6 failure: Affects 6 projects (but caught before 90% of solution) +Tier 11 failure: All lower tiers proven stable (easier debugging) + +vs. Top-Down: +Tier 11 failure first: 9 dependencies could be causing it (hard to debug) +``` + +2. **Progressive Validation** + - Each tier includes test projects + - Lower tiers validated by higher tier tests + - Cumulative confidence builds + - **Test pyramid**: +``` + Tier 13: Full integration tests (top) + Tier 12: Integration tests + Tier 9: API + business tests + Tier 5: Model tests + Tier 3: Component tests (bottom) +``` + +3. **Incremental Learning** + - Tier 2 teaches .NET 11.0 behavior + - Lessons applied to Tiers 3-13 + - Pattern recognition for issues + - Team builds expertise as they progress + +4. **Flexible Rollback** + - Can rollback at any tier + - Only lose work from current tier + - Not "all or nothing" + +--- + +## πŸ›‘οΈ Mitigation by Tier + +### Tier Completion Criteria (Safety Gates) + +Each tier must pass criteria before next tier starts: + +| Criterion | Purpose | Risk Mitigated | +|-----------|---------|----------------| +| **Build Success** | No compilation errors | Breaking API changes | +| **Zero Warnings** | Code quality maintained | Technical debt accumulation | +| **100% Test Pass** | Functionality intact | Regression bugs | +| **Package Health** | Dependencies resolved | Compatibility conflicts | +| **Performance Check** | Speed acceptable | Performance degradation | +| **Manual Review** | Human oversight | Subtle issues missed by automation | + +**If ANY criterion fails**: Do not proceed. Fix or rollback tier. + +--- + +## πŸ“‹ Rollback Strategy (Corrective Control) + +### When to Rollback + +**Automatic Triggers**: +1. ❌ Tier 2-4 critical failures (preview framework issues) +2. ❌ Tier 6 database provider failure (GO/NO-GO gate) +3. ❌ >20% test failures in any tier +4. ❌ >30% performance degradation +5. ❌ Blocking preview bugs with no workaround +6. ❌ Security vulnerabilities in preview framework + +### How to Rollback + +**Git-Based Rollback** (Fast & Clean): +```sh +# Option 1: Revert specific tier +git revert + +# Option 2: Reset entire migration +git reset --hard + +# Option 3: Switch to .NET 10.0 LTS +git checkout -b upgrade-to-NET10 +# Adjust target framework to net10.0 +``` + +**Tier-Level Rollback**: +- Revert only failed tier +- Keep lower tiers on .NET 11.0 +- Analyze and fix issues +- Retry tier + +**Solution-Level Rollback**: +- Complete revert to .NET 9.0 +- Document .NET 11.0 issues discovered +- Switch to .NET 10.0 LTS (stable alternative) + +--- + +## πŸ“Š Risk Monitoring Dashboard + +### Key Metrics to Track + +| Metric | Baseline (.NET 9.0) | Threshold | Action if Exceeded | +|--------|---------------------|-----------|---------------------| +| **Build Errors** | 0 | 0 | Fix immediately | +| **Test Pass Rate** | 100% | 100% | Fix immediately | +| **Query Performance** | [Baseline] | +10% | Investigate | +| **Startup Time** | [Baseline] | +20% | Profile & optimize | +| **Memory Usage** | [Baseline] | +15% | Profile for leaks | +| **API Response** | [Baseline] | +15% | Investigate | + +### Continuous Monitoring + +**Per-Tier**: +- Build time +- Test execution time +- Package restore time +- Compiler warnings count + +**Application-Level** (Tier 11+): +- Startup time +- Memory consumption +- API latency +- Database query time + +--- + +## πŸŽ“ Risk Acceptance + +### Accepted Risks + +These risks are **knowingly accepted** due to preview framework requirement: + +βœ… **Minor preview instability** - Expected; can work around +βœ… **Performance variations** - Preview may be unoptimized; acceptable if [Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| AutoFixture | 4.18.1 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj) | βœ…Compatible | +| AutoFixture.AutoMoq | 4.18.1 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj) | βœ…Compatible | +| AutoFixture.Xunit2 | 4.18.1 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj) | βœ…Compatible | +| BDInfo | 0.8.0 | | [MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj) | βœ…Compatible | +| BitFaster.Caching | 2.5.4 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj) | βœ…Compatible | +| BlurHashSharp | 1.4.0-pre.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| BlurHashSharp.SkiaSharp | 1.4.0-pre.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| CommandLineParser | 2.9.1 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| coverlet.collector | 8.0.0 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj) | βœ…Compatible | +| Diacritics | 4.1.4 | | [Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj) | βœ…Compatible | +| DiscUtils.Udf | 0.16.13 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| DotNet.Glob | 3.1.3 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| FsCheck.Xunit | 3.3.2 | | [Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj) | βœ…Compatible | +| HarfBuzzSharp.NativeAssets.Linux | 8.3.1.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| ICU4N.Transliterator | 60.1.0-alpha.356 | | [Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj) | βœ…Compatible | +| IDisposableAnalyzers | 4.0.8 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Emby.Photos.csproj](#embyphotosembyphotoscsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.Networking.csproj](#srcjellyfinnetworkingjellyfinnetworkingcsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| Ignore | 0.2.1 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| Jellyfin.Sdk | 2025.10.21 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| Jellyfin.XmlTv | 10.8.0 | | [Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj) | βœ…Compatible | +| libse | 4.0.12 | | [MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj) | βœ…Compatible | +| LrcParser | 2025.623.0 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| MetaBrainz.MusicBrainz | 8.0.1 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| Microsoft.AspNetCore.Authorization | 11.0.0-preview.1.26104.118 | | [Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj) | βœ…Compatible | +| Microsoft.AspNetCore.Mvc.Testing | 11.0.0-preview.1.26104.118 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj) | βœ…Compatible | +| Microsoft.CodeAnalysis.Analyzers | 3.11.0 | | [Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj) | βœ…Compatible | +| Microsoft.CodeAnalysis.BannedApiAnalyzers | 4.14.0 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Emby.Photos.csproj](#embyphotosembyphotoscsproj)
[Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.csproj](#srcjellyfinnetworkingjellyfinnetworkingcsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| Microsoft.CodeAnalysis.CSharp | 5.0.0 | | [Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj) | βœ…Compatible | +| Microsoft.Data.Sqlite | 11.0.0-preview.1.26104.118 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Microsoft.EntityFrameworkCore | 11.0.0-preview.1.26104.118 | | [Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj) | βœ…Compatible | +| Microsoft.EntityFrameworkCore.Design | 11.0.0-preview.1.26104.118 | | [Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj) | βœ…Compatible | +| Microsoft.EntityFrameworkCore.Relational | 11.0.0-preview.1.26104.118 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj) | βœ…Compatible | +| Microsoft.EntityFrameworkCore.Sqlite | 11.0.0-preview.1.26104.118 | | [Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj) | βœ…Compatible | +| Microsoft.EntityFrameworkCore.Tools | 11.0.0-preview.1.26104.118 | | [Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj) | βœ…Compatible | +| Microsoft.Extensions.Caching.Abstractions | 11.0.0-preview.1.26104.118 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| Microsoft.Extensions.Caching.Memory | 11.0.0-preview.1.26104.118 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| Microsoft.Extensions.Configuration.Binder | 11.0.0-preview.1.26104.118 | | [MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj) | βœ…Compatible | +| Microsoft.Extensions.DependencyInjection | 11.0.0-preview.1.26104.118 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore | 11.0.0-preview.1.26104.118 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Microsoft.Extensions.Hosting.Abstractions | 11.0.0-preview.1.26104.118 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| Microsoft.Extensions.Http | 11.0.0-preview.1.26104.118 | | [Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| Microsoft.Extensions.Logging | 11.0.0-preview.1.26104.118 | | [Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj) | βœ…Compatible | +| Microsoft.NET.Test.Sdk | 18.0.1 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj) | βœ…Compatible | +| MimeTypes | 2.5.2 | | [MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj) | βœ…Compatible | +| Moq | 4.18.4 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj) | βœ…Compatible | +| Morestachio | 5.0.1.631 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| NEbml | 1.1.0.5 | | [Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj) | βœ…Compatible | +| NETStandard.Library | 2.0.3 | | [Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj) | βœ…Compatible | +| Newtonsoft.Json | 13.0.4 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| Npgsql.EntityFrameworkCore.PostgreSQL | 11.0.0-preview.1 | | [Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj) | βœ…Compatible | +| PlaylistsNET | 1.4.1 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| Polly | 8.6.5 | | [Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj) | βœ…Compatible | +| prometheus-net | 8.2.1 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| prometheus-net.AspNetCore | 8.2.1 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| prometheus-net.DotNetRuntime | 4.4.1 | | [Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj) | βœ…Compatible | +| Serilog.AspNetCore | 10.0.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Enrichers.Thread | 4.0.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Expressions | 5.0.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Settings.Configuration | 10.0.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Sinks.Async | 2.1.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Sinks.Console | 6.1.1 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Sinks.File | 7.0.0 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| Serilog.Sinks.Graylog | 3.1.1 | | [Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj) | βœ…Compatible | +| SerilogAnalyzer | 0.15.0 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Emby.Photos.csproj](#embyphotosembyphotoscsproj)
[Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.csproj](#srcjellyfinnetworkingjellyfinnetworkingcsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| SkiaSharp | 3.116.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| SkiaSharp.HarfBuzz | 3.116.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| SkiaSharp.NativeAssets.Linux | 3.116.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| SmartAnalyzers.MultithreadingAnalyzer | 1.1.31 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Emby.Photos.csproj](#embyphotosembyphotoscsproj)
[Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.csproj](#srcjellyfinnetworkingjellyfinnetworkingcsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| StyleCop.Analyzers | 1.2.0-beta.556 | | [Emby.Naming.csproj](#embynamingembynamingcsproj)
[Emby.Photos.csproj](#embyphotosembyphotoscsproj)
[Emby.Server.Implementations.csproj](#embyserverimplementationsembyserverimplementationscsproj)
[Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj)
[Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.CodeAnalysis.csproj](#srcjellyfincodeanalysisjellyfincodeanalysiscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Data.csproj](#jellyfindatajellyfindatacsproj)
[Jellyfin.Database.Implementations.csproj](#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj)
[Jellyfin.Database.Providers.Postgres.csproj](#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj)
[Jellyfin.Database.Providers.Sqlite.csproj](#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj)
[Jellyfin.Drawing.csproj](#srcjellyfindrawingjellyfindrawingcsproj)
[Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj)
[Jellyfin.Extensions.csproj](#srcjellyfinextensionsjellyfinextensionscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.csproj](#srcjellyfinlivetvjellyfinlivetvcsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.csproj](#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.csproj](#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.csproj](#srcjellyfinnetworkingjellyfinnetworkingcsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.csproj](#jellyfinserverjellyfinservercsproj)
[Jellyfin.Server.Implementations.csproj](#jellyfinserverimplementationsjellyfinserverimplementationscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj)
[MediaBrowser.Common.csproj](#mediabrowsercommonmediabrowsercommoncsproj)
[MediaBrowser.Controller.csproj](#mediabrowsercontrollermediabrowsercontrollercsproj)
[MediaBrowser.LocalMetadata.csproj](#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj)
[MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj)
[MediaBrowser.Model.csproj](#mediabrowsermodelmediabrowsermodelcsproj)
[MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj)
[MediaBrowser.XbmcMetadata.csproj](#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj) | βœ…Compatible | +| Svg.Skia | 3.4.1 | | [Jellyfin.Drawing.Skia.csproj](#srcjellyfindrawingskiajellyfindrawingskiacsproj) | βœ…Compatible | +| Swashbuckle.AspNetCore | 7.3.2 | | [Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj) | βœ…Compatible | +| Swashbuckle.AspNetCore.ReDoc | 6.9.0 | | [Jellyfin.Api.csproj](#jellyfinapijellyfinapicsproj) | βœ…Compatible | +| TagLibSharp | 2.3.0 | | [Emby.Photos.csproj](#embyphotosembyphotoscsproj) | βœ…Compatible | +| TMDbLib | 2.3.0 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | +| UTF.Unknown | 2.6.0 | | [MediaBrowser.MediaEncoding.csproj](#mediabrowsermediaencodingmediabrowsermediaencodingcsproj) | βœ…Compatible | +| xunit | 2.9.3 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj) | βœ…Compatible | +| Xunit.Priority | 1.1.6 | | [Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj) | βœ…Compatible | +| xunit.runner.visualstudio | 2.8.2 | | [Jellyfin.Api.Tests.csproj](#testsjellyfinapitestsjellyfinapitestscsproj)
[Jellyfin.Common.Tests.csproj](#testsjellyfincommontestsjellyfincommontestscsproj)
[Jellyfin.Controller.Tests.csproj](#testsjellyfincontrollertestsjellyfincontrollertestscsproj)
[Jellyfin.Extensions.Tests.csproj](#testsjellyfinextensionstestsjellyfinextensionstestscsproj)
[Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.MediaEncoding.Hls.Tests.csproj](#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj)
[Jellyfin.MediaEncoding.Keyframes.Tests.csproj](#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj)
[Jellyfin.MediaEncoding.Tests.csproj](#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj)
[Jellyfin.Model.Tests.csproj](#testsjellyfinmodeltestsjellyfinmodeltestscsproj)
[Jellyfin.Naming.Tests.csproj](#testsjellyfinnamingtestsjellyfinnamingtestscsproj)
[Jellyfin.Networking.Tests.csproj](#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj)
[Jellyfin.Providers.Tests.csproj](#testsjellyfinproviderstestsjellyfinproviderstestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj)
[Jellyfin.Server.Integration.Tests.csproj](#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj)
[Jellyfin.Server.Tests.csproj](#testsjellyfinservertestsjellyfinservertestscsproj)
[Jellyfin.XbmcMetadata.Tests.csproj](#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj) | βœ…Compatible | +| Xunit.SkippableFact | 1.5.61 | | [Jellyfin.LiveTv.Tests.csproj](#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj)
[Jellyfin.Server.Implementations.Tests.csproj](#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj) | βœ…Compatible | +| z440.atl.core | 7.11.0 | | [MediaBrowser.Providers.csproj](#mediabrowserprovidersmediabrowserproviderscsproj) | βœ…Compatible | + +## Top API Migration Challenges + +### Technologies and Features + +| Technology | Issues | Percentage | Migration Path | +| :--- | :---: | :---: | :--- | + +### Most Frequent API Issues + +| API | Count | Percentage | Category | +| :--- | :---: | :---: | :--- | + +## Projects Relationship Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart LR + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P7["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P9["πŸ“¦ Emby.Photos.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P15["πŸ“¦ Jellyfin.Common.Tests.csproj
net11.0"] + P16["πŸ“¦ Jellyfin.MediaEncoding.Tests.csproj
net11.0"] + P17["πŸ“¦ Jellyfin.Naming.Tests.csproj
net11.0"] + P18["πŸ“¦ Jellyfin.Api.Tests.csproj
net11.0"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + P20["πŸ“¦ Jellyfin.Controller.Tests.csproj
net11.0"] + P21["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P24["πŸ“¦ Jellyfin.XbmcMetadata.Tests.csproj
net11.0"] + P25["πŸ“¦ Jellyfin.Model.Tests.csproj
net11.0"] + P26["πŸ“¦ Jellyfin.Networking.Tests.csproj
net11.0"] + P27["πŸ“¦ Jellyfin.Server.Tests.csproj
net11.0"] + P28["πŸ“¦ Jellyfin.Server.Integration.Tests.csproj
net11.0"] + P29["πŸ“¦ Jellyfin.Providers.Tests.csproj
net11.0"] + P30["πŸ“¦ Jellyfin.Extensions.csproj
net11.0"] + P31["πŸ“¦ Jellyfin.Extensions.Tests.csproj
net11.0"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P34["πŸ“¦ Jellyfin.MediaEncoding.Hls.Tests.csproj
net11.0"] + P35["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.Tests.csproj
net11.0"] + P36["πŸ“¦ Jellyfin.LiveTv.Tests.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + P38["πŸ“¦ Jellyfin.Database.Providers.Sqlite.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + P1 --> P13 + P1 --> P10 + P1 --> P41 + P1 --> P33 + P1 --> P22 + P1 --> P37 + P1 --> P8 + P1 --> P39 + P1 --> P40 + P2 --> P4 + P2 --> P11 + P2 --> P32 + P2 --> P3 + P2 --> P40 + P3 --> P4 + P3 --> P40 + P4 --> P21 + P4 --> P30 + P4 --> P40 + P5 --> P4 + P5 --> P2 + P5 --> P40 + P6 --> P4 + P6 --> P2 + P6 --> P40 + P7 --> P4 + P7 --> P2 + P7 --> P40 + P8 --> P4 + P8 --> P3 + P8 --> P2 + P8 --> P40 + P9 --> P4 + P9 --> P2 + P9 --> P40 + P10 --> P12 + P10 --> P7 + P10 --> P14 + P10 --> P4 + P10 --> P2 + P10 --> P11 + P10 --> P5 + P10 --> P22 + P10 --> P6 + P10 --> P9 + P10 --> P8 + P10 --> P39 + P10 --> P3 + P10 --> P40 + P11 --> P4 + P11 --> P3 + P11 --> P40 + P12 --> P4 + P12 --> P2 + P12 --> P3 + P12 --> P40 + P13 --> P4 + P13 --> P3 + P13 --> P2 + P13 --> P40 + P14 --> P23 + P14 --> P33 + P14 --> P12 + P14 --> P2 + P14 --> P40 + P15 --> P5 + P15 --> P3 + P15 --> P40 + P16 --> P12 + P16 --> P40 + P17 --> P11 + P17 --> P40 + P18 --> P14 + P18 --> P22 + P18 --> P40 + P19 --> P28 + P19 --> P22 + P19 --> P10 + P19 --> P39 + P19 --> P40 + P20 --> P2 + P20 --> P40 + P21 --> P39 + P21 --> P40 + P22 --> P41 + P22 --> P21 + P22 --> P4 + P22 --> P2 + P22 --> P39 + P22 --> P40 + P23 --> P3 + P23 --> P2 + P23 --> P40 + P24 --> P5 + P24 --> P6 + P24 --> P40 + P25 --> P4 + P25 --> P40 + P26 --> P23 + P26 --> P40 + P27 --> P1 + P27 --> P40 + P28 --> P1 + P28 --> P40 + P29 --> P5 + P29 --> P40 + P30 --> P40 + P31 --> P4 + P31 --> P30 + P31 --> P40 + P32 --> P40 + P33 --> P4 + P33 --> P40 + P33 --> P3 + P33 --> P2 + P33 --> P32 + P34 --> P32 + P34 --> P33 + P34 --> P40 + P35 --> P32 + P35 --> P40 + P36 --> P37 + P36 --> P40 + P37 --> P4 + P37 --> P3 + P37 --> P2 + P37 --> P40 + P38 --> P3 + P38 --> P39 + P38 --> P40 + P39 --> P40 + P41 --> P3 + P41 --> P39 + P41 --> P40 + click P1 "#jellyfinserverjellyfinservercsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P7 "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P9 "#embyphotosembyphotoscsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P11 "#embynamingembynamingcsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P15 "#testsjellyfincommontestsjellyfincommontestscsproj" + click P16 "#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj" + click P17 "#testsjellyfinnamingtestsjellyfinnamingtestscsproj" + click P18 "#testsjellyfinapitestsjellyfinapitestscsproj" + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + click P20 "#testsjellyfincontrollertestsjellyfincontrollertestscsproj" + click P21 "#jellyfindatajellyfindatacsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P24 "#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj" + click P25 "#testsjellyfinmodeltestsjellyfinmodeltestscsproj" + click P26 "#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj" + click P27 "#testsjellyfinservertestsjellyfinservertestscsproj" + click P28 "#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj" + click P29 "#testsjellyfinproviderstestsjellyfinproviderstestscsproj" + click P30 "#srcjellyfinextensionsjellyfinextensionscsproj" + click P31 "#testsjellyfinextensionstestsjellyfinextensionstestscsproj" + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P34 "#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj" + click P35 "#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj" + click P36 "#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + click P38 "#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + +``` + +## Project Details + + +### Emby.Naming\Emby.Naming.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 3 +- **Number of Files**: 49 +- **Lines of Code**: 4311 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (3)"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P17["πŸ“¦ Jellyfin.Naming.Tests.csproj
net11.0"] + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P17 "#testsjellyfinnamingtestsjellyfinnamingtestscsproj" + end + subgraph current["Emby.Naming.csproj"] + MAIN["πŸ“¦ Emby.Naming.csproj
net11.0"] + click MAIN "#embynamingembynamingcsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P2 --> MAIN + P10 --> MAIN + P17 --> MAIN + MAIN --> P4 + MAIN --> P3 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Emby.Photos\Emby.Photos.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 1 +- **Number of Files**: 3 +- **Lines of Code**: 200 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (1)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + end + subgraph current["Emby.Photos.csproj"] + MAIN["πŸ“¦ Emby.Photos.csproj
net11.0"] + click MAIN "#embyphotosembyphotoscsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + MAIN --> P4 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Emby.Server.Implementations\Emby.Server.Implementations.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 14 +- **Dependants**: 2 +- **Number of Files**: 294 +- **Lines of Code**: 30592 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + end + subgraph current["Emby.Server.Implementations.csproj"] + MAIN["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + click MAIN "#embyserverimplementationsembyserverimplementationscsproj" + end + subgraph downstream["Dependencies (14"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P7["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P9["πŸ“¦ Emby.Photos.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P7 "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P11 "#embynamingembynamingcsproj" + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P9 "#embyphotosembyphotoscsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P19 --> MAIN + MAIN --> P12 + MAIN --> P7 + MAIN --> P14 + MAIN --> P4 + MAIN --> P2 + MAIN --> P11 + MAIN --> P5 + MAIN --> P22 + MAIN --> P6 + MAIN --> P9 + MAIN --> P8 + MAIN --> P39 + MAIN --> P3 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Jellyfin.Api\Jellyfin.Api.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 5 +- **Dependants**: 2 +- **Number of Files**: 169 +- **Lines of Code**: 29397 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P18["πŸ“¦ Jellyfin.Api.Tests.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P18 "#testsjellyfinapitestsjellyfinapitestscsproj" + end + subgraph current["Jellyfin.Api.csproj"] + MAIN["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + click MAIN "#jellyfinapijellyfinapicsproj" + end + subgraph downstream["Dependencies (5"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + P18 --> MAIN + MAIN --> P23 + MAIN --> P33 + MAIN --> P12 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Jellyfin.Data\Jellyfin.Data.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 2 +- **Dependants**: 2 +- **Number of Files**: 27 +- **Lines of Code**: 1625 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + end + subgraph current["Jellyfin.Data.csproj"] + MAIN["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + click MAIN "#jellyfindatajellyfindatacsproj" + end + subgraph downstream["Dependencies (2"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P4 --> MAIN + P22 --> MAIN + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Jellyfin.Server.Implementations\Jellyfin.Server.Implementations.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 6 +- **Dependants**: 4 +- **Number of Files**: 58 +- **Lines of Code**: 10668 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (4)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P18["πŸ“¦ Jellyfin.Api.Tests.csproj
net11.0"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P18 "#testsjellyfinapitestsjellyfinapitestscsproj" + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + end + subgraph current["Jellyfin.Server.Implementations.csproj"] + MAIN["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + click MAIN "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + end + subgraph downstream["Dependencies (6"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + P21["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + click P21 "#jellyfindatajellyfindatacsproj" + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P10 --> MAIN + P18 --> MAIN + P19 --> MAIN + MAIN --> P41 + MAIN --> P21 + MAIN --> P4 + MAIN --> P2 + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### Jellyfin.Server\Jellyfin.Server.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** AspNetCore +- **Dependencies**: 9 +- **Dependants**: 2 +- **Number of Files**: 84 +- **Lines of Code**: 9905 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P27["πŸ“¦ Jellyfin.Server.Tests.csproj
net11.0"] + P28["πŸ“¦ Jellyfin.Server.Integration.Tests.csproj
net11.0"] + click P27 "#testsjellyfinservertestsjellyfinservertestscsproj" + click P28 "#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj" + end + subgraph current["Jellyfin.Server.csproj"] + MAIN["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + click MAIN "#jellyfinserverjellyfinservercsproj" + end + subgraph downstream["Dependencies (9"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P27 --> MAIN + P28 --> MAIN + MAIN --> P13 + MAIN --> P10 + MAIN --> P41 + MAIN --> P33 + MAIN --> P22 + MAIN --> P37 + MAIN --> P8 + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.Common\MediaBrowser.Common.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 2 +- **Dependants**: 12 +- **Number of Files**: 44 +- **Lines of Code**: 3047 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (12)"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P15["πŸ“¦ Jellyfin.Common.Tests.csproj
net11.0"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + P38["πŸ“¦ Jellyfin.Database.Providers.Sqlite.csproj
net11.0"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P11 "#embynamingembynamingcsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P15 "#testsjellyfincommontestsjellyfincommontestscsproj" + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + click P38 "#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj" + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + end + subgraph current["MediaBrowser.Common.csproj"] + MAIN["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + click MAIN "#mediabrowsercommonmediabrowsercommoncsproj" + end + subgraph downstream["Dependencies (2"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P2 --> MAIN + P8 --> MAIN + P10 --> MAIN + P11 --> MAIN + P12 --> MAIN + P13 --> MAIN + P15 --> MAIN + P23 --> MAIN + P33 --> MAIN + P37 --> MAIN + P38 --> MAIN + P41 --> MAIN + MAIN --> P4 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.Controller\MediaBrowser.Controller.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 5 +- **Dependants**: 14 +- **Number of Files**: 364 +- **Lines of Code**: 40900 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (14)"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P7["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P9["πŸ“¦ Emby.Photos.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P20["πŸ“¦ Jellyfin.Controller.Tests.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P7 "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P9 "#embyphotosembyphotoscsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P20 "#testsjellyfincontrollertestsjellyfincontrollertestscsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + end + subgraph current["MediaBrowser.Controller.csproj"] + MAIN["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + click MAIN "#mediabrowsercontrollermediabrowsercontrollercsproj" + end + subgraph downstream["Dependencies (5"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P11 "#embynamingembynamingcsproj" + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P5 --> MAIN + P6 --> MAIN + P7 --> MAIN + P8 --> MAIN + P9 --> MAIN + P10 --> MAIN + P12 --> MAIN + P13 --> MAIN + P14 --> MAIN + P20 --> MAIN + P22 --> MAIN + P23 --> MAIN + P33 --> MAIN + P37 --> MAIN + MAIN --> P4 + MAIN --> P11 + MAIN --> P32 + MAIN --> P3 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.LocalMetadata\MediaBrowser.LocalMetadata.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 1 +- **Number of Files**: 16 +- **Lines of Code**: 2751 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (1)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + end + subgraph current["MediaBrowser.LocalMetadata.csproj"] + MAIN["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + click MAIN "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + MAIN --> P4 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.MediaEncoding\MediaBrowser.MediaEncoding.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 4 +- **Dependants**: 3 +- **Number of Files**: 34 +- **Lines of Code**: 8139 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (3)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P16["πŸ“¦ Jellyfin.MediaEncoding.Tests.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P16 "#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj" + end + subgraph current["MediaBrowser.MediaEncoding.csproj"] + MAIN["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + click MAIN "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + end + subgraph downstream["Dependencies (4"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + P14 --> MAIN + P16 --> MAIN + MAIN --> P4 + MAIN --> P2 + MAIN --> P3 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.Model\MediaBrowser.Model.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 16 +- **Number of Files**: 310 +- **Lines of Code**: 21655 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (16)"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P7["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P9["πŸ“¦ Emby.Photos.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P25["πŸ“¦ Jellyfin.Model.Tests.csproj
net11.0"] + P31["πŸ“¦ Jellyfin.Extensions.Tests.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P7 "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P9 "#embyphotosembyphotoscsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P11 "#embynamingembynamingcsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P25 "#testsjellyfinmodeltestsjellyfinmodeltestscsproj" + click P31 "#testsjellyfinextensionstestsjellyfinextensionstestscsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + end + subgraph current["MediaBrowser.Model.csproj"] + MAIN["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + click MAIN "#mediabrowsermodelmediabrowsermodelcsproj" + end + subgraph downstream["Dependencies (3"] + P21["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + P30["πŸ“¦ Jellyfin.Extensions.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P21 "#jellyfindatajellyfindatacsproj" + click P30 "#srcjellyfinextensionsjellyfinextensionscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P2 --> MAIN + P3 --> MAIN + P5 --> MAIN + P6 --> MAIN + P7 --> MAIN + P8 --> MAIN + P9 --> MAIN + P10 --> MAIN + P11 --> MAIN + P12 --> MAIN + P13 --> MAIN + P22 --> MAIN + P25 --> MAIN + P31 --> MAIN + P33 --> MAIN + P37 --> MAIN + MAIN --> P21 + MAIN --> P30 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.Providers\MediaBrowser.Providers.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 4 +- **Number of Files**: 132 +- **Lines of Code**: 19115 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (4)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P15["πŸ“¦ Jellyfin.Common.Tests.csproj
net11.0"] + P24["πŸ“¦ Jellyfin.XbmcMetadata.Tests.csproj
net11.0"] + P29["πŸ“¦ Jellyfin.Providers.Tests.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P15 "#testsjellyfincommontestsjellyfincommontestscsproj" + click P24 "#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj" + click P29 "#testsjellyfinproviderstestsjellyfinproviderstestscsproj" + end + subgraph current["MediaBrowser.Providers.csproj"] + MAIN["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + click MAIN "#mediabrowserprovidersmediabrowserproviderscsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + P15 --> MAIN + P24 --> MAIN + P29 --> MAIN + MAIN --> P4 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### MediaBrowser.XbmcMetadata\MediaBrowser.XbmcMetadata.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 2 +- **Number of Files**: 29 +- **Lines of Code**: 4274 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P24["πŸ“¦ Jellyfin.XbmcMetadata.Tests.csproj
net11.0"] + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P24 "#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj" + end + subgraph current["MediaBrowser.XbmcMetadata.csproj"] + MAIN["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + click MAIN "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P10 --> MAIN + P24 --> MAIN + MAIN --> P4 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.CodeAnalysis\Jellyfin.CodeAnalysis.csproj + +#### Project Info + +- **Current Target Framework:** netstandard2.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 0 +- **Dependants**: 40 +- **Number of Files**: 1 +- **Lines of Code**: 86 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (40)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P7["πŸ“¦ MediaBrowser.LocalMetadata.csproj
net11.0"] + P8["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + P9["πŸ“¦ Emby.Photos.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P13["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P15["πŸ“¦ Jellyfin.Common.Tests.csproj
net11.0"] + P16["πŸ“¦ Jellyfin.MediaEncoding.Tests.csproj
net11.0"] + P17["πŸ“¦ Jellyfin.Naming.Tests.csproj
net11.0"] + P18["πŸ“¦ Jellyfin.Api.Tests.csproj
net11.0"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + P20["πŸ“¦ Jellyfin.Controller.Tests.csproj
net11.0"] + P21["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P24["πŸ“¦ Jellyfin.XbmcMetadata.Tests.csproj
net11.0"] + P25["πŸ“¦ Jellyfin.Model.Tests.csproj
net11.0"] + P26["πŸ“¦ Jellyfin.Networking.Tests.csproj
net11.0"] + P27["πŸ“¦ Jellyfin.Server.Tests.csproj
net11.0"] + P28["πŸ“¦ Jellyfin.Server.Integration.Tests.csproj
net11.0"] + P29["πŸ“¦ Jellyfin.Providers.Tests.csproj
net11.0"] + P30["πŸ“¦ Jellyfin.Extensions.csproj
net11.0"] + P31["πŸ“¦ Jellyfin.Extensions.Tests.csproj
net11.0"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P34["πŸ“¦ Jellyfin.MediaEncoding.Hls.Tests.csproj
net11.0"] + P35["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.Tests.csproj
net11.0"] + P36["πŸ“¦ Jellyfin.LiveTv.Tests.csproj
net11.0"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + P38["πŸ“¦ Jellyfin.Database.Providers.Sqlite.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P7 "#mediabrowserlocalmetadatamediabrowserlocalmetadatacsproj" + click P8 "#srcjellyfindrawingjellyfindrawingcsproj" + click P9 "#embyphotosembyphotoscsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P11 "#embynamingembynamingcsproj" + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P13 "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P15 "#testsjellyfincommontestsjellyfincommontestscsproj" + click P16 "#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj" + click P17 "#testsjellyfinnamingtestsjellyfinnamingtestscsproj" + click P18 "#testsjellyfinapitestsjellyfinapitestscsproj" + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + click P20 "#testsjellyfincontrollertestsjellyfincontrollertestscsproj" + click P21 "#jellyfindatajellyfindatacsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P24 "#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj" + click P25 "#testsjellyfinmodeltestsjellyfinmodeltestscsproj" + click P26 "#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj" + click P27 "#testsjellyfinservertestsjellyfinservertestscsproj" + click P28 "#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj" + click P29 "#testsjellyfinproviderstestsjellyfinproviderstestscsproj" + click P30 "#srcjellyfinextensionsjellyfinextensionscsproj" + click P31 "#testsjellyfinextensionstestsjellyfinextensionstestscsproj" + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P34 "#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj" + click P35 "#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj" + click P36 "#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj" + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + click P38 "#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + end + subgraph current["Jellyfin.CodeAnalysis.csproj"] + MAIN["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click MAIN "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P2 --> MAIN + P3 --> MAIN + P4 --> MAIN + P5 --> MAIN + P6 --> MAIN + P7 --> MAIN + P8 --> MAIN + P9 --> MAIN + P10 --> MAIN + P11 --> MAIN + P12 --> MAIN + P13 --> MAIN + P14 --> MAIN + P15 --> MAIN + P16 --> MAIN + P17 --> MAIN + P18 --> MAIN + P19 --> MAIN + P20 --> MAIN + P21 --> MAIN + P22 --> MAIN + P23 --> MAIN + P24 --> MAIN + P25 --> MAIN + P26 --> MAIN + P27 --> MAIN + P28 --> MAIN + P29 --> MAIN + P30 --> MAIN + P31 --> MAIN + P32 --> MAIN + P33 --> MAIN + P34 --> MAIN + P35 --> MAIN + P36 --> MAIN + P37 --> MAIN + P38 --> MAIN + P39 --> MAIN + P41 --> MAIN + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 89 | | +| ***Total APIs Analyzed*** | ***89*** | | + + +### src\Jellyfin.Database\Jellyfin.Database.Implementations\Jellyfin.Database.Implementations.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 1 +- **Dependants**: 7 +- **Number of Files**: 136 +- **Lines of Code**: 8363 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (7)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + P21["πŸ“¦ Jellyfin.Data.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P38["πŸ“¦ Jellyfin.Database.Providers.Sqlite.csproj
net11.0"] + P41["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + click P21 "#jellyfindatajellyfindatacsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P38 "#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj" + click P41 "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + end + subgraph current["Jellyfin.Database.Implementations.csproj"] + MAIN["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + click MAIN "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + end + subgraph downstream["Dependencies (1"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P10 --> MAIN + P19 --> MAIN + P21 --> MAIN + P22 --> MAIN + P38 --> MAIN + P41 --> MAIN + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Database\Jellyfin.Database.Providers.Postgres\Jellyfin.Database.Providers.Postgres.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 2 +- **Number of Files**: 14 +- **Lines of Code**: 6665 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + end + subgraph current["Jellyfin.Database.Providers.Postgres.csproj"] + MAIN["πŸ“¦ Jellyfin.Database.Providers.Postgres.csproj
net11.0"] + click MAIN "#srcjellyfindatabasejellyfindatabaseproviderspostgresjellyfindatabaseproviderspostgrescsproj" + end + subgraph downstream["Dependencies (3"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P22 --> MAIN + MAIN --> P3 + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Database\Jellyfin.Database.Providers.Sqlite\Jellyfin.Database.Providers.Sqlite.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 82 +- **Lines of Code**: 48527 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Database.Providers.Sqlite.csproj"] + MAIN["πŸ“¦ Jellyfin.Database.Providers.Sqlite.csproj
net11.0"] + click MAIN "#srcjellyfindatabasejellyfindatabaseproviderssqlitejellyfindatabaseproviderssqlitecsproj" + end + subgraph downstream["Dependencies (3"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P3 + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Drawing.Skia\Jellyfin.Drawing.Skia.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 4 +- **Dependants**: 1 +- **Number of Files**: 9 +- **Lines of Code**: 1577 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (1)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + end + subgraph current["Jellyfin.Drawing.Skia.csproj"] + MAIN["πŸ“¦ Jellyfin.Drawing.Skia.csproj
net11.0"] + click MAIN "#srcjellyfindrawingskiajellyfindrawingskiacsproj" + end + subgraph downstream["Dependencies (4"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + MAIN --> P4 + MAIN --> P3 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Drawing\Jellyfin.Drawing.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 4 +- **Dependants**: 2 +- **Number of Files**: 4 +- **Lines of Code**: 665 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + end + subgraph current["Jellyfin.Drawing.csproj"] + MAIN["πŸ“¦ Jellyfin.Drawing.csproj
net11.0"] + click MAIN "#srcjellyfindrawingjellyfindrawingcsproj" + end + subgraph downstream["Dependencies (4"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P10 --> MAIN + MAIN --> P4 + MAIN --> P3 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Extensions\Jellyfin.Extensions.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 1 +- **Dependants**: 2 +- **Number of Files**: 33 +- **Lines of Code**: 1635 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P31["πŸ“¦ Jellyfin.Extensions.Tests.csproj
net11.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P31 "#testsjellyfinextensionstestsjellyfinextensionstestscsproj" + end + subgraph current["Jellyfin.Extensions.csproj"] + MAIN["πŸ“¦ Jellyfin.Extensions.csproj
net11.0"] + click MAIN "#srcjellyfinextensionsjellyfinextensionscsproj" + end + subgraph downstream["Dependencies (1"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P4 --> MAIN + P31 --> MAIN + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.LiveTv\Jellyfin.LiveTv.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 4 +- **Dependants**: 2 +- **Number of Files**: 78 +- **Lines of Code**: 13883 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P36["πŸ“¦ Jellyfin.LiveTv.Tests.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P36 "#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj" + end + subgraph current["Jellyfin.LiveTv.csproj"] + MAIN["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + click MAIN "#srcjellyfinlivetvjellyfinlivetvcsproj" + end + subgraph downstream["Dependencies (4"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P1 --> MAIN + P36 --> MAIN + MAIN --> P4 + MAIN --> P3 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.MediaEncoding.Hls\Jellyfin.MediaEncoding.Hls.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 5 +- **Dependants**: 3 +- **Number of Files**: 9 +- **Lines of Code**: 678 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (3)"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P34["πŸ“¦ Jellyfin.MediaEncoding.Hls.Tests.csproj
net11.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P14 "#jellyfinapijellyfinapicsproj" + click P34 "#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj" + end + subgraph current["Jellyfin.MediaEncoding.Hls.csproj"] + MAIN["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + click MAIN "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + end + subgraph downstream["Dependencies (5"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + end + P1 --> MAIN + P14 --> MAIN + P34 --> MAIN + MAIN --> P4 + MAIN --> P40 + MAIN --> P3 + MAIN --> P2 + MAIN --> P32 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.MediaEncoding.Keyframes\Jellyfin.MediaEncoding.Keyframes.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 1 +- **Dependants**: 4 +- **Number of Files**: 8 +- **Lines of Code**: 636 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (4)"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P34["πŸ“¦ Jellyfin.MediaEncoding.Hls.Tests.csproj
net11.0"] + P35["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.Tests.csproj
net11.0"] + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P34 "#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj" + click P35 "#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj" + end + subgraph current["Jellyfin.MediaEncoding.Keyframes.csproj"] + MAIN["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + click MAIN "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + end + subgraph downstream["Dependencies (1"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P2 --> MAIN + P33 --> MAIN + P34 --> MAIN + P35 --> MAIN + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### src\Jellyfin.Networking\Jellyfin.Networking.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** ClassLibrary +- **Dependencies**: 3 +- **Dependants**: 2 +- **Number of Files**: 5 +- **Lines of Code**: 1479 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (2)"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P26["πŸ“¦ Jellyfin.Networking.Tests.csproj
net11.0"] + click P14 "#jellyfinapijellyfinapicsproj" + click P26 "#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj" + end + subgraph current["Jellyfin.Networking.csproj"] + MAIN["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + click MAIN "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + end + subgraph downstream["Dependencies (3"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P14 --> MAIN + P26 --> MAIN + MAIN --> P3 + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Api.Tests\Jellyfin.Api.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 16 +- **Lines of Code**: 1501 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Api.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Api.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinapitestsjellyfinapitestscsproj" + end + subgraph downstream["Dependencies (3"] + P14["πŸ“¦ Jellyfin.Api.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P14 "#jellyfinapijellyfinapicsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P14 + MAIN --> P22 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Common.Tests\Jellyfin.Common.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 4 +- **Lines of Code**: 126 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Common.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Common.Tests.csproj
net11.0"] + click MAIN "#testsjellyfincommontestsjellyfincommontestscsproj" + end + subgraph downstream["Dependencies (3"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P3["πŸ“¦ MediaBrowser.Common.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P3 "#mediabrowsercommonmediabrowsercommoncsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P5 + MAIN --> P3 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Controller.Tests\Jellyfin.Controller.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 5 +- **Lines of Code**: 451 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Controller.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Controller.Tests.csproj
net11.0"] + click MAIN "#testsjellyfincontrollertestsjellyfincontrollertestscsproj" + end + subgraph downstream["Dependencies (2"] + P2["πŸ“¦ MediaBrowser.Controller.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P2 "#mediabrowsercontrollermediabrowsercontrollercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P2 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Extensions.Tests\Jellyfin.Extensions.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 21 +- **Lines of Code**: 1224 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Extensions.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Extensions.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinextensionstestsjellyfinextensionstestscsproj" + end + subgraph downstream["Dependencies (3"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P30["πŸ“¦ Jellyfin.Extensions.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P30 "#srcjellyfinextensionsjellyfinextensionscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P4 + MAIN --> P30 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.LiveTv.Tests\Jellyfin.LiveTv.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 8 +- **Lines of Code**: 994 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.LiveTv.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.LiveTv.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinlivetvtestsjellyfinlivetvtestscsproj" + end + subgraph downstream["Dependencies (2"] + P37["πŸ“¦ Jellyfin.LiveTv.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P37 "#srcjellyfinlivetvjellyfinlivetvcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P37 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.MediaEncoding.Hls.Tests\Jellyfin.MediaEncoding.Hls.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 3 +- **Lines of Code**: 105 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.MediaEncoding.Hls.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.MediaEncoding.Hls.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinmediaencodinghlstestsjellyfinmediaencodinghlstestscsproj" + end + subgraph downstream["Dependencies (3"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + P33["πŸ“¦ Jellyfin.MediaEncoding.Hls.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + click P33 "#srcjellyfinmediaencodinghlsjellyfinmediaencodinghlscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P32 + MAIN --> P33 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.MediaEncoding.Keyframes.Tests\Jellyfin.MediaEncoding.Keyframes.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 3 +- **Lines of Code**: 32 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.MediaEncoding.Keyframes.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinmediaencodingkeyframestestsjellyfinmediaencodingkeyframestestscsproj" + end + subgraph downstream["Dependencies (2"] + P32["πŸ“¦ Jellyfin.MediaEncoding.Keyframes.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P32 "#srcjellyfinmediaencodingkeyframesjellyfinmediaencodingkeyframescsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P32 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.MediaEncoding.Tests\Jellyfin.MediaEncoding.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 10 +- **Lines of Code**: 913 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.MediaEncoding.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.MediaEncoding.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinmediaencodingtestsjellyfinmediaencodingtestscsproj" + end + subgraph downstream["Dependencies (2"] + P12["πŸ“¦ MediaBrowser.MediaEncoding.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P12 "#mediabrowsermediaencodingmediabrowsermediaencodingcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P12 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Model.Tests\Jellyfin.Model.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 12 +- **Lines of Code**: 2076 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Model.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Model.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinmodeltestsjellyfinmodeltestscsproj" + end + subgraph downstream["Dependencies (2"] + P4["πŸ“¦ MediaBrowser.Model.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P4 "#mediabrowsermodelmediabrowsermodelcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P4 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Naming.Tests\Jellyfin.Naming.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 29 +- **Lines of Code**: 3205 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Naming.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Naming.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinnamingtestsjellyfinnamingtestscsproj" + end + subgraph downstream["Dependencies (2"] + P11["πŸ“¦ Emby.Naming.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P11 "#embynamingembynamingcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P11 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Networking.Tests\Jellyfin.Networking.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 6 +- **Lines of Code**: 562 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Networking.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Networking.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinnetworkingtestsjellyfinnetworkingtestscsproj" + end + subgraph downstream["Dependencies (2"] + P23["πŸ“¦ Jellyfin.Networking.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P23 "#srcjellyfinnetworkingjellyfinnetworkingcsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P23 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Providers.Tests\Jellyfin.Providers.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 14 +- **Lines of Code**: 2842 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Providers.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Providers.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinproviderstestsjellyfinproviderstestscsproj" + end + subgraph downstream["Dependencies (2"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P5 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Server.Implementations.Tests\Jellyfin.Server.Implementations.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 5 +- **Dependants**: 0 +- **Number of Files**: 31 +- **Lines of Code**: 3307 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Server.Implementations.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + end + subgraph downstream["Dependencies (5"] + P28["πŸ“¦ Jellyfin.Server.Integration.Tests.csproj
net11.0"] + P22["πŸ“¦ Jellyfin.Server.Implementations.csproj
net11.0"] + P10["πŸ“¦ Emby.Server.Implementations.csproj
net11.0"] + P39["πŸ“¦ Jellyfin.Database.Implementations.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P28 "#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj" + click P22 "#jellyfinserverimplementationsjellyfinserverimplementationscsproj" + click P10 "#embyserverimplementationsembyserverimplementationscsproj" + click P39 "#srcjellyfindatabasejellyfindatabaseimplementationsjellyfindatabaseimplementationscsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P28 + MAIN --> P22 + MAIN --> P10 + MAIN --> P39 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Server.Integration.Tests\Jellyfin.Server.Integration.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 1 +- **Number of Files**: 31 +- **Lines of Code**: 2022 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph upstream["Dependants (1)"] + P19["πŸ“¦ Jellyfin.Server.Implementations.Tests.csproj
net11.0"] + click P19 "#testsjellyfinserverimplementationstestsjellyfinserverimplementationstestscsproj" + end + subgraph current["Jellyfin.Server.Integration.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Server.Integration.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinserverintegrationtestsjellyfinserverintegrationtestscsproj" + end + subgraph downstream["Dependencies (2"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + P19 --> MAIN + MAIN --> P1 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.Server.Tests\Jellyfin.Server.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 2 +- **Dependants**: 0 +- **Number of Files**: 3 +- **Lines of Code**: 131 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.Server.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.Server.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinservertestsjellyfinservertestscsproj" + end + subgraph downstream["Dependencies (2"] + P1["πŸ“¦ Jellyfin.Server.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P1 "#jellyfinserverjellyfinservercsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P1 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + + +### tests\Jellyfin.XbmcMetadata.Tests\Jellyfin.XbmcMetadata.Tests.csproj + +#### Project Info + +- **Current Target Framework:** net11.0βœ… +- **SDK-style**: True +- **Project Kind:** DotNetCoreApp +- **Dependencies**: 3 +- **Dependants**: 0 +- **Number of Files**: 10 +- **Lines of Code**: 1043 +- **Estimated LOC to modify**: 0+ (at least 0.0% of the project) + +#### Dependency Graph + +Legend: +πŸ“¦ SDK-style project +βš™οΈ Classic project + +```mermaid +flowchart TB + subgraph current["Jellyfin.XbmcMetadata.Tests.csproj"] + MAIN["πŸ“¦ Jellyfin.XbmcMetadata.Tests.csproj
net11.0"] + click MAIN "#testsjellyfinxbmcmetadatatestsjellyfinxbmcmetadatatestscsproj" + end + subgraph downstream["Dependencies (3"] + P5["πŸ“¦ MediaBrowser.Providers.csproj
net11.0"] + P6["πŸ“¦ MediaBrowser.XbmcMetadata.csproj
net11.0"] + P40["πŸ“¦ Jellyfin.CodeAnalysis.csproj
netstandard2.0"] + click P5 "#mediabrowserprovidersmediabrowserproviderscsproj" + click P6 "#mediabrowserxbmcmetadatamediabrowserxbmcmetadatacsproj" + click P40 "#srcjellyfincodeanalysisjellyfincodeanalysiscsproj" + end + MAIN --> P5 + MAIN --> P6 + MAIN --> P40 + +``` + +### API Compatibility + +| Category | Count | Impact | +| :--- | :---: | :--- | +| πŸ”΄ Binary Incompatible | 0 | High - Require code changes | +| 🟑 Source Incompatible | 0 | Medium - Needs re-compilation and potential conflicting API error fixing | +| πŸ”΅ Behavioral change | 0 | Low - Behavioral changes that may require testing at runtime | +| βœ… Compatible | 0 | | +| ***Total APIs Analyzed*** | ***0*** | | + diff --git a/.github/upgrades/scenarios/new-dotnet-version_02bc64/plan.md b/.github/upgrades/scenarios/new-dotnet-version_02bc64/plan.md new file mode 100644 index 00000000..91dee68f --- /dev/null +++ b/.github/upgrades/scenarios/new-dotnet-version_02bc64/plan.md @@ -0,0 +1,2716 @@ +# .NET 11.0 (PREVIEW) Upgrade Plan + +## Table of Contents +1. [Executive Summary](#executive-summary) +2. [Migration Strategy](#migration-strategy) +3. [Detailed Dependency Analysis](#detailed-dependency-analysis) +4. [Project-by-Project Plans](#project-by-project-plans) +5. [Risk Management](#risk-management) +6. [Testing & Validation Strategy](#testing--validation-strategy) +7. [Complexity & Effort Assessment](#complexity--effort-assessment) +8. [Source Control Strategy](#source-control-strategy) +9. [Success Criteria](#success-criteria) + +--- + +## Executive Summary + +### Scenario Overview +This plan details the upgrade of the Jellyfin media server solution from .NET 9.0 to **.NET 11.0 (PREVIEW)**, encompassing 41 projects (40 application projects plus 1 analyzer project targeting netstandard2.0). + +### Scope +- **Projects to Upgrade**: 40 projects (main codebase) +- **Projects Unchanged**: 1 project (Jellyfin.CodeAnalysis - netstandard2.0 analyzer) +- **Total Lines of Code**: Estimated 200,000+ LOC across solution +- **Project Types**: ASP.NET Core web applications, class libraries, test projects +- **Current Framework**: .NET 9.0 +- **Target Framework**: .NET 11.0 (PREVIEW) + +### Discovered Metrics +- **Total Projects**: 41 +- **Dependency Depth**: 12 levels (from leaf to top-level test projects) +- **Circular Dependencies**: None detected +- **Critical Path Length**: 12 project levels +- **NuGet Packages**: 80 total packages +- **Package Compatibility**: βœ… **100% compatible** - All packages already support .NET 11.0 +- **Security Vulnerabilities**: None detected in current packages +- **Breaking Changes**: No mandatory breaking changes identified by assessment +- **Risk Indicators**: + - Large, complex solution with deep dependency chains + - Preview framework (not production-ready) + - Heavy use of Entity Framework Core and ASP.NET Core + - Database providers (PostgreSQL, SQLite) require careful testing + +### Complexity Classification: **Complex** + +**Justification:** +- **42 projects** exceeds medium threshold (>15 projects) +- **12-level dependency depth** exceeds complexity threshold (>4 levels) +- **No high-risk issues** detected (0 mandatory issues) +- **No security vulnerabilities** in current packages +- **Complex technology stack**: EF Core, ASP.NET Core, multiple database providers, media processing +- **Preview framework target**: .NET 11.0 is not yet released (preview stability concerns) + +Despite the absence of breaking changes or compatibility issues, the solution's **size, depth, and preview framework target** classify this as a **Complex** upgrade requiring careful, phased execution. + +### Selected Strategy: Bottom-Up (Dependency-First) Approach + +**Rationale:** +- **Large solution** (41 projects) benefits from incremental validation +- **Deep dependency tree** (12 levels) requires stable foundation before building upward +- **Preview framework** introduces unknown risks best addressed incrementally +- **Database providers** in mid-levels need thorough testing before application tier +- **Test projects** at multiple levels enable validation after each tier +- **Zero breaking changes** identified, but preview framework may introduce runtime issues +- **Risk-averse approach** appropriate for production media server moving to preview framework + +### Critical Considerations +1. **Preview Framework**: .NET 11.0 is not production-ready; expect potential instability +2. **Package Ecosystem**: While packages report compatibility, preview framework behavior may differ +3. **Database Providers**: PostgreSQL and SQLite providers need extensive testing with .NET 11.0 +4. **Media Processing**: SkiaSharp and media encoding libraries require validation +5. **Performance**: Monitor for performance regressions in preview builds +6. **Breaking Changes**: May emerge during testing despite clean analysis + +### Expected Remaining Iterations +Based on complexity classification and solution structure: +- **Phase 1**: Complete (Discovery & Classification) +- **Phase 2**: 3 iterations (Foundation planning) +- **Phase 3**: 8-10 iterations (Tier-by-tier detailed planning) +- **Total**: ~11-13 iterations to complete plan + +## Migration Strategy + +### Approach Selection: Bottom-Up (Dependency-First) + +**Decision: Incremental tier-by-tier migration** starting from leaf nodes (Tier 2) progressing to top-level application (Tier 11) and tests (Tiers 12-13). + +### Rationale for Bottom-Up Strategy + +#### Why Bottom-Up is Optimal for This Solution + +1. **Large Solution Scale** + - 41 projects exceed threshold for coordinated migration (>15 projects) + - Incremental approach reduces risk of simultaneous failures + - Enables validation at each tier before proceeding + +2. **Deep Dependency Hierarchy** + - 12 levels of dependencies require stable foundation + - Bottom-up ensures each project builds on already-upgraded, tested tier + - No multi-targeting complexity (all projects move to .NET 11.0) + +3. **Preview Framework Target** + - .NET 11.0 is PREVIEW (not production-ready) + - Unknown risks best addressed incrementally + - Early tiers expose framework issues before touching applications + - Allows retreat/adjustment if preview proves unstable + +4. **Clear Dependency Structure** + - DAG (no circular dependencies) enables clean bottom-up flow + - Well-defined tiers with explicit between-tier dependencies + - Each tier can be independently validated + +5. **Critical Database Layer** + - Database providers (Tier 6) require extensive testing + - Must be stable before business logic (Tier 8+) + - Early validation prevents cascading failures + +6. **Test Projects Throughout** + - Test projects in Tiers 3, 5, 7, 9, 12, 13 enable continuous validation + - Each tier completion includes test execution + - Fail-fast at lowest affected tier + +### Alternative Approaches Considered + +#### ❌ All-At-Once Migration +**Rejected because:** +- 41 projects too large for coordinated update +- Preview framework introduces unknown risks +- Single-shot approach would complicate debugging +- Complex solution requires staged validation + +#### ❌ Top-Down (Application-First) +**Rejected because:** +- Would require multi-targeting all dependencies +- Increased complexity managing two framework versions +- Testing top tiers before infrastructure ready is risky +- Database providers must be stable before applications use them + +### Bottom-Up Execution Principles + +#### Strict Tier Ordering +1. βœ… **Must complete Tier N before starting Tier N+1** +2. βœ… **Tier completion = all projects built, tested, validated** +3. βœ… **No tier skipping** - even if tempting to fast-track +4. βœ… **Rollback at tier level** - if tier fails, revert entire tier + +#### Within-Tier Execution +- **Projects within same tier can be upgraded in parallel** (no inter-dependencies) +- **Batch project file updates** for entire tier (single operation) +- **Batch package updates** for entire tier (single operation) +- **Test tier as a whole** before proceeding +- **Tier 8** (12 projects) is largest; can parallelize to speed up + +#### Tier Completion Criteria +Each tier must meet criteria before proceeding: + +1. **Build Success** + - All projects in tier build without errors + - All projects in tier build without warnings (target: zero warnings) + +2. **Package Restoration** + - All NuGet packages restore successfully + - No package dependency conflicts + +3. **Test Execution** + - All test projects in tier pass (if tier contains tests) + - Tests for lower tiers still pass (regression check) + +4. **Code Quality** + - No new compiler errors introduced + - Code analysis passes (StyleCop, analyzers) + +5. **Validation Review** + - Manual review of any unexpected changes + - Verification of preview framework behavior + +### Dependency-Based Ordering Details + +#### Foundation First (Tiers 2-4) +- **Tier 2**: Core infrastructure (Database.Implementations, Extensions, Keyframes) +- **Tier 3**: Data models (Jellyfin.Data) +- **Tier 4**: Shared models (MediaBrowser.Model) + +**Rationale**: These are referenced by all higher tiers. Must be rock-solid. + +#### Infrastructure & Providers (Tiers 5-7) +- **Tier 5**: Common utilities (MediaBrowser.Common) +- **Tier 6**: Database providers (PostgreSQL, SQLite), Naming +- **Tier 7**: Controller abstractions + +**Rationale**: Database providers are critical infrastructure requiring extensive testing before business logic. + +#### Business Logic (Tiers 8-10) +- **Tier 8**: Business logic, media processing, networking (12 projects) +- **Tier 9**: API layer and business tests (8 projects) +- **Tier 10**: Server implementations (2 projects) + +**Rationale**: Business logic depends on stable infrastructure; can parallelize within Tier 8. + +#### Applications & Tests (Tiers 11-13) +- **Tier 11**: Main application (Jellyfin.Server) +- **Tier 12**: Integration tests +- **Tier 13**: Final implementation tests + +**Rationale**: Applications last; integration tests validate entire stack. + +### Parallel vs. Sequential Execution + +#### Sequential (Between Tiers) +- **All tiers execute sequentially** - Tier N+1 waits for Tier N completion +- **No exceptions** - even for small tiers +- **Validation between tiers** - ensures stability before proceeding + +#### Parallel (Within Tier) +Projects within same tier can execute in parallel: + +- **Tier 2** (3 projects): Can parallelize +- **Tier 3** (2 projects): Can parallelize +- **Tier 5** (3 projects): Can parallelize +- **Tier 6** (3 projects): Can parallelize +- **Tier 7** (2 projects): Can parallelize +- **Tier 8** (12 projects): **High parallelism potential** - largest tier +- **Tier 9** (8 projects): Can parallelize (all tests) +- **Tier 10** (2 projects): Can parallelize +- **Tier 12** (2 projects): Can parallelize + +**Parallelization Guidelines:** +- Update project files for all tier projects simultaneously +- Run builds in parallel (if resources allow) +- Aggregate results before proceeding to tests +- Test tier as a cohesive unit (not per-project) + +### Phase Definitions + +The migration consists of **13 phases** (one per tier): + +#### Phase 1: Core Infrastructure (Tier 2) +- **Projects**: 3 +- **Focus**: Database implementations, extensions, keyframe encoding +- **Validation**: Unit tests in Tier 3 + +#### Phase 2: Data Layer (Tier 3) +- **Projects**: 2 +- **Focus**: Data models, first test validation +- **Validation**: Jellyfin.MediaEncoding.Keyframes.Tests + +#### Phase 3: Model Layer (Tier 4) +- **Projects**: 1 +- **Focus**: Central model definitions +- **Validation**: Model tests in Tier 5 + +#### Phase 4: Common Utilities (Tier 5) +- **Projects**: 3 +- **Focus**: Common utilities, model validation tests +- **Validation**: Jellyfin.Extensions.Tests, Jellyfin.Model.Tests + +#### Phase 5: Database Providers (Tier 6) +- **Projects**: 3 +- **Focus**: PostgreSQL, SQLite providers; naming +- **Validation**: Extensive database integration tests (manual + automated) + +#### Phase 6: Controller Layer (Tier 7) +- **Projects**: 2 +- **Focus**: Controller abstractions, naming tests +- **Validation**: Jellyfin.Naming.Tests + +#### Phase 7: Business Logic (Tier 8) +- **Projects**: 12 (largest phase) +- **Focus**: Photos, drawing, networking, media encoding, providers, server infrastructure +- **Validation**: Controller tests + business logic validation + +#### Phase 8: API & Tests (Tier 9) +- **Projects**: 8 +- **Focus**: Jellyfin.Api and comprehensive test suite for Tier 8 +- **Validation**: All Tier 9 tests pass + +#### Phase 9: Server Implementation (Tier 10) +- **Projects**: 2 +- **Focus**: Emby.Server.Implementations, Jellyfin.Api.Tests +- **Validation**: API tests pass + +#### Phase 10: Main Application (Tier 11) +- **Projects**: 1 +- **Focus**: Jellyfin.Server (main entry point) +- **Validation**: Application starts and responds + +#### Phase 11: Integration Tests (Tier 12) +- **Projects**: 2 +- **Focus**: End-to-end integration tests +- **Validation**: All integration tests pass + +#### Phase 12: Final Validation (Tier 13) +- **Projects**: 1 +- **Focus**: Jellyfin.Server.Implementations.Tests +- **Validation**: Complete solution test suite passes + +#### Phase 13: Solution Validation +- **Projects**: All 40 upgraded projects +- **Focus**: Full solution build, all tests, smoke testing +- **Validation**: Comprehensive validation before completion + +### Risk Mitigation for Bottom-Up Strategy + +#### Early Failure Detection +- Tier 2-4 failures detected before touching 90% of solution +- Database provider issues (Tier 6) caught before business logic +- Test projects throughout enable continuous validation + +#### Preview Framework Risks +- Tier 2 upgrade exposes .NET 11.0 preview issues earliest +- Can assess framework stability before committing all projects +- Option to pause/revert if preview proves problematic + +#### Incremental Learning +- Early tiers teach team about .NET 11.0 behavior +- Lessons learned applied to later tiers +- Compilation/runtime patterns identified early + +#### Staged Deployment +- Can deploy lower tiers to staging environment incrementally +- Early performance/compatibility testing +- Risk distributed across multiple phases vs. single big-bang + +### Rollback Strategy + +#### Tier-Level Rollback +- If Tier N fails validation: + 1. Revert all Tier N project file changes + 2. Restore Tier N packages to .NET 9.0 versions + 3. Validate Tiers 1-(N-1) still stable + 4. Analyze failure, adjust plan + 5. Retry Tier N + +#### Solution-Level Rollback +- If preview framework proves unstable: + 1. Git revert to upgrade branch start + 2. Document .NET 11.0 PREVIEW issues + 3. Consider alternative target (.NET 10.0 LTS) + +### Success Criteria Per Phase + +Each phase must achieve: +1. βœ… All projects build without errors +2. βœ… All projects build without warnings +3. βœ… All test projects pass (100% pass rate) +4. βœ… No package dependency conflicts +5. βœ… Code analysis passes +6. βœ… Manual validation complete (for critical tiers) +7. βœ… Performance acceptable (for application tiers) + +Only when all criteria met, proceed to next phase. + +## Detailed Dependency Analysis + +### Dependency Graph Structure + +The Jellyfin solution exhibits a **12-level dependency hierarchy** with clear separation between infrastructure, domain, and application layers. The graph follows a bottom-up structure ideal for tier-based migration. + +``` +Tier 1 (Level 0): Foundation - Analyzer + └─ Jellyfin.CodeAnalysis (netstandard2.0) - NO UPGRADE + +Tier 2 (Level 1): Core Infrastructure + β”œβ”€ Jellyfin.Database.Implementations + β”œβ”€ Jellyfin.Extensions + └─ Jellyfin.MediaEncoding.Keyframes + +Tier 3 (Level 2): Data & Encoding + β”œβ”€ Jellyfin.Data + └─ Jellyfin.MediaEncoding.Keyframes.Tests + +Tier 4 (Level 3): Model Layer + └─ MediaBrowser.Model + +Tier 5 (Level 4): Model Tests & Common Layer + β”œβ”€ Jellyfin.Extensions.Tests + β”œβ”€ Jellyfin.Model.Tests + └─ MediaBrowser.Common + +Tier 6 (Level 5): Domain & Database Providers + β”œβ”€ Emby.Naming + β”œβ”€ Jellyfin.Database.Providers.Postgres + └─ Jellyfin.Database.Providers.Sqlite + +Tier 7 (Level 6): Controller & Naming Tests + β”œβ”€ Jellyfin.Naming.Tests + └─ MediaBrowser.Controller + +Tier 8 (Level 7): Business Logic & Drawing + β”œβ”€ Emby.Photos + β”œβ”€ Jellyfin.Controller.Tests + β”œβ”€ Jellyfin.Drawing + β”œβ”€ Jellyfin.Drawing.Skia + β”œβ”€ Jellyfin.LiveTv + β”œβ”€ Jellyfin.MediaEncoding.Hls + β”œβ”€ Jellyfin.Networking + β”œβ”€ Jellyfin.Server.Implementations + β”œβ”€ MediaBrowser.LocalMetadata + β”œβ”€ MediaBrowser.MediaEncoding + β”œβ”€ MediaBrowser.Providers + └─ MediaBrowser.XbmcMetadata + +Tier 9 (Level 8): API & Business Tests + β”œβ”€ Jellyfin.Api + β”œβ”€ Jellyfin.Common.Tests + β”œβ”€ Jellyfin.LiveTv.Tests + β”œβ”€ Jellyfin.MediaEncoding.Hls.Tests + β”œβ”€ Jellyfin.MediaEncoding.Tests + β”œβ”€ Jellyfin.Networking.Tests + β”œβ”€ Jellyfin.Providers.Tests + └─ Jellyfin.XbmcMetadata.Tests + +Tier 10 (Level 9): Server Implementation + β”œβ”€ Emby.Server.Implementations + └─ Jellyfin.Api.Tests + +Tier 11 (Level 10): Main Application + └─ Jellyfin.Server + +Tier 12 (Level 11): Integration Tests + β”œβ”€ Jellyfin.Server.Integration.Tests + └─ Jellyfin.Server.Tests + +Tier 13 (Level 12): Final Test Layer + └─ Jellyfin.Server.Implementations.Tests +``` + +### Tier Grouping Strategy + +Based on the Bottom-Up Strategy and dependency analysis, projects are grouped into **13 tiers** for migration: + +#### Tier 1: Foundation Analyzer (NO MIGRATION) +- **Jellyfin.CodeAnalysis** (netstandard2.0) +- **Dependencies**: None +- **Used By**: All projects (build-time analyzer) +- **Rationale**: Remains on netstandard2.0 for broad compatibility + +#### Tier 2: Core Infrastructure (3 projects) +- **Jellyfin.Database.Implementations** +- **Jellyfin.Extensions** +- **Jellyfin.MediaEncoding.Keyframes** +- **Dependencies**: Only Jellyfin.CodeAnalysis (unchanged) +- **Rationale**: Leaf nodes with no internal dependencies; database and extension infrastructure + +#### Tier 3: Data Layer (2 projects) +- **Jellyfin.Data** +- **Jellyfin.MediaEncoding.Keyframes.Tests** +- **Dependencies**: Tier 2 projects only +- **Rationale**: Data models and first test validation point + +#### Tier 4: Model Layer (1 project) +- **MediaBrowser.Model** +- **Dependencies**: Tier 2 (Extensions) + Tier 3 (Data) +- **Rationale**: Central model definitions used throughout solution + +#### Tier 5: Common Layer (3 projects) +- **Jellyfin.Extensions.Tests** +- **Jellyfin.Model.Tests** +- **MediaBrowser.Common** +- **Dependencies**: Tiers 2-4 +- **Rationale**: Common utilities and model validation tests + +#### Tier 6: Naming & Database Providers (3 projects) +- **Emby.Naming** +- **Jellyfin.Database.Providers.Postgres** +- **Jellyfin.Database.Providers.Sqlite** +- **Dependencies**: Tiers 2-5 +- **Rationale**: Critical database providers requiring extensive testing + +#### Tier 7: Controller Layer (2 projects) +- **Jellyfin.Naming.Tests** +- **MediaBrowser.Controller** +- **Dependencies**: Tiers 2-6 +- **Rationale**: Controller abstractions; naming validation + +#### Tier 8: Business Logic (12 projects) +- **Emby.Photos** +- **Jellyfin.Controller.Tests** +- **Jellyfin.Drawing** +- **Jellyfin.Drawing.Skia** +- **Jellyfin.LiveTv** +- **Jellyfin.MediaEncoding.Hls** +- **Jellyfin.Networking** +- **Jellyfin.Server.Implementations** +- **MediaBrowser.LocalMetadata** +- **MediaBrowser.MediaEncoding** +- **MediaBrowser.Providers** +- **MediaBrowser.XbmcMetadata** +- **Dependencies**: Tiers 2-7 +- **Rationale**: Largest tier; business logic, media processing, networking; can parallelize within tier + +#### Tier 9: API & Tests (8 projects) +- **Jellyfin.Api** +- **Jellyfin.Common.Tests** +- **Jellyfin.LiveTv.Tests** +- **Jellyfin.MediaEncoding.Hls.Tests** +- **Jellyfin.MediaEncoding.Tests** +- **Jellyfin.Networking.Tests** +- **Jellyfin.Providers.Tests** +- **Jellyfin.XbmcMetadata.Tests** +- **Dependencies**: Tiers 2-8 +- **Rationale**: API layer and comprehensive test coverage for Tier 8 + +#### Tier 10: Server Implementation (2 projects) +- **Emby.Server.Implementations** +- **Jellyfin.Api.Tests** +- **Dependencies**: Tiers 2-9 +- **Rationale**: Main server implementation and API validation + +#### Tier 11: Main Application (1 project) +- **Jellyfin.Server** +- **Dependencies**: Tiers 2-10 +- **Rationale**: Entry point application; depends on all business logic + +#### Tier 12: Integration Tests (2 projects) +- **Jellyfin.Server.Integration.Tests** +- **Jellyfin.Server.Tests** +- **Dependencies**: Tier 11 (Jellyfin.Server) +- **Rationale**: End-to-end application validation + +#### Tier 13: Final Test Validation (1 project) +- **Jellyfin.Server.Implementations.Tests** +- **Dependencies**: Tier 12 (Integration.Tests) +- **Rationale**: Final validation of server implementations with integration context + +### Critical Path Analysis + +**Longest Dependency Chain:** +``` +Jellyfin.CodeAnalysis (Level 0) + β†’ Jellyfin.Database.Implementations (Level 1) + β†’ Jellyfin.Data (Level 2) + β†’ MediaBrowser.Model (Level 3) + β†’ MediaBrowser.Common (Level 4) + β†’ Emby.Naming (Level 5) + β†’ MediaBrowser.Controller (Level 6) + β†’ Jellyfin.Server.Implementations (Level 7) + β†’ Emby.Server.Implementations (Level 9) + β†’ Jellyfin.Server (Level 10) + β†’ Jellyfin.Server.Integration.Tests (Level 11) + β†’ Jellyfin.Server.Implementations.Tests (Level 12) +``` + +**Length**: 13 projects (12 upgrade steps, excluding CodeAnalysis) + +**Implications:** +- Any failure in early tiers blocks all downstream projects +- Database layer (Tiers 2-6) is critical foundation +- Server implementation consolidates most dependencies (Tier 10) +- Test projects enable validation at each tier + +### Circular Dependencies + +**Status**: βœ… **None detected** + +The dependency graph is a **Directed Acyclic Graph (DAG)**, enabling clean bottom-up migration. + +### Key Dependency Relationships + +#### High-Fan-Out Projects (Used by Many) +1. **MediaBrowser.Model** (Level 3): Used by 21 projects + - Central model definitions + - Must be stable before progressing +2. **MediaBrowser.Controller** (Level 6): Used by 12 projects + - Core controller abstractions + - Critical stabilization point +3. **MediaBrowser.Common** (Level 4): Used by 10 projects + - Common utilities + - Early tier with wide impact + +#### High-Fan-In Projects (Depend on Many) +1. **Jellyfin.Server** (Level 10): Depends on 9 direct projects + - Main application entry point + - Consolidates all functionality +2. **Emby.Server.Implementations** (Level 9): Depends on 14 direct projects + - Server implementation layer + - Complex integration point +3. **Jellyfin.Server.Implementations** (Level 7): Depends on 6 direct projects + - Server infrastructure + - Database and core implementation + +### Between-Tier Dependencies + +Each tier depends **only** on lower tiers (strict bottom-up): + +- **Tier 2** β†’ Tier 1 (CodeAnalysis only) +- **Tier 3** β†’ Tiers 1-2 +- **Tier 4** β†’ Tiers 1-3 +- **Tier 5** β†’ Tiers 1-4 +- **Tier 6** β†’ Tiers 1-5 +- **Tier 7** β†’ Tiers 1-6 +- **Tier 8** β†’ Tiers 1-7 +- **Tier 9** β†’ Tiers 1-8 +- **Tier 10** β†’ Tiers 1-9 +- **Tier 11** β†’ Tiers 1-10 +- **Tier 12** β†’ Tiers 1-11 +- **Tier 13** β†’ Tiers 1-12 + +**No cross-tier or reverse dependencies** ensure clean migration flow. + +## Project-by-Project Plans + +### Overview + +This section provides detailed migration plans for each project, organized by tier. Each project includes: +- Current and target state +- Migration steps +- Package updates +- Expected breaking changes +- Code modifications +- Testing strategy +- Validation checklist + +--- + +### Tier 1: Foundation Analyzer (NO MIGRATION) + +#### Jellyfin.CodeAnalysis +**Current State**: netstandard2.0 (Roslyn analyzer) +**Target State**: netstandard2.0 (UNCHANGED) +**Migration**: None required - remains on netstandard2.0 for broad compatibility + +--- + +### Tier 2: Core Infrastructure + +#### Overview +**Projects**: 3 +**Complexity**: Medium +**Risk**: High (first preview framework exposure) +**Effort**: Medium + +This tier establishes the foundation infrastructure: database implementations, extension utilities, and media encoding keyframe support. As the first tier to migrate, it serves as the **early warning system** for .NET 11.0 preview issues. + +--- + +#### Jellyfin.Database.Implementations + +**Current State**: +- **Framework**: .NET 9.0 +- **Type**: Class Library +- **Dependencies**: Jellyfin.CodeAnalysis (unchanged) +- **Used By**: 6 projects (Data layer, database providers, server implementations) +- **Packages**: Microsoft.EntityFrameworkCore 11.0.0-preview.1 (already upgraded) +- **Risk Level**: High (foundation for all data access) + +**Target State**: +- **Framework**: .NET 11.0 +- **Type**: Class Library +- **Dependencies**: No changes +- **Package Changes**: None required (already on .NET 11.0-compatible versions) + +**Migration Steps**: + +1. **Prerequisites** + - βœ… Jellyfin.CodeAnalysis remains unchanged (netstandard2.0) + - βœ… .NET 11.0 SDK installed and verified + - βœ… Backup current solution state + +2. **Framework Update** + - Update `Jellyfin.Database.Implementations.csproj`: + ```xml + net11.0 + ``` + - No other project file changes needed + +3. **Package Updates** + - **All packages already compatible** - no updates required: + - Microsoft.EntityFrameworkCore: 11.0.0-preview.1 βœ… + - Microsoft.EntityFrameworkCore.Relational: 11.0.0-preview.1 βœ… + - Microsoft.EntityFrameworkCore.Design: 11.0.0-preview.1 βœ… + +4. **Expected Breaking Changes** + - βœ… **None identified** by assessment + - ⚠️ **Monitor for**: EF Core 11.0 preview query translation changes + - ⚠️ **Monitor for**: Database provider behavior changes + +5. **Code Modifications** + - **Expected**: None required + - **Potential**: + - EF Core API changes (preview-specific) + - Query translation adjustments + - Migration compatibility + +6. **Testing Strategy** + - **Build Validation**: + - Project builds without errors βœ… + - Zero warnings target βœ… + - Code analysis passes βœ… + + - **Dependency Validation**: + - NuGet restore successful βœ… + - No package conflicts βœ… + + - **Functional Testing**: + - Database context initialization βœ… + - Basic CRUD operations (deferred to Tier 6 with providers) + + - **Performance Baseline**: + - Establish .NET 11.0 build performance metrics + - Compare against .NET 9.0 baseline + +7. **Validation Checklist** + - [ ] Project file updated to net11.0 + - [ ] Build succeeds without errors + - [ ] Build succeeds without warnings + - [ ] NuGet packages restore successfully + - [ ] No dependency conflicts + - [ ] Code analysis passes (StyleCop, IDisposableAnalyzers, etc.) + - [ ] Database context classes compile + - [ ] No compiler warnings about obsolete APIs + - [ ] EF Core design-time tools work (if applicable) + +--- + +#### Jellyfin.Extensions + +**Current State**: +- **Framework**: .NET 9.0 +- **Type**: Class Library +- **Dependencies**: Jellyfin.CodeAnalysis (unchanged) +- **Used By**: MediaBrowser.Model, Jellyfin.Extensions.Tests +- **Packages**: Minimal (mostly BCL) +- **Risk Level**: Low (simple utility library) + +**Target State**: +- **Framework**: .NET 11.0 +- **Type**: Class Library +- **Dependencies**: No changes +- **Package Changes**: None required + +**Migration Steps**: + +1. **Prerequisites** + - βœ… .NET 11.0 SDK available + - βœ… No external package dependencies to validate + +2. **Framework Update** + - Update `Jellyfin.Extensions.csproj`: + ```xml + net11.0 + ``` + +3. **Package Updates** + - **None required** - uses BCL only + +4. **Expected Breaking Changes** + - βœ… **None expected** + - Simple extension methods and utilities + - Minimal BCL surface area + +5. **Code Modifications** + - **Expected**: None + - **Potential**: None anticipated + +6. **Testing Strategy** + - **Build Validation**: + - Build without errors/warnings βœ… + - Code analysis passes βœ… + + - **Unit Testing**: + - Deferred to Tier 5 (Jellyfin.Extensions.Tests) + + - **API Compatibility**: + - Extension methods compile without changes βœ… + - No obsolete API usage βœ… + +7. **Validation Checklist** + - [ ] Project file updated to net11.0 + - [ ] Build succeeds without errors + - [ ] Build succeeds without warnings + - [ ] No package dependencies to update + - [ ] Extension methods compile cleanly + - [ ] Code analysis passes + - [ ] No breaking changes in BCL APIs used + +--- + +#### Jellyfin.MediaEncoding.Keyframes + +**Current State**: +- **Framework**: .NET 9.0 +- **Type**: Class Library +- **Dependencies**: Jellyfin.CodeAnalysis (unchanged) +- **Used By**: MediaBrowser.Controller, Jellyfin.MediaEncoding.Hls, test projects +- **Packages**: Minimal +- **Risk Level**: Low (specialized library) + +**Target State**: +- **Framework**: .NET 11.0 +- **Type**: Class Library +- **Dependencies**: No changes +- **Package Changes**: None required + +**Migration Steps**: + +1. **Prerequisites** + - βœ… .NET 11.0 SDK available + - βœ… Understanding of keyframe extraction functionality + +2. **Framework Update** + - Update `Jellyfin.MediaEncoding.Keyframes.csproj`: + ```xml + net11.0 + ``` + +3. **Package Updates** + - **None required** - minimal external dependencies + +4. **Expected Breaking Changes** + - βœ… **None expected** + - Specialized media encoding logic + - Limited BCL interaction + +5. **Code Modifications** + - **Expected**: None + - **Potential**: + - I/O API changes (if file operations change) + - Stream handling adjustments (unlikely) + +6. **Testing Strategy** + - **Build Validation**: + - Build without errors/warnings βœ… + - Code analysis passes βœ… + + - **Unit Testing**: + - Deferred to Tier 3 (Jellyfin.MediaEncoding.Keyframes.Tests) + + - **Functional Validation**: + - Keyframe extraction logic compiles βœ… + - FFmpeg integration interfaces unchanged βœ… + +7. **Validation Checklist** + - [ ] Project file updated to net11.0 + - [ ] Build succeeds without errors + - [ ] Build succeeds without warnings + - [ ] No external package updates needed + - [ ] Media encoding logic compiles cleanly + - [ ] Code analysis passes + - [ ] FFmpeg integration interfaces compatible + +--- + +### Tier 2: Batch Operations + +Since all 3 projects in Tier 2 have similar migration profiles, they can be **upgraded simultaneously**: + +#### Batch Update Process + +1. **Project File Updates** (Single operation) + - Update all 3 .csproj files to `net11.0` + - Commit: "Upgrade Tier 2 projects to .NET 11.0" + +2. **Build Validation** (Parallel) + - Build all 3 projects + - Check for errors/warnings + - Verify code analysis passes + +3. **Package Restoration** (Parallel) + - Restore NuGet packages for all projects + - Verify no conflicts + +4. **Integration Check** + - Build solution to ensure Tier 2 projects compile together + - Verify dependent projects (still on .NET 9.0) can still reference Tier 2 + +--- + +### Tier 2: Completion Criteria + +Before proceeding to Tier 3, **all** of the following must be met: + +1. βœ… **Build Success** + - All 3 projects build without errors + - All 3 projects build without warnings (zero-warning target) + +2. βœ… **Package Health** + - All packages restored successfully + - No package dependency conflicts + - EF Core design-time tools functional (Database.Implementations) + +3. βœ… **Code Quality** + - Code analysis passes (StyleCop, analyzers) + - No compiler warnings about obsolete APIs + - No new code analysis violations introduced + +4. βœ… **Preview Framework Assessment** + - .NET 11.0 SDK functional + - No blocking preview framework issues discovered + - Build performance acceptable + +5. βœ… **Documentation** + - Any issues encountered documented + - Workarounds noted (if applicable) + - Lessons learned recorded for later tiers + +**Decision Point**: If Tier 2 shows critical .NET 11.0 preview issues, **PAUSE** migration and assess viability. + +--- + +### Tier 2: Package Update Reference + +| Package | Current | Target | Notes | +|---------|---------|--------|-------| +| Microsoft.EntityFrameworkCore | 11.0.0-preview.1 | 11.0.0-preview.1 | Already compatible βœ… | +| Microsoft.EntityFrameworkCore.Relational | 11.0.0-preview.1 | 11.0.0-preview.1 | Already compatible βœ… | +| Microsoft.EntityFrameworkCore.Design | 11.0.0-preview.1 | 11.0.0-preview.1 | Already compatible βœ… | + +**All packages already at .NET 11.0-compatible versions - no package updates required for Tier 2.** + +--- + +### Tier 3: Data Layer + +#### Overview +**Projects**: 2 +**Complexity**: Low +**Risk**: Low +**Effort**: Low + +Data models and first test validation point. Straightforward migration with immediate test feedback. + +--- + +#### Jellyfin.Data + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: Jellyfin.Database.Implementations (Tier 2), Jellyfin.CodeAnalysis +**Risk**: Low (data models) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required (all compatible) +3. Build and validate data model classes compile cleanly + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds without errors/warnings +- [ ] Data entity classes compile +- [ ] EF Core model configuration unchanged +- [ ] Used successfully by MediaBrowser.Model (Tier 4) + +--- + +#### Jellyfin.MediaEncoding.Keyframes.Tests + +**Current State**: .NET 9.0 Test Project (xUnit) +**Target State**: .NET 11.0 Test Project +**Dependencies**: Jellyfin.MediaEncoding.Keyframes (Tier 2), Jellyfin.CodeAnalysis +**Risk**: Low (test project) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required: + - xUnit 2.9.3 βœ… + - xunit.runner.visualstudio 2.8.2 βœ… + - Microsoft.NET.Test.Sdk 18.0.1 βœ… +3. Run tests to validate Tier 2 (MediaEncoding.Keyframes) + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds without errors/warnings +- [ ] All tests run successfully +- [ ] All tests pass (100% pass rate) +- [ ] Test runner compatible with .NET 11.0 +- [ ] Tier 2 keyframes functionality validated + +**Tier 3 Completion Criteria**: +1. Both projects build without errors/warnings +2. Jellyfin.MediaEncoding.Keyframes.Tests: 100% tests pass +3. No package conflicts +4. Tier 2 functionality validated through tests + +--- + +### Tier 4: Model Layer + +#### Overview +**Projects**: 1 +**Complexity**: Medium (high fan-out) +**Risk**: Medium +**Effort**: Low + +Central model definitions used by 21 projects throughout solution. Critical stability point. + +--- + +#### MediaBrowser.Model + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: Jellyfin.Data (Tier 3), Jellyfin.Extensions (Tier 2), Jellyfin.CodeAnalysis +**Used By**: 21 projects (most of solution) +**Risk**: Medium (high fan-out = wide impact) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required (compatible packages) +3. Build and validate model classes compile cleanly + +**Expected Changes**: None + +**Key Focus Areas**: +- DTO models for API serialization +- Query models for filtering/paging +- Configuration models +- Enum definitions + +**Validation**: +- [ ] Build succeeds without errors/warnings +- [ ] All model classes compile cleanly +- [ ] No JSON serialization API changes +- [ ] Enum definitions unchanged +- [ ] Configuration model binding compatible +- [ ] DTOs serialize/deserialize correctly (tested in Tier 5) + +**Special Considerations**: +- **High Fan-Out**: 21 projects depend on this +- **API Surface**: Models used in REST API contracts +- **Serialization**: JSON serialization must remain compatible + +**Tier 4 Completion Criteria**: +1. Project builds without errors/warnings +2. All model classes compile without changes +3. No breaking changes in public API surface +4. Ready for validation by Tier 5 tests + +--- + +### Tier 5: Common Utilities & Model Tests + +#### Overview +**Projects**: 3 +**Complexity**: Low +**Risk**: Low +**Effort**: Low + +Common utilities and validation tests for Tier 4 models. Provides test coverage for central models. + +--- + +#### MediaBrowser.Common + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: MediaBrowser.Model (Tier 4), Jellyfin.CodeAnalysis +**Used By**: 10 projects +**Risk**: Low (utility library) + +**Migration Steps**: +1. Update project file: `net11.0` +2. Package updates - All compatible: + - Microsoft.Extensions.DependencyInjection: 11.0.0-preview.1 βœ… + - Microsoft.Extensions.Logging: 11.0.0-preview.1 βœ… + - Microsoft.Extensions.Http: 11.0.0-preview.1 βœ… +3. Build and validate common utilities + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds without errors/warnings +- [ ] Dependency injection helpers compile +- [ ] Logging utilities compatible +- [ ] HTTP client utilities functional +- [ ] Configuration helpers unchanged + +--- + +#### Jellyfin.Extensions.Tests + +**Current State**: .NET 9.0 Test Project (xUnit) +**Target State**: .NET 11.0 Test Project +**Dependencies**: MediaBrowser.Model (Tier 4), Jellyfin.Extensions (Tier 2), Jellyfin.CodeAnalysis +**Risk**: Low (test project) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required (test packages compatible) +3. Run tests to validate Tier 2 extensions + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds +- [ ] All tests run +- [ ] All tests pass (100%) +- [ ] Tier 2 extensions validated + +--- + +#### Jellyfin.Model.Tests + +**Current State**: .NET 9.0 Test Project (xUnit) +**Target State**: .NET 11.0 Test Project +**Dependencies**: MediaBrowser.Model (Tier 4), Jellyfin.CodeAnalysis +**Risk**: Low (test project) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required (test packages compatible) +3. Run tests to validate Tier 4 models + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds +- [ ] All tests run +- [ ] All tests pass (100%) +- [ ] Tier 4 models validated (DTOs, serialization, configuration) + +**Tier 5 Completion Criteria**: +1. All 3 projects build without errors/warnings +2. Both test projects: 100% tests pass +3. Tier 2 extensions validated +4. Tier 4 models validated +5. Common utilities functional +6. No package conflicts + +--- + +### Tier 6: Database Providers & Naming ⚠️ CRITICAL TIER + +#### Overview +**Projects**: 3 +**Complexity**: High +**Risk**: CRITICAL +**Effort**: High + +**This is the most critical tier in the migration.** Database providers are the foundation for all data access throughout Jellyfin. Both PostgreSQL and SQLite EF Core providers are preview versions for .NET 11.0, requiring extensive validation. + +**πŸ›‘ GO/NO-GO DECISION POINT**: If Tier 6 fails validation, the entire migration may need to pause or revert. + +--- + +#### Emby.Naming + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: MediaBrowser.Model (Tier 4), MediaBrowser.Common (Tier 5), Jellyfin.CodeAnalysis +**Used By**: MediaBrowser.Controller (Tier 7), Emby.Server.Implementations, Jellyfin.Naming.Tests (Tier 7) +**Risk**: Low (naming logic) + +**Migration Steps**: +1. Update project file: `net11.0` +2. No package updates required +3. Build and validate naming logic + +**Expected Changes**: None + +**Validation**: +- [ ] Build succeeds without errors/warnings +- [ ] Naming pattern logic compiles +- [ ] File/folder naming utilities unchanged +- [ ] Validated by Jellyfin.Naming.Tests (Tier 7) + +--- + +#### Jellyfin.Database.Providers.Postgres ⚠️ CRITICAL + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: MediaBrowser.Common (Tier 5), Jellyfin.Database.Implementations (Tier 2), Jellyfin.CodeAnalysis +**Used By**: Jellyfin.Server (Tier 11), Jellyfin.Server.Implementations (Tier 8) +**Risk**: **CRITICAL** (primary database provider for Jellyfin) + +**Package Status**: +- **Npgsql.EntityFrameworkCore.PostgreSQL**: 11.0.0-preview.1 βœ… (already upgraded) +- **Status**: Preview provider for preview framework + +**Migration Steps**: + +1. **Prerequisites** + - PostgreSQL database server available for testing + - Test database with representative Jellyfin schema + - Baseline performance metrics from .NET 9.0 + - Connection string configuration ready + +2. **Framework Update** + - Update project file: `net11.0` + - No package updates required (already on preview) + +3. **Expected Breaking Changes** + - βœ… **None identified** in assessment + - ⚠️ **Potential**: EF Core 11.0 query translation changes + - ⚠️ **Potential**: Npgsql provider-specific behavior changes + - ⚠️ **Potential**: Connection pooling behavior + - ⚠️ **Potential**: Transaction handling differences + +4. **Code Modifications** + - **Expected**: None + - **Potential**: + - DbContext configuration adjustments + - Connection string format changes + - Provider-specific query hints + - Migration compatibility fixes + +5. **Testing Strategy** (EXTENSIVE) + + **Build Validation**: + - [ ] Project builds without errors + - [ ] Project builds without warnings + - [ ] Code analysis passes + - [ ] DbContext registration compiles + + **Database Connection Tests**: + - [ ] Connection string parsing successful + - [ ] Database connection established + - [ ] Connection pooling functional + - [ ] SSL/TLS connections work (if applicable) + - [ ] Connection timeouts handled correctly + + **Migration Tests**: + - [ ] Existing migrations still valid + - [ ] Can apply migrations to empty database + - [ ] Can upgrade from previous schema version + - [ ] Migration history table accessible + - [ ] No schema drift detected + + **CRUD Operations**: + - [ ] INSERT operations successful + - [ ] SELECT queries return correct data + - [ ] UPDATE operations modify records + - [ ] DELETE operations remove records + - [ ] Bulk operations functional + - [ ] Concurrent operations safe + + **Query Translation**: + - [ ] LINQ queries translate to SQL correctly + - [ ] Complex queries (joins, aggregations) work + - [ ] Navigation properties load correctly + - [ ] Explicit loading functional + - [ ] Eager loading (Include) functional + - [ ] Lazy loading compatible (if enabled) + + **Transaction Tests**: + - [ ] Explicit transactions work + - [ ] Rollback functional + - [ ] Nested transactions (if used) + - [ ] Distributed transactions (if used) + - [ ] Transaction isolation levels correct + + **Performance Tests**: + - [ ] Query performance comparable to .NET 9.0 baseline + - [ ] Insert/update performance acceptable + - [ ] Bulk operation performance + - [ ] Connection pool performance + - [ ] No memory leaks detected + - [ ] No excessive allocations + + **Concurrency Tests**: + - [ ] Concurrent reads safe + - [ ] Concurrent writes safe + - [ ] Optimistic concurrency functional + - [ ] Pessimistic locking works (if used) + - [ ] Deadlock handling correct + + **Edge Cases**: + - [ ] NULL value handling + - [ ] Large result sets + - [ ] Long-running queries + - [ ] Connection drops handled + - [ ] Database restart recovery + +6. **Validation Checklist** + - [ ] All connection tests pass + - [ ] All migration tests pass + - [ ] All CRUD tests pass + - [ ] All query translation tests pass + - [ ] All transaction tests pass + - [ ] Performance within acceptable range (<10% regression) + - [ ] Concurrency tests pass + - [ ] Edge case tests pass + - [ ] No critical issues detected + +7. **Performance Baseline Comparison** + - Document query performance vs. .NET 9.0 + - Compare connection pool behavior + - Measure memory usage + - Track any regressions + +**Contingency Plans**: +- **If connection issues**: Check Npgsql preview release notes; report bug upstream +- **If query translation fails**: Rewrite queries or wait for provider fix +- **If performance degrades >20%**: Profile and optimize or consider blocking issue +- **If critical bugs**: May need to pause migration until Npgsql fix available + +--- + +#### Jellyfin.Database.Providers.Sqlite ⚠️ CRITICAL + +**Current State**: .NET 9.0 Class Library +**Target State**: .NET 11.0 Class Library +**Dependencies**: MediaBrowser.Common (Tier 5), Jellyfin.Database.Implementations (Tier 2), Jellyfin.CodeAnalysis +**Used By**: Jellyfin.Server (Tier 11) +**Risk**: **CRITICAL** (alternative database provider for Jellyfin) + +**Package Status**: +- **Microsoft.EntityFrameworkCore.Sqlite**: 11.0.0-preview.1 βœ… (already upgraded) +- **Microsoft.Data.Sqlite**: 11.0.0-preview.1 βœ… (already upgraded) +- **Status**: Preview provider for preview framework + +**Migration Steps**: + +1. **Prerequisites** + - SQLite database file available for testing + - Test database with representative Jellyfin schema + - Baseline performance metrics from .NET 9.0 + - Write permissions verified + +2. **Framework Update** + - Update project file: `net11.0` + - No package updates required (already on preview) + +3. **Expected Breaking Changes** + - βœ… **None identified** in assessment + - ⚠️ **Potential**: EF Core 11.0 query translation changes + - ⚠️ **Potential**: SQLite provider-specific behavior changes + - ⚠️ **Potential**: File locking behavior + - ⚠️ **Potential**: WAL mode changes + +4. **Code Modifications** + - **Expected**: None + - **Potential**: + - DbContext configuration adjustments + - Connection string format changes + - Pragmas or SQLite-specific settings + - Migration compatibility fixes + +5. **Testing Strategy** (EXTENSIVE) + + **Build Validation**: + - [ ] Project builds without errors + - [ ] Project builds without warnings + - [ ] Code analysis passes + - [ ] DbContext registration compiles + + **Database File Tests**: + - [ ] Database file created successfully + - [ ] Database file opened correctly + - [ ] File locking works correctly + - [ ] WAL mode functional (if used) + - [ ] File permissions respected + - [ ] Backup/restore operations work + + **Migration Tests**: + - [ ] Existing migrations still valid + - [ ] Can apply migrations to empty database + - [ ] Can upgrade from previous schema version + - [ ] Migration history table accessible + - [ ] No schema drift detected + + **CRUD Operations**: + - [ ] INSERT operations successful + - [ ] SELECT queries return correct data + - [ ] UPDATE operations modify records + - [ ] DELETE operations remove records + - [ ] Bulk operations functional + - [ ] Concurrent operations safe + + **Query Translation**: + - [ ] LINQ queries translate to SQL correctly + - [ ] Complex queries (joins, aggregations) work + - [ ] Navigation properties load correctly + - [ ] Explicit loading functional + - [ ] Eager loading (Include) functional + - [ ] SQLite-specific SQL features work + + **Transaction Tests**: + - [ ] Explicit transactions work + - [ ] Rollback functional + - [ ] Nested transactions (if used) + - [ ] Transaction isolation correct + + **Performance Tests**: + - [ ] Query performance comparable to .NET 9.0 baseline + - [ ] Insert/update performance acceptable + - [ ] Bulk operation performance + - [ ] File I/O performance + - [ ] No memory leaks detected + - [ ] Database size remains reasonable + + **Concurrency Tests**: + - [ ] Concurrent reads safe + - [ ] Concurrent writes safe (within SQLite limits) + - [ ] File locking prevents corruption + - [ ] Busy timeout handling works + + **Edge Cases**: + - [ ] NULL value handling + - [ ] Large result sets + - [ ] Long-running queries + - [ ] Database corruption recovery (if applicable) + - [ ] Disk full scenarios handled + +6. **Validation Checklist** + - [ ] All file operation tests pass + - [ ] All migration tests pass + - [ ] All CRUD tests pass + - [ ] All query translation tests pass + - [ ] All transaction tests pass + - [ ] Performance within acceptable range (<10% regression) + - [ ] Concurrency tests pass + - [ ] Edge case tests pass + - [ ] No critical issues detected + +7. **Performance Baseline Comparison** + - Document query performance vs. .NET 9.0 + - Compare file I/O behavior + - Measure database file size + - Track any regressions + +**Contingency Plans**: +- **If file locking issues**: Check Microsoft.Data.Sqlite preview release notes +- **If query translation fails**: Rewrite queries or wait for provider fix +- **If performance degrades >20%**: Profile and optimize or consider blocking issue +- **If critical bugs**: May need to pause migration until EF Core Sqlite fix available + +--- + +### Tier 6: Integration Testing + +After all 3 projects migrate, perform **cross-provider validation**: + +#### Database Provider Integration Tests + +1. **Dual-Provider Tests** + - [ ] Can switch between PostgreSQL and SQLite configurations + - [ ] Same queries work on both providers + - [ ] Schema migrations compatible across providers + - [ ] Data integrity maintained across providers + +2. **Real-World Scenario Tests** + - [ ] User authentication/authorization queries + - [ ] Media library metadata queries + - [ ] Playback session tracking + - [ ] User preferences and settings + - [ ] Search and filtering operations + +3. **Load Testing** + - [ ] Concurrent user simulations + - [ ] Large library operations (10k+ items) + - [ ] Sustained query load + - [ ] Memory usage under load + +4. **Failure Recovery** + - [ ] Database connection drop recovery + - [ ] Transaction rollback on errors + - [ ] Database restart handling + - [ ] Corrupted data detection + +--- + +### Tier 6: Completion Criteria (STRICT) + +πŸ›‘ **This tier has the STRICTEST completion criteria.** Do not proceed to Tier 7 unless ALL criteria met: + +1. βœ… **Build Success** + - All 3 projects build without errors + - All 3 projects build without warnings + +2. βœ… **Database Connection** + - PostgreSQL provider connects successfully + - SQLite provider connects successfully + - Connection pooling functional for both + +3. βœ… **Migration Compatibility** + - All existing migrations apply successfully + - No schema drift detected + - Migration history intact + +4. βœ… **CRUD Operations** + - All CRUD tests pass (100%) for both providers + - Concurrency tests pass + - Transaction tests pass + +5. βœ… **Query Translation** + - LINQ queries translate correctly + - Complex queries work + - Navigation loading functional + +6. βœ… **Performance Acceptable** + - Query performance: <10% regression vs. .NET 9.0 + - Connection performance: Comparable to baseline + - Memory usage: No significant increase + - No memory leaks detected + +7. βœ… **Integration Tests** + - Dual-provider tests pass + - Real-world scenario tests pass + - Load tests pass (within acceptable limits) + - Failure recovery tests pass + +8. βœ… **Manual Validation** + - Senior engineer review of provider behavior + - Database administrator verification (for PostgreSQL) + - Sign-off on performance metrics + +9. βœ… **Documentation** + - All issues encountered documented + - Performance baselines recorded + - Known limitations documented + - Contingency plans ready + +**πŸ›‘ DECISION POINT**: If **any** critical issues detected in Tier 6, **PAUSE** migration: +- **Option A**: Report issues to Npgsql/EF Core teams; wait for fixes +- **Option B**: Implement workarounds (if feasible) +- **Option C**: Revert migration; target .NET 10.0 LTS instead +- **Option D**: Continue with documented risks (ONLY if non-critical) + +**Tier 6 is the primary risk gate. Proceed to Tier 7 only with high confidence in database provider stability.** + +--- + +### Tier 7: Controller Layer + +#### Overview +**Projects**: 2 (Jellyfin.Naming.Tests, MediaBrowser.Controller) +**Complexity**: Medium +**Risk**: Medium +**Effort**: Medium + +Controller abstractions and naming validation. MediaBrowser.Controller has high fan-out (12 projects depend on it). + +#### Quick Migration Profile + +**Both Projects**: +- Update to `net11.0` +- No package updates required (all compatible) +- Build and run tests + +**MediaBrowser.Controller**: +- **Risk**: Medium (high fan-out) +- **Dependencies**: Tiers 2-6 +- **Used By**: 12 projects (business logic tier) +- **Focus**: Controller abstractions, interfaces for repositories/services +- **Validation**: Jellyfin.Controller.Tests (Tier 8) + +**Jellyfin.Naming.Tests**: +- **Risk**: Low (test project) +- **Validates**: Emby.Naming (Tier 6) +- **Expected**: 100% tests pass + +**Tier 7 Completion Criteria**: +1. Both projects build without errors/warnings +2. Jellyfin.Naming.Tests: 100% pass rate +3. MediaBrowser.Controller public API unchanged +4. Ready for Tier 8 business logic + +--- + +### Tier 8: Business Logic ⚑ LARGEST TIER + +#### Overview +**Projects**: 12 (largest tier) +**Complexity**: High +**Risk**: High +**Effort**: High + +This tier contains most of Jellyfin's business logic: media processing, networking, providers, drawing, and server infrastructure. **High parallelization potential** within tier. + +#### Project Grouping for Parallel Execution + +**Group A: Media Processing (3 projects)** +- Emby.Photos +- MediaBrowser.MediaEncoding +- Jellyfin.MediaEncoding.Hls + +**Group B: Drawing & Graphics (2 projects)** +- Jellyfin.Drawing +- Jellyfin.Drawing.Skia + +**Group C: Business Services (4 projects)** +- Jellyfin.LiveTv +- Jellyfin.Networking +- MediaBrowser.Providers +- MediaBrowser.XbmcMetadata + +**Group D: Metadata & Server Infrastructure (3 projects)** +- MediaBrowser.LocalMetadata +- Jellyfin.Server.Implementations +- Jellyfin.Controller.Tests + +--- + +#### Group A: Media Processing + +##### Emby.Photos +- **Risk**: Medium (image processing) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Controller +- **Focus**: Photo library management +- **Validation**: Build + integration tests + +##### MediaBrowser.MediaEncoding +- **Risk**: High (FFmpeg integration) +- **Packages**: No updates needed +- **Focus**: Video/audio transcoding, FFmpeg process management +- **Key Tests**: + - [ ] FFmpeg process spawning works + - [ ] Stream handling functional + - [ ] Transcoding profiles correct + - [ ] Process cleanup on abort + +##### Jellyfin.MediaEncoding.Hls +- **Risk**: Medium (HLS streaming) +- **Dependencies**: MediaBrowser.Controller, Jellyfin.MediaEncoding.Keyframes +- **Focus**: HLS playlist generation, segmentation +- **Key Tests**: + - [ ] Manifest generation correct + - [ ] Segment timing accurate + - [ ] Playlist updates work + +--- + +#### Group B: Drawing & Graphics + +##### Jellyfin.Drawing +- **Risk**: Medium (graphics operations) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Common, MediaBrowser.Controller +- **Focus**: Image operations, thumbnail generation +- **Key Tests**: + - [ ] Image loading/saving works + - [ ] Thumbnail generation functional + - [ ] Image format conversions + +##### Jellyfin.Drawing.Skia +- **Risk**: High (native library interop) +- **Packages**: + - SkiaSharp 3.116.1 βœ… + - SkiaSharp.HarfBuzz 3.116.1 βœ… + - SkiaSharp.NativeAssets.Linux 3.116.1 βœ… + - HarfBuzzSharp.NativeAssets.Linux 8.3.1.1 βœ… +- **Focus**: SkiaSharp-based image processing +- **Critical Tests**: + - [ ] SkiaSharp native libraries load + - [ ] Image processing operations work + - [ ] Font rendering functional + - [ ] Cross-platform compatibility (Linux primary) + - [ ] No memory leaks in native interop +- **Contingency**: If SkiaSharp issues, check for .NET 11.0-specific native library versions + +--- + +#### Group C: Business Services + +##### Jellyfin.LiveTv +- **Risk**: Medium (Live TV functionality) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Common, MediaBrowser.Controller +- **Focus**: Live TV guide, recording management +- **Tests**: Jellyfin.LiveTv.Tests (Tier 9) + +##### Jellyfin.Networking +- **Risk**: Medium (network operations) +- **Dependencies**: MediaBrowser.Common, MediaBrowser.Controller +- **Focus**: Network discovery, DLNA, SSDP +- **Key Tests**: + - [ ] Network interface detection + - [ ] DLNA device discovery + - [ ] Socket operations + - [ ] UDP/TCP communication +- **Tests**: Jellyfin.Networking.Tests (Tier 9) + +##### MediaBrowser.Providers +- **Risk**: Medium (metadata providers) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Controller +- **Focus**: Metadata fetching from external sources (TMDb, MusicBrainz, etc.) +- **Packages**: + - TMDbLib 2.3.0 βœ… + - MetaBrainz.MusicBrainz 8.0.1 βœ… +- **Tests**: Jellyfin.Providers.Tests (Tier 9) + +##### MediaBrowser.XbmcMetadata +- **Risk**: Low (metadata parsing) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Controller +- **Focus**: NFO file parsing/writing +- **Tests**: Jellyfin.XbmcMetadata.Tests (Tier 9) + +--- + +#### Group D: Metadata & Server Infrastructure + +##### MediaBrowser.LocalMetadata +- **Risk**: Low (local metadata) +- **Dependencies**: MediaBrowser.Model, MediaBrowser.Controller +- **Focus**: Local metadata file operations + +##### Jellyfin.Server.Implementations +- **Risk**: High (server infrastructure) +- **Dependencies**: 6 direct dependencies (Jellyfin.Database.Providers.Postgres, Jellyfin.Data, MediaBrowser.Model, MediaBrowser.Controller, Jellyfin.Database.Implementations) +- **Focus**: Server core implementations, dependency injection, configuration +- **Key Areas**: + - Database integration (uses Tier 6 providers) + - Configuration management + - Service registration + - Plugin infrastructure +- **Tests**: Jellyfin.Server.Implementations.Tests (Tier 13) + +##### Jellyfin.Controller.Tests +- **Risk**: Low (test project) +- **Validates**: MediaBrowser.Controller (Tier 7) +- **Expected**: 100% tests pass + +--- + +### Tier 8: Batch Migration Strategy + +Due to 12 projects, **use phased approach within tier**: + +#### Phase 8A: Update All Project Files (Single Commit) +- Update all 12 .csproj files to `net11.0` +- Commit: "Upgrade Tier 8 projects to .NET 11.0" + +#### Phase 8B: Build Validation (Parallel by Group) +- Build Group A (Media Processing) +- Build Group B (Drawing & Graphics) +- Build Group C (Business Services) +- Build Group D (Metadata & Infrastructure) +- Fix any compilation errors + +#### Phase 8C: Integration Testing +- Run Jellyfin.Controller.Tests (validates Tier 7) +- Integration test between groups +- Validate SkiaSharp native libraries (Group B) +- Validate FFmpeg integration (Group A) +- Validate networking operations (Group C) + +--- + +### Tier 8: Completion Criteria + +1. βœ… **Build Success** + - All 12 projects build without errors + - All 12 projects build without warnings + +2. βœ… **Package Health** + - All packages restored + - No conflicts + - SkiaSharp native libraries load successfully + +3. βœ… **Group Validation** + - **Group A**: FFmpeg operations functional; HLS generation works + - **Group B**: SkiaSharp operations successful; image processing works + - **Group C**: Network operations functional; metadata providers work + - **Group D**: Server infrastructure compiles; controller tests pass + +4. βœ… **Critical Tests** + - Jellyfin.Controller.Tests: 100% pass + - Native library interop validated (SkiaSharp) + - Process management validated (FFmpeg) + - Network operations validated + +5. βœ… **Performance** + - Image processing: Comparable to .NET 9.0 + - Transcoding: No significant regression + - Network operations: Acceptable latency + +**Tier 8 represents majority of application functionality. Thorough validation required before proceeding.** + +--- + +### Tier 9: API & Tests + +#### Overview +**Projects**: 8 (Jellyfin.Api + 7 test projects) +**Complexity**: Medium +**Risk**: Medium +**Effort**: Medium + +API layer and comprehensive test coverage for Tier 8 business logic. + +#### Projects + +**Jellyfin.Api** (ASP.NET Core API): +- **Risk**: High (REST API) +- **Dependencies**: Jellyfin.Networking, Jellyfin.MediaEncoding.Hls, MediaBrowser.MediaEncoding, MediaBrowser.Controller +- **Packages**: + - Microsoft.AspNetCore.Authorization: 11.0.0-preview.1 βœ… + - Swashbuckle.AspNetCore: 7.3.2 βœ… + - Swashbuckle.AspNetCore.ReDoc: 6.9.0 βœ… +- **Key Areas**: + - REST API controllers + - Authentication/authorization + - API versioning + - OpenAPI/Swagger +- **Tests**: Jellyfin.Api.Tests (Tier 10) + +**Test Projects** (7 projects): +- Jellyfin.Common.Tests +- Jellyfin.LiveTv.Tests +- Jellyfin.MediaEncoding.Hls.Tests +- Jellyfin.MediaEncoding.Tests +- Jellyfin.Networking.Tests +- Jellyfin.Providers.Tests +- Jellyfin.XbmcMetadata.Tests + +**Migration Strategy**: +1. Update all 8 project files to net11.0 +2. Build API project; fix any ASP.NET Core compatibility issues +3. Run all 7 test projects (validates Tier 8) + +**Tier 9 Completion Criteria**: +1. Jellyfin.Api builds without errors/warnings +2. API controllers compile; routing works +3. Authentication/authorization unchanged +4. Swagger/OpenAPI generation works +5. **All 7 test projects: 100% pass rate** +6. Tier 8 business logic validated through tests + +--- + +### Tier 10: Server Implementation + +#### Overview +**Projects**: 2 +**Complexity**: High +**Risk**: High +**Effort**: High + +Server implementations that integrate all lower tiers. + +#### Emby.Server.Implementations +- **Risk**: High (integration complexity) +- **Dependencies**: 14 direct dependencies (most of solution) +- **Focus**: Server implementation layer integrating all features +- **Migration**: Update to net11.0; validate integration +- **Tests**: Jellyfin.Server.Implementations.Tests (Tier 13) + +#### Jellyfin.Api.Tests +- **Risk**: Low (test project) +- **Validates**: Jellyfin.Api (Tier 9) +- **Expected**: 100% tests pass + +**Tier 10 Completion Criteria**: +1. Both projects build without errors/warnings +2. Jellyfin.Api.Tests: 100% pass +3. Server implementations compile and integrate all dependencies +4. No integration conflicts + +--- + +### Tier 11: Main Application + +#### Overview +**Projects**: 1 (Jellyfin.Server) +**Complexity**: High +**Risk**: High +**Effort**: Medium + +Main application entry point - consolidates all functionality. + +#### Jellyfin.Server +- **Risk**: High (application entry point) +- **Dependencies**: 9 direct dependencies +- **Type**: ASP.NET Core application +- **Packages**: + - Serilog.AspNetCore: 10.0.0 βœ… + - prometheus-net.AspNetCore: 8.2.1 βœ… + - Microsoft.AspNetCore.Mvc.Testing: 11.0.0-preview.1 βœ… +- **Key Areas**: + - Application startup (Program.cs, Startup.cs) + - ASP.NET Core hosting + - Middleware pipeline + - Dependency injection configuration + - Logging configuration (Serilog) + - Metrics (Prometheus) + +**Migration Steps**: +1. Update to net11.0 +2. Validate startup configuration +3. Test application starts +4. Validate middleware pipeline +5. Check dependency injection registration +6. Verify logging/metrics + +**Critical Tests**: +- [ ] Application starts successfully +- [ ] No startup exceptions +- [ ] All services registered correctly +- [ ] Middleware pipeline intact +- [ ] API responds to requests +- [ ] Health checks pass +- [ ] Metrics collected +- [ ] Logging functional + +**Tier 11 Completion Criteria**: +1. Project builds without errors/warnings +2. Application starts successfully +3. Basic HTTP requests work (200 OK) +4. Health checks pass +5. No startup errors in logs +6. Ready for integration testing + +--- + +### Tier 12: Integration Tests + +#### Overview +**Projects**: 2 +**Complexity**: Medium +**Risk**: Medium +**Effort**: Medium + +End-to-end integration testing of full application stack. + +#### Jellyfin.Server.Integration.Tests +- **Risk**: Medium (integration tests) +- **Dependencies**: Jellyfin.Server (Tier 11) +- **Focus**: End-to-end API testing, authentication flows, feature integration + +#### Jellyfin.Server.Tests +- **Risk**: Medium (application tests) +- **Dependencies**: Jellyfin.Server (Tier 11) +- **Focus**: Server startup, configuration, basic functionality + +**Migration**: Update both to net11.0; run full test suite + +**Tier 12 Completion Criteria**: +1. Both test projects build +2. Jellyfin.Server.Tests: 100% pass +3. Jellyfin.Server.Integration.Tests: 100% pass +4. All integration scenarios validated +5. Authentication/authorization flows work +6. API endpoints functional + +--- + +### Tier 13: Final Test Validation + +#### Overview +**Projects**: 1 +**Complexity**: Low +**Risk**: Low +**Effort**: Low + +Final validation of server implementations with integration context. + +#### Jellyfin.Server.Implementations.Tests +- **Risk**: Low (final test validation) +- **Dependencies**: Tier 12 (integration tests), Emby.Server.Implementations, Jellyfin.Server.Implementations +- **Focus**: Server implementation validation + +**Migration**: Update to net11.0; run tests + +**Tier 13 Completion Criteria**: +1. Project builds +2. 100% tests pass +3. All server implementations validated +4. No regressions detected + +--- + +## Testing & Validation Strategy + +### Multi-Level Testing Approach + +The migration employs testing at every tier to ensure stability before proceeding. + +#### Per-Tier Testing + +**Build-Time Validation** (Every Tier): +- Zero compilation errors +- Zero warnings (target) +- Code analysis passes +- Package restoration successful + +**Unit Testing** (Tiers with Test Projects): +- 100% test pass rate required +- No skipped tests +- No degraded performance +- Tests validate lower tiers + +**Integration Testing** (Critical Tiers): +- Tier 6: Database provider integration tests +- Tier 9: API integration tests +- Tier 12: Full application integration tests + +#### Phase-by-Phase Testing Requirements + +| Phase | Test Requirements | Success Criteria | +|-------|-------------------|------------------| +| **Phase 1** (Tier 2) | Build validation; no unit tests yet | Builds clean; preview framework functional | +| **Phase 2** (Tier 3) | Jellyfin.MediaEncoding.Keyframes.Tests | 100% pass; Tier 2 validated | +| **Phase 3** (Tier 4) | Build only; tested in Phase 4 | Builds clean | +| **Phase 4** (Tier 5) | Jellyfin.Extensions.Tests + Jellyfin.Model.Tests | 100% pass; Tiers 2 & 4 validated | +| **Phase 5** (Tier 6) | **CRITICAL: Extensive database tests** | All database integration tests pass | +| **Phase 6** (Tier 7) | Jellyfin.Naming.Tests | 100% pass; Tier 6 validated | +| **Phase 7** (Tier 8) | Jellyfin.Controller.Tests | 100% pass; Tier 7 validated | +| **Phase 8** (Tier 9) | 7 test projects | 100% pass all; Tier 8 validated | +| **Phase 9** (Tier 10) | Jellyfin.Api.Tests | 100% pass; API validated | +| **Phase 10** (Tier 11) | Manual smoke tests | Application starts; basic features work | +| **Phase 11** (Tier 12) | Integration + Server tests | 100% pass; full stack validated | +| **Phase 12** (Tier 13) | Jellyfin.Server.Implementations.Tests | 100% pass; server validated | +| **Phase 13** (All) | **Full solution validation** | All tests pass; smoke tests pass; performance acceptable | + +### Manual Testing Requirements + +#### Tier 11 Smoke Tests (Critical) +After Jellyfin.Server migrates, perform manual validation: + +1. **Application Startup** + - [ ] Server starts without errors + - [ ] No exceptions in startup logs + - [ ] Health checks respond + +2. **Basic Features** + - [ ] Web UI loads + - [ ] User authentication works + - [ ] Library browsing functional + - [ ] Media playback initiates + +3. **API Validation** + - [ ] REST API responds + - [ ] Authentication endpoints work + - [ ] Basic CRUD operations successful + +4. **Database Operations** + - [ ] Database queries work (PostgreSQL or SQLite) + - [ ] No connection errors + - [ ] CRUD operations persist + +### Performance Testing + +**Baseline Comparison Points**: +- Tier 6: Database query performance +- Tier 8: Image processing, transcoding performance +- Tier 11: Application startup time, API response time + +**Acceptable Performance**: +- Query performance: <10% regression +- Image/video processing: <15% regression +- Startup time: <20% regression +- Memory usage: <15% increase + +**Performance Degradation Response**: +- Document regression +- Profile with dotnet-trace/PerfView +- Report to .NET team if framework-related +- Consider optimization or pause if severe (>30% regression) + +### Comprehensive Validation (Phase 13) + +After Tier 13 complete, perform full solution validation: + +#### Build Validation +- [ ] Full solution builds without errors +- [ ] Full solution builds without warnings +- [ ] All projects target net11.0 (except CodeAnalysis) +- [ ] No package conflicts across solution + +#### Test Suite Validation +- [ ] All 15 test projects run successfully +- [ ] 100% test pass rate across solution +- [ ] No flaky tests +- [ ] Test execution time acceptable + +#### Smoke Testing +- [ ] Application starts and runs +- [ ] All major features functional: + - User authentication + - Library management + - Media playback + - Transcoding + - Live TV (if applicable) + - Metadata fetching + - Image processing + - Network discovery +- [ ] No critical errors in logs +- [ ] Health checks pass + +#### Performance Validation +- [ ] Startup time within acceptable range +- [ ] API response times acceptable +- [ ] Database query performance good +- [ ] Transcoding performance acceptable +- [ ] Memory usage reasonable +- [ ] No memory leaks detected + +#### Deployment Testing +- [ ] Application deploys successfully +- [ ] Runs on target platforms (Linux, Windows, Docker) +- [ ] Configuration migration works +- [ ] Database migrations successful +- [ ] Existing data accessible + +#### Rollback Validation +- [ ] Can revert to previous .NET version if needed +- [ ] Backup/restore procedures work +- [ ] Database rollback possible (if needed) + +## Risk Management + +### High-Level Risk Assessment + +The migration to .NET 11.0 (PREVIEW) presents **moderate to high risk** despite clean compatibility analysis: + +#### Risk Categories + +| Risk Level | Description | Count | Projects/Areas | +|------------|-------------|-------|----------------| +| **CRITICAL** | Preview framework; database providers | 2 | .NET 11.0 PREVIEW stability; PostgreSQL/SQLite EF providers | +| **HIGH** | Large complex projects; media processing | 5 | Jellyfin.Server, Emby.Server.Implementations, MediaBrowser.MediaEncoding, SkiaSharp, HLS encoding | +| **MEDIUM** | ASP.NET Core application; multiple dependencies | 8 | Jellyfin.Api, Jellyfin.Server.Implementations, MediaBrowser.Controller, networking, providers | +| **LOW** | Small libraries; test projects | 25 | Extensions, models, most test projects | + +### Critical Risks + +#### 1. Preview Framework Instability (.NET 11.0 PREVIEW) + +**Risk**: CRITICAL +**Impact**: Entire solution +**Probability**: HIGH + +**Description**: +.NET 11.0 is in preview - not production-ready. May exhibit: +- Runtime instability +- Unexpected breaking changes in preview builds +- Performance regressions +- Undocumented API changes +- Preview build tooling issues +- Missing or incomplete features + +**Mitigation**: +- βœ… Bottom-up approach exposes issues early (Tier 2 discovery) +- βœ… Extensive testing at each tier before proceeding +- βœ… Monitor .NET 11.0 preview release notes for known issues +- βœ… Maintain ability to rollback to .NET 9.0 or switch to .NET 10.0 LTS +- βœ… Test on target deployment environments early +- βœ… Consider pausing if critical preview bugs discovered + +**Contingency**: +- If critical preview issues: revert and target .NET 10.0 LTS instead +- If minor issues: document and work around, monitor for preview fixes +- If blocking issues in Tier 2-4: pause migration until preview stabilizes + +#### 2. Database Provider Compatibility (Tier 6) + +**Risk**: CRITICAL +**Impact**: All database operations (entire application) +**Probability**: MEDIUM + +**Description**: +Database providers are critical infrastructure: +- **Npgsql.EntityFrameworkCore.PostgreSQL 11.0.0-preview.1**: Preview provider for preview framework +- **Microsoft.EntityFrameworkCore.Sqlite 11.0.0-preview.1**: Preview EF Core provider +- Jellyfin.Database.Implementations integrates both providers +- Any provider issue breaks data access throughout application + +**Mitigation**: +- βœ… Tier 6 dedicated phase for database provider validation +- βœ… Extensive integration testing with real databases (PostgreSQL, SQLite) +- βœ… Test migration scenarios, CRUD operations, query performance +- βœ… Validate connection pooling, transaction behavior +- βœ… Performance benchmarking vs. .NET 9.0 baseline +- βœ… Test under load/concurrent operations + +**Contingency**: +- If provider issues: report to Npgsql/EF Core teams, monitor for fixes +- If blocking: consider staying on .NET 9.0 until stable provider releases +- If PostgreSQL issues only: validate SQLite as temporary fallback +- Database provider failures block entire migration at Tier 6 + +### High Risks + +#### 3. Media Processing Libraries (SkiaSharp, Tier 8) + +**Risk**: HIGH +**Impact**: Image processing, thumbnail generation, graphics +**Probability**: MEDIUM + +**Description**: +- SkiaSharp 3.116.1 used for image processing +- HarfBuzzSharp.NativeAssets.Linux for font rendering +- Native library interop may have .NET 11.0 issues +- Cross-platform compatibility concerns (Linux, Windows, macOS) + +**Mitigation**: +- βœ… Test image processing workflows in Tier 8 +- βœ… Validate thumbnail generation, image transcoding +- βœ… Test on target platforms (Linux primary for Jellyfin) +- βœ… Verify native library loading and interop +- βœ… Performance testing for image operations + +**Contingency**: +- If issues: check for SkiaSharp .NET 11.0 updates +- Report issues to SkiaSharp maintainers +- May need to wait for library updates + +#### 4. Main Server Application (Jellyfin.Server, Tier 11) + +**Risk**: HIGH +**Impact**: Application entry point, all features +**Probability**: LOW + +**Description**: +- Main application consolidates all functionality +- ASP.NET Core 11.0 preview hosting +- Startup configuration, middleware, dependency injection +- All features converge here + +**Mitigation**: +- βœ… Tiers 2-10 stable before reaching Tier 11 +- βœ… Comprehensive integration testing +- βœ… Manual smoke testing of key user scenarios +- βœ… Performance monitoring vs. baseline +- βœ… Error handling and logging verification + +**Contingency**: +- If startup issues: check ASP.NET Core 11.0 preview breaking changes +- Isolate failing features and test independently +- May need ASP.NET Core configuration adjustments + +#### 5. Entity Framework Core 11.0 Preview + +**Risk**: HIGH +**Impact**: All data access +**Probability**: MEDIUM + +**Description**: +- EF Core 11.0.0-preview.1 used throughout solution +- Query translation, migrations, change tracking +- Preview may have query translation issues or performance changes + +**Mitigation**: +- βœ… Validate existing database migrations still work +- βœ… Test query patterns used throughout application +- βœ… Monitor query performance +- βœ… Validate LINQ-to-SQL translation +- βœ… Test include/navigation loading + +**Contingency**: +- If query translation fails: rewrite queries or wait for EF Core fixes +- Performance issues: profile and optimize or report upstream +- Migration issues: may need manual SQL adjustments + +### Medium Risks + +#### 6. ASP.NET Core 11.0 API Compatibility (Tier 9) + +**Risk**: MEDIUM +**Impact**: REST API, authentication, authorization +**Probability**: MEDIUM + +**Description**: +- Jellyfin.Api uses ASP.NET Core 11.0 preview +- Authentication, authorization, middleware pipeline +- API controllers, routing, model binding + +**Mitigation**: +- βœ… API tests in Tier 9 validate endpoints +- βœ… Test authentication/authorization flows +- βœ… Validate OpenAPI/Swagger generation +- βœ… Test API versioning + +**Contingency**: +- If auth issues: review ASP.NET Core Identity changes +- If routing breaks: adjust route configurations +- API compatibility issues may require code changes + +#### 7. Media Encoding & Streaming (Tier 8-9) + +**Risk**: MEDIUM +**Impact**: Video transcoding, HLS streaming +**Probability**: LOW + +**Description**: +- MediaBrowser.MediaEncoding, Jellyfin.MediaEncoding.Hls +- Video/audio transcoding, HLS playlist generation +- FFmpeg integration (process spawning, stream handling) + +**Mitigation**: +- βœ… Test transcoding workflows +- βœ… Validate HLS manifest generation +- βœ… Test FFmpeg process management +- βœ… Performance validation for encoding + +**Contingency**: +- If process issues: check .NET 11.0 Process API changes +- If streaming breaks: validate HLS encoding pipeline +- May need FFmpeg command adjustments + +#### 8. Networking & Connectivity (Tier 8) + +**Risk**: MEDIUM +**Impact**: Network discovery, DLNA, remote access +**Probability**: LOW + +**Description**: +- Jellyfin.Networking for network operations +- DLNA, SSDP, network interface detection +- Socket operations, UDP/TCP communication + +**Mitigation**: +- βœ… Test network discovery scenarios +- βœ… Validate DLNA device detection +- βœ… Test under various network configurations +- βœ… Socket operation validation + +**Contingency**: +- If network issues: check .NET 11.0 networking changes +- May need Socket or HttpClient configuration adjustments +- DLNA issues may require protocol-level debugging + +### Low Risks + +#### 9. Test Projects + +**Risk**: LOW +**Impact**: Testing infrastructure only +**Probability**: LOW + +**Description**: +15 test projects throughout tiers; xUnit 2.9.3, Moq 4.18.4 + +**Mitigation**: +- βœ… Test framework compatibility pre-verified +- βœ… Test projects upgraded incrementally with their targets +- βœ… Validation at each tier + +**Contingency**: +- If test framework issues: update xUnit/Moq/AutoFixture +- Test failures indicate actual issues, not test framework problems + +#### 10. Small Utility Libraries + +**Risk**: LOW +**Impact**: Limited to specific features +**Probability**: VERY LOW + +**Description**: +- Extensions, utilities, models (Tiers 2-5) +- Simple, well-tested code +- Minimal external dependencies + +**Mitigation**: +- βœ… Unit tests cover functionality +- βœ… Early tiers - failures detected immediately +- βœ… Easy to isolate and fix + +**Contingency**: +- Minimal risk; standard debugging if issues arise + +### Risk Mitigation Matrix + +| Tier | Primary Risks | Mitigation Strategy | Fallback | +|------|---------------|---------------------|----------| +| **Tier 2** | Preview framework first exposure | Extensive testing; early warning system | Revert if critical issues | +| **Tier 3-5** | Model/data layer stability | Unit tests, validation | Isolated fixes | +| **Tier 6** | Database providers (CRITICAL) | Integration tests, performance testing | Block migration if fails | +| **Tier 7** | Controller abstractions | Naming tests, validation | Standard debugging | +| **Tier 8** | Media processing, networking | Functional testing, cross-platform validation | Feature-specific fixes | +| **Tier 9** | API, authentication | API tests, auth flow validation | ASP.NET Core config adjustments | +| **Tier 10-11** | Server implementation, main app | Integration tests, smoke testing | Startup configuration fixes | +| **Tier 12-13** | End-to-end validation | Full test suite, manual validation | Comprehensive debugging | + +### Rollback Triggers + +Rollback or pause migration if: + +1. βœ… **Tier 2-4 failures**: Preview framework shows critical instability +2. βœ… **Tier 6 failure**: Database providers unusable +3. βœ… **>20% test failures** in any tier +4. βœ… **Performance degradation** >30% in benchmarks +5. βœ… **Blocking preview bugs** with no workaround +6. βœ… **Security vulnerabilities** in preview framework +7. βœ… **Critical runtime errors** not present in .NET 9.0 + +### Risk Acceptance + +The following risks are **accepted**: + +- βœ… **Preview framework instability**: Required for .NET 11.0 evaluation +- βœ… **Minor breaking changes**: Expected in preview; can be addressed +- βœ… **Performance variations**: Preview builds may have unoptimized code +- βœ… **Incomplete preview features**: Can work around or wait for releases + +### Continuous Risk Monitoring + +Throughout migration: +- Monitor .NET 11.0 preview announcements and known issues +- Track package update releases for compatibility fixes +- Performance benchmark each tier vs. .NET 9.0 baseline +- Document all issues encountered for future reference +- Maintain communication with .NET/EF Core/package maintainer communities + +## Testing & Validation Strategy +[To be filled] + +## Complexity & Effort Assessment + +### Overall Complexity: **COMPLEX** + +Based on solution structure, technology stack, and preview framework target. + +### Per-Tier Complexity Assessment + +| Tier | Projects | Complexity | Dependencies | Risk | Effort | Rationale | +|------|----------|------------|--------------|------|--------|-----------| +| **Tier 1** | 1 | N/A | None | None | None | No migration (netstandard2.0) | +| **Tier 2** | 3 | **Medium** | CodeAnalysis only | High | Medium | First preview exposure; database/extension infrastructure | +| **Tier 3** | 2 | **Low** | Tier 2 | Low | Low | Data models + 1 test; straightforward | +| **Tier 4** | 1 | **Medium** | Tiers 2-3 | Medium | Low | Central models (high fan-out); single project | +| **Tier 5** | 3 | **Low** | Tiers 2-4 | Low | Low | Common utilities + 2 tests; minimal complexity | +| **Tier 6** | 3 | **High** | Tiers 2-5 | **Critical** | High | Database providers (PostgreSQL, SQLite); extensive testing required | +| **Tier 7** | 2 | **Medium** | Tiers 2-6 | Medium | Medium | Controller abstractions + 1 test; moderate complexity | +| **Tier 8** | 12 | **High** | Tiers 2-7 | High | High | Largest tier; media processing, networking, business logic; parallelizable | +| **Tier 9** | 8 | **Medium** | Tiers 2-8 | Medium | Medium | API + 7 test projects; validation-heavy | +| **Tier 10** | 2 | **High** | Tiers 2-9 | High | High | Server implementations; integration point for all features | +| **Tier 11** | 1 | **High** | Tiers 2-10 | High | Medium | Main application; entry point; consolidates all functionality | +| **Tier 12** | 2 | **Medium** | Tier 11 | Medium | Medium | Integration tests; end-to-end validation | +| **Tier 13** | 1 | **Low** | Tier 12 | Low | Low | Final test project; single project validation | + +### Tier-by-Tier Effort Breakdown + +#### Low Complexity Tiers (4 tiers, 7 projects) +**Tiers**: 3, 5, 13 +**Total Projects**: 7 +**Characteristics**: +- Small codebases or test-only projects +- Minimal dependencies or simple utilities +- Straightforward migration +- Low risk of issues + +**Estimated Effort**: Low per tier + +--- + +#### Medium Complexity Tiers (5 tiers, 10 projects) +**Tiers**: 2, 4, 7, 9, 12 +**Total Projects**: 10 +**Characteristics**: +- Infrastructure components (Tier 2) +- Central models with high fan-out (Tier 4) +- Controller abstractions (Tier 7) +- API + multiple tests (Tier 9) +- Integration testing (Tier 12) + +**Estimated Effort**: Medium per tier + +--- + +#### High Complexity Tiers (3 tiers, 15 projects) +**Tiers**: 6, 8, 10, 11 +**Total Projects**: 15 +**Characteristics**: +- **Tier 6**: Database providers (CRITICAL; extensive testing) +- **Tier 8**: Largest tier (12 projects); media processing, networking, business logic +- **Tier 10**: Server implementations (integration complexity) +- **Tier 11**: Main application (consolidation point) + +**Estimated Effort**: High per tier + +### Resource Requirements + +#### Skill Levels Needed + +1. **Senior .NET Engineers** (Required) + - Deep .NET framework knowledge + - Experience with preview frameworks + - EF Core expertise (for Tier 6) + - ASP.NET Core experience (for Tiers 9-11) + +2. **Database Engineers** (Tier 6) + - PostgreSQL administration + - SQLite expertise + - EF Core migrations and performance tuning + +3. **Media Processing Engineers** (Tier 8) + - FFmpeg integration knowledge + - Video encoding/transcoding experience + - HLS streaming protocols + +4. **QA/Testing Engineers** (All tiers) + - Test framework expertise (xUnit) + - Integration testing + - Performance testing + +#### Parallel Execution Capacity + +**Optimal Team Structure**: +- **Tier 2-5, 7**: 1-2 engineers (sequential or small parallel) +- **Tier 6**: 2-3 engineers (database providers need dedicated focus) +- **Tier 8**: 3-5 engineers (12 projects; high parallelism potential) +- **Tier 9-11**: 2-3 engineers (integration complexity) +- **Tier 12-13**: 1-2 engineers (testing focus) + +**Minimum Team**: 2 senior .NET engineers + 1 QA engineer +**Optimal Team**: 4-5 engineers (mix of specializations) + 2 QA engineers + +### Phase Complexity Summary + +| Phase | Tier(s) | Complexity | Effort | Duration Estimate | +|-------|---------|------------|--------|-------------------| +| **Phase 1** | Tier 2 | Medium | Medium | *Relative: Medium* | +| **Phase 2** | Tier 3 | Low | Low | *Relative: Low* | +| **Phase 3** | Tier 4 | Medium | Low | *Relative: Low* | +| **Phase 4** | Tier 5 | Low | Low | *Relative: Low* | +| **Phase 5** | Tier 6 | **High** | **High** | *Relative: High* | +| **Phase 6** | Tier 7 | Medium | Medium | *Relative: Medium* | +| **Phase 7** | Tier 8 | **High** | **High** | *Relative: High* | +| **Phase 8** | Tier 9 | Medium | Medium | *Relative: Medium* | +| **Phase 9** | Tier 10 | **High** | **High** | *Relative: High* | +| **Phase 10** | Tier 11 | High | Medium | *Relative: Medium* | +| **Phase 11** | Tier 12 | Medium | Medium | *Relative: Medium* | +| **Phase 12** | Tier 13 | Low | Low | *Relative: Low* | +| **Phase 13** | All | High | High | *Relative: High* | + +**Note**: Duration estimates are relative complexity ratings only. Actual time depends on team size, experience, issue discovery, and preview framework stability. + +### Complexity Factors by Tier + +#### Tier 2: Core Infrastructure (Medium) +- **Factors**: + - First exposure to .NET 11.0 preview + - Database implementation foundation + - Extension infrastructure +- **Challenges**: + - Unknown preview framework issues + - Critical foundation for all higher tiers +- **Mitigation**: Thorough testing; early warning system + +#### Tier 6: Database Providers (High) ⚠️ CRITICAL +- **Factors**: + - PostgreSQL EF Core provider (preview) + - SQLite EF Core provider (preview) + - Database operations throughout solution depend on this +- **Challenges**: + - Provider preview stability + - Query translation, migrations, performance + - Concurrent operations, connection pooling +- **Mitigation**: Extensive integration testing, performance benchmarking + +#### Tier 8: Business Logic (High) +- **Factors**: + - 12 projects (largest tier) + - Media processing (SkiaSharp, FFmpeg) + - Networking (DLNA, SSDP) + - Providers, metadata, encoding +- **Challenges**: + - Diverse functionality requiring different expertise + - Native library interop (SkiaSharp) + - Process management (FFmpeg) +- **Mitigation**: Parallelization; specialized testing per area + +#### Tier 10: Server Implementation (High) +- **Factors**: + - Emby.Server.Implementations (14 dependencies) + - Integration point for most features +- **Challenges**: + - Complex integration + - Many failure points from dependencies +- **Mitigation**: Tiers 2-9 stable; incremental testing + +#### Tier 11: Main Application (High) +- **Factors**: + - Application entry point + - ASP.NET Core 11.0 hosting + - Startup, middleware, DI configuration +- **Challenges**: + - All features converge here + - ASP.NET Core preview stability +- **Mitigation**: Comprehensive smoke testing; staging environment validation + +### Incremental Benefit Realization + +Benefits realized after each tier completion: + +| Tier Complete | Benefits Unlocked | +|---------------|-------------------| +| **Tier 2** | Foundation infrastructure on .NET 11.0; preview framework viability assessed | +| **Tier 3** | Data models available to higher tiers | +| **Tier 4** | Central models on .NET 11.0; broad compatibility established | +| **Tier 5** | Common utilities available; model validation complete | +| **Tier 6** | **Database providers validated** (critical milestone); data access stable | +| **Tier 7** | Controller abstractions ready; naming validated | +| **Tier 8** | **Business logic on .NET 11.0**; media processing, networking validated | +| **Tier 9** | **API layer operational**; comprehensive business logic tests pass | +| **Tier 10** | **Server implementations complete**; integration validated | +| **Tier 11** | **Main application functional**; end-to-end features available | +| **Tier 12** | **Integration testing complete**; confidence in full stack | +| **Tier 13** | **All tests pass**; solution fully validated | + +### Critical Milestones + +1. **Tier 2 Complete**: Preview framework viability confirmed +2. **Tier 6 Complete**: Database providers stable (go/no-go decision point) +3. **Tier 8 Complete**: Business logic operational +4. **Tier 11 Complete**: Application functional +5. **Tier 13 Complete**: Full solution validation + +### Effort Distribution + +- **Low Effort Tiers** (3, 5, 13): ~15% of total effort +- **Medium Effort Tiers** (2, 4, 7, 9, 12): ~35% of total effort +- **High Effort Tiers** (6, 8, 10, 11): ~50% of total effort + +**Highest effort areas**: +1. Tier 6 (Database providers) - CRITICAL +2. Tier 8 (Business logic) - Largest tier +3. Tier 10-11 (Server & application) - Integration complexity + +## Source Control Strategy + +### Branching Strategy + +**Primary Branch**: `upgrade-to-NET11` +**Source Branch**: `pgsql_testing_branch` +**Merge Target**: `pgsql_testing_branch` (after successful validation) + +#### Branch Management +- Upgrade branch created from `pgsql_testing_branch` +- All migration work on `upgrade-to-NET11` +- Tier-by-tier commits +- Protected milestones: Tags after Tier 6, Tier 11, Tier 13 + +### Commit Strategy + +**Format**: `Upgrade Tier [N] ([Name]) to .NET 11.0` + +**Per-Tier Commits** (Recommended): +- One commit per tier +- Atomic changes +- Includes test validation + +### Review and Merge + +**Single PR** after complete validation (recommended for preview framework) + +**PR Checklist**: +- [ ] All 13 tiers complete +- [ ] 100% test pass rate +- [ ] Full solution builds clean +- [ ] Performance acceptable +- [ ] Documentation updated + +**Review Requirements**: 2+ senior engineers + +### Rollback Plan + +**Triggers**: Critical preview bugs, database failures, severe performance degradation + +**Method**: Git revert to pre-migration state + +--- + +## Success Criteria + +### Technical Criteria + +**Build & Compilation**: +- βœ… 40 projects upgraded to .NET 11.0 +- βœ… Solution builds without errors/warnings +- βœ… No package conflicts + +**Testing**: +- βœ… All 15 test projects: 100% pass rate +- βœ… No flaky tests + +**Database Providers (CRITICAL)**: +- βœ… PostgreSQL & SQLite functional +- βœ… Migrations successful +- βœ… Performance: <10% regression + +**Application**: +- βœ… Jellyfin.Server starts +- βœ… All major features work +- βœ… API functional + +**Performance**: +- βœ… Startup: <20% regression +- βœ… Database queries: <10% regression +- βœ… API/processing: <15% regression +- βœ… Memory: <15% increase + +**Code Quality**: +- βœ… All analyzers pass +- βœ… No new warnings + +**Bottom-Up Strategy**: +- βœ… All 13 tiers completed in order +- βœ… Tier 6 extensively validated + +**Deployment**: +- βœ… Deploys to target platforms +- βœ… Rollback tested + +### Definition of Done + +Migration complete when: +- All technical criteria met +- All stakeholder approvals obtained +- PR merged +- Post-merge validation passed + +--- + +## Final Notes + +### .NET 11.0 Preview Warning + +Targeting **PREVIEW framework** - expect instability. Monitor closely; consider .NET 10.0 LTS if critical issues arise. + +### Post-Migration + +1. Monitor .NET 11.0 release progression +2. Update to stable package versions +3. Performance tuning +4. Report issues to .NET team + +--- + +**Plan Version**: 1.0 +**Target**: .NET 11.0 (PREVIEW) +**Strategy**: Bottom-Up (Dependency-First) +**Tiers**: 13 (Tier 1 unchanged, Tiers 2-13 migrated) diff --git a/.github/upgrades/scenarios/new-dotnet-version_02bc64/scenario.json b/.github/upgrades/scenarios/new-dotnet-version_02bc64/scenario.json new file mode 100644 index 00000000..fe782ac2 --- /dev/null +++ b/.github/upgrades/scenarios/new-dotnet-version_02bc64/scenario.json @@ -0,0 +1,13 @@ +{ + "scenarioId": "New-DotNet-Version", + "operationId": "02bc6448-a69d-4ff4-a0ec-0db07ec3a09a", + "description": "Upgrade solution or project to new version of .NET", + "startTime": "2026-03-05T22:18:32.3921759Z", + "lastUpdateTime": "2026-03-06T02:24:30.9349358Z", + "stage": "Planning", + "properties": { + "SelectedScenarioStrategy": "BottomUp", + "UpgradeTargetFramework": "net11.0" + }, + "folderPath": "" +} \ No newline at end of file