# .NET 10 Package Compatibility Matrix

> **Scope:** universal
> **Layer:** 0 (always load)
> **Keywords:** dotnet, net10, csharp, patterns, core
> **Load When:** always

## Package Matrix

| Package | .NET 9 (Last) | .NET 10 (Min) | Breaking Changes |
|---------|---------------|---------------|------------------|
| **MudBlazor** | 6.21.0 | **>= 8.15.0** | Theme API, generics, events |
| **FluentUI.Blazor** | 4.x | **>= 5.0.0** | Component params, icon system |
| **Hangfire.AspNetCore** | 1.8.x | **>= 1.8.22** | None (TFM update only) |
| **EF Core** | 9.x | **10.0.0** | Vector search, primitive collections |
| **Azure.Storage.Blobs** | 12.19.x | **>= 12.20.0** | None |
| **Agent Framework** | N/A | **>= 1.0.0** | Replaces Semantic Kernel |

---

## MudBlazor 6.x → 8.x

```csharp
// Theme API
// WRONG (v6): new MudTheme { Palette = new Palette { Primary = "#7C3AED" } }
// CORRECT (v8):
var theme = new MudTheme
{
    PaletteLight = new PaletteLight { Primary = "#7C3AED" },
    PaletteDark = new PaletteDark { Primary = "#9D74F2" }
};

// Generic components
// WRONG (v6): <MudChip OnClose="HandleClose">
// CORRECT (v8): <MudChip T="string" Closed="HandleClosed">Tag</MudChip>

// Dialog
// WRONG (v6): <MudDialog DisableBackdropClick="true">
// CORRECT (v8): <MudDialog BackdropClick="() => {}">
```

**Migration:** `Palette` → `PaletteLight`/`PaletteDark`, `OnClose` → `Closed`, `DisableBackdropClick` → `BackdropClick`

---

## Fluent UI 4.x → 5.x

```csharp
// Component params: Appearance now requires @
// WRONG (v4): <FluentButton Appearance="Appearance.Accent">
// CORRECT (v5): <FluentButton Appearance="@Appearance.Accent">

// Icon system
// WRONG (v4): <FluentIcon Name="@FluentIcons.Add" />
// CORRECT (v5): <FluentIcon Icon="@Icons.Add" />
```

> **Ref:** `fluent-ui-blazor.md` for full Fluent UI API reference.

---

## EF Core 10 New Features

```csharp
// Vector search (Azure SQL)
[Column(TypeName = "vector(384)")]
public float[] Embedding { get; set; } = Array.Empty<float>();

var similar = await context.Products
    .OrderBy(p => EF.Functions.VectorDistance(p.Embedding, searchEmbedding))
    .Take(10).ToListAsync();

// Primitive collections (stored as JSON)
public List<string> Roles { get; set; } = new();
```

**Breaking:** Required navigation properties now throw if not loaded. Query splitting behavior changed.

---

## Agent Framework (replaces Semantic Kernel)

```csharp
// DEPRECATED (Semantic Kernel)
var kernel = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(...).Build();

// NEW (Microsoft Agent Framework)
var agent = new Agent().WithModel("gpt-4").WithInstructions("...");
var response = await agent.RunAsync("Summarize this text...");
```

> **Ref:** `stacks/blazor-azure/.morph/standards/agent-framework-setup.md` for full migration guide.

---

## Troubleshooting

| Issue | Cause | Fix |
|-------|-------|-----|
| "JS interop not initialized" | Incompatible UI lib version | Upgrade to .NET 10 compatible version |
| "Cannot find PaletteLight" | MudBlazor 6.x API with 8.x | Use `PaletteLight`/`PaletteDark` |
| CS0618 deprecation warnings | Old API still compiles | Migrate to new API |

## Migration Checklist

- [ ] Git commit/branch (backup)
- [ ] `TargetFramework` → `net10.0`
- [ ] Update all `Microsoft.*` to 10.x
- [ ] EF Core → 10.0.x
- [ ] MudBlazor → 8.15.0+ (if used): theme, generics, events
- [ ] Fluent UI → 5.0.0+ (if used): params, icons
- [ ] Build succeeds + all tests pass
- [ ] UI renders correctly

---

*MORPH-SPEC by Polymorphism Tech*
