diff --git a/Aaru.Server/Components/Admin/AdminNavMenu.razor b/Aaru.Server/Components/Admin/AdminNavMenu.razor
index 9c00a769..c20b6f48 100644
--- a/Aaru.Server/Components/Admin/AdminNavMenu.razor
+++ b/Aaru.Server/Components/Admin/AdminNavMenu.razor
@@ -20,6 +20,9 @@
Filters
+
+ Operating systems
+
diff --git a/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor b/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor
new file mode 100644
index 00000000..26004dca
--- /dev/null
+++ b/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor
@@ -0,0 +1,51 @@
+@page "/admin/operating-systems"
+@using OperatingSystem = Aaru.Server.Database.Models.OperatingSystem
+@attribute [Authorize]
+@layout AdminLayout
+
+@inject Microsoft.EntityFrameworkCore.IDbContextFactory DbContextFactory
+
+Operating systems
+
+@if(!_initialized)
+{
+
+
Loading...
+
+
+ return;
+}
+
+
+
+
+
+ |
+ @DisplayNameHelper.GetDisplayName(typeof(OperatingSystem), nameof(OperatingSystem.Name))
+ |
+
+ @DisplayNameHelper.GetDisplayName(typeof(OperatingSystem), nameof(OperatingSystem.Version))
+ |
+
+ @DisplayNameHelper.GetDisplayName(typeof(OperatingSystem), nameof(OperatingSystem.Count))
+ |
+
+
+
+ @foreach(OperatingSystem item in _items)
+ {
+
+ |
+ @item.Name
+ |
+
+ @item.Version
+ |
+
+ @item.Count
+ |
+
+ }
+
+
+
\ No newline at end of file
diff --git a/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor.cs b/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor.cs
new file mode 100644
index 00000000..76f46037
--- /dev/null
+++ b/Aaru.Server/Components/Admin/Pages/OperatingSystems/View.razor.cs
@@ -0,0 +1,27 @@
+using Microsoft.EntityFrameworkCore;
+using DbContext = Aaru.Server.Database.DbContext;
+using OperatingSystem = Aaru.Server.Database.Models.OperatingSystem;
+
+namespace Aaru.Server.Components.Admin.Pages.OperatingSystems;
+
+public partial class View
+{
+ bool _initialized;
+ List _items;
+
+ ///
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ StateHasChanged();
+
+ await using DbContext ctx = await DbContextFactory.CreateDbContextAsync();
+
+ _items = await ctx.OperatingSystems.OrderBy(static o => o.Name).ThenBy(static o => o.Version).ToListAsync();
+
+ _initialized = true;
+
+ StateHasChanged();
+ }
+}
\ No newline at end of file