From 3b161b473143ac95e9fd48ec3c92316198ada39c Mon Sep 17 00:00:00 2001 From: Wendell Jones Date: Thu, 5 Mar 2026 21:29:18 -0500 Subject: [PATCH] Add .NET 11.0 upgrade plan, assessment, and risk docs Added a detailed .NET 11.0 (PREVIEW) upgrade plan (plan.md) outlining a bottom-up migration strategy, dependency analysis, risk management, testing, and success criteria for the Jellyfin solution. Introduced assessment.md, assessment.json, and assessment.csv with comprehensive compatibility analysis for all 41 projects, confirming no blocking issues. Added Risk Management Strategies.md detailing mitigation and rollback procedures. Also included scenario.json describing the upgrade scenario and selected strategy. No existing files were changed. --- .../Risk Management Strategies.md | 393 +++ .../new-dotnet-version_02bc64/assessment.csv | 1 + .../new-dotnet-version_02bc64/assessment.json | 1222 +++++++ .../new-dotnet-version_02bc64/assessment.md | 2999 +++++++++++++++++ .../new-dotnet-version_02bc64/plan.md | 2716 +++++++++++++++ .../new-dotnet-version_02bc64/scenario.json | 13 + 6 files changed, 7344 insertions(+) create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/Risk Management Strategies.md create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/assessment.csv create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/assessment.json create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/assessment.md create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/plan.md create mode 100644 .github/upgrades/scenarios/new-dotnet-version_02bc64/scenario.json 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