![]() |
VOOZH | about |
dotnet add package Rystem.RepositoryFramework.Web.Components --version 10.0.8
NuGet\Install-Package Rystem.RepositoryFramework.Web.Components -Version 10.0.8
<PackageReference Include="Rystem.RepositoryFramework.Web.Components" Version="10.0.8" />
<PackageVersion Include="Rystem.RepositoryFramework.Web.Components" Version="10.0.8" />Directory.Packages.props
<PackageReference Include="Rystem.RepositoryFramework.Web.Components" />Project file
paket add Rystem.RepositoryFramework.Web.Components --version 10.0.8
#r "nuget: Rystem.RepositoryFramework.Web.Components, 10.0.8"
#:package Rystem.RepositoryFramework.Web.Components@10.0.8
#addin nuget:?package=Rystem.RepositoryFramework.Web.Components&version=10.0.8Install as a Cake Addin
#tool nuget:?package=Rystem.RepositoryFramework.Web.Components&version=10.0.8Install as a Cake Tool
Rystem.RepositoryFramework.Web.Components provides a server-side Blazor admin UI on top of Repository Framework registrations.
It gives you generic pages for:
and lets you customize menu labels, icons, form rendering, localization, and edit-page actions per repository.
dotnet add package Rystem.RepositoryFramework.Web.Components
The package registers:
/_Host and /_AuthorizedHost inside the package area)It does not replace normal Blazor Server setup.
You still need:
AddServerSideBlazor()app.MapBlazorHub()This is the working shape used by the sample app.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddServerSideBlazor();
builder.Services
.AddRepositoryUi(settings =>
{
settings.Name = "Repository App";
settings.Icon = "dashboard";
})
.AddDefaultSkinForUi();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.AddDefaultRepositoryEndpoints();
app.Run();
AddRepositoryUi(...)builder.Services.AddRepositoryUi(settings =>
{
settings.Name = "Admin";
settings.Icon = "savings";
settings.Image = "/logo.png";
});
AppSettings includes:
| Property | Notes |
|---|---|
Name |
Required app name shown in the UI |
Icon |
Optional Material icon name |
Image |
Optional top-bar image |
Palette |
Active palette settings |
Sizing |
Sizing and typography settings |
RazorPagesForRoutingAdditionalAssemblies |
Extra assemblies for the Blazor router |
AddRepositoryUi<T>(...)There is also a generic overload intended to add an extra assembly for routing.
Important caveat: the current implementation does not preserve that additional assembly setting correctly, so treat this overload as unreliable for now.
Use:
app.AddDefaultRepositoryEndpoints();
This method:
UseStaticFiles()/Repository/Language/{culture}/Repository/Settings/Theme/{themeKey}/Repository/Identity/Logout when authenticated UI is enabledIt does not map the Blazor hub for you.
Use:
builder.Services
.AddRepositoryUi(settings =>
{
settings.Name = "Admin";
})
.WithAuthenticatedUi();
What this actually does:
/_Host page to the package /_AuthorizedHost page/Repository/Identity/LogoutWhat it does not do:
UseAuthentication() or UseAuthorization()Those are still your responsibility.
Enable built-in localization with:
builder.Services
.AddRepositoryUi(settings =>
{
settings.Name = "Admin";
})
.AddDefaultLocalization();
The package then enables language switching through:
GET /Repository/Language/{culture}Important notes:
en-US, es-ES, it-IT, fr-FR, and de-DEbuilder.Services
.AddRepository<AppUser, int>(settings =>
{
settings
.WithLocalization<AppUser, int, IStringLocalizer<SharedResource>>();
});
builder.Services
.AddRepositoryUi(settings =>
{
settings.Name = "Admin";
})
.AddDefaultSkinForUi();
This registers:
LightDarkbuilder.Services
.AddRepositoryUi(settings =>
{
settings.Name = "Admin";
})
.AddDefaultSkinForUi()
.AddSkinForUi("Corporate", palette =>
{
palette.Primary = "#003366";
palette.Secondary = "#0066cc";
palette.BackgroundColor = "#f4f6f8";
palette.Color = "#1a1a2e";
});
Runtime switching happens through:
GET /Repository/Settings/Theme/{themeKey}Important note: the theme cookie is written with Secure = true, so HTTPS is the safe assumption for real use.
These extensions hang off IRepositoryBuilder<T, TKey>.
| Method | Purpose |
|---|---|
SetDefaultUiRoot<T, TKey>() |
Make this repository the landing page for the package router |
DoNotExposeInUi<T, TKey>() |
Hide the repository from the menu |
ExposeFor<T, TKey>(index) |
Set menu ordering |
WithIcon<T, TKey>(icon) |
Set menu icon |
WithName<T, TKey>(name) |
Set menu label |
AddAction<T, TKey, TAction>() |
Add a custom edit-page action |
MapPropertiesForUi<T, TKey, TUiMapper>() |
Customize form rendering and defaults |
WithLocalization<T, TKey, TLocalization>() |
Attach a localizer for this repository |
builder.Services
.AddRepository<AppUser, int>(settings =>
{
settings
.WithIcon("manage_accounts")
.WithName("User")
.ExposeFor(2)
.SetDefaultUiRoot()
.MapPropertiesForUi<AppUser, int, AppUserDesignMapper>()
.WithLocalization<AppUser, int, IStringLocalizer<SharedResource>>();
});
Register actions with AddAction<T, TKey, TAction>().
public sealed class ArchiveUserAction : IRepositoryEditAction<AppUser, int>
{
public string Name => "Archive";
public string? IconName => "archive";
public ValueTask<bool> InvokeAsync(Entity<AppUser, int> entity)
{
return ValueTask.FromResult(true);
}
}
The action appears on the edit page and dependencies are resolved from DI.
Implement IRepositoryUiMapper<T, TKey> and register it with MapPropertiesForUi<T, TKey, TUiMapper>().
This lets you configure:
The package ships its own host pages inside the area and maps fallback to them.
The package host includes:
<base href="~/" />HeadOutletRepositoryApp_framework/blazor.server.jsRepositoryStyle and RepositoryScript partialsSo you do not need to create your own _Host.cshtml just to use the packaged UI.
Repository pages:
/Repository/{Name}/Query/Repository/{Name}/Create/Repository/{Name}/Edit/{Key}/Repository/{Name}/Show/{Key}/Repository/SettingsUtility endpoints:
/Repository/Language/{culture}/Repository/Settings/Theme/{themeKey}/Repository/Identity/Logout when authenticated UI is enabledIf you do not set a default UI root with SetDefaultUiRoot(), unmatched/fallback navigation ends on the router's not-found content.
AddRepositoryUi(...) does not replace AddServerSideBlazor() or MapBlazorHub()WithAuthenticatedUi() does not configure auth middleware; it only switches the package host and logout routeAddRepositoryUi<T>(...) is intended for additional router assemblies but is not reliable in the current implementationUse it when you want:
If you need a fully custom frontend, this package is better used as a reference or internal admin surface than as the only UI for public-facing workflows.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.8 | 5,514 | 5/13/2026 |
| 10.0.7 | 131 | 3/26/2026 |
| 10.0.6 | 433,500 | 3/3/2026 |
| 10.0.5 | 136 | 2/22/2026 |
| 10.0.4 | 131 | 2/9/2026 |
| 10.0.3 | 147,927 | 1/28/2026 |
| 10.0.1 | 209,141 | 11/12/2025 |
| 9.1.3 | 269 | 9/2/2025 |
| 9.1.2 | 764,465 | 5/29/2025 |
| 9.1.1 | 97,865 | 5/2/2025 |
| 9.0.32 | 186,734 | 4/15/2025 |
| 9.0.31 | 5,815 | 4/2/2025 |
| 9.0.30 | 88,844 | 3/26/2025 |
| 9.0.29 | 9,049 | 3/18/2025 |
| 9.0.28 | 284 | 3/17/2025 |
| 9.0.27 | 277 | 3/16/2025 |
| 9.0.26 | 295 | 3/13/2025 |
| 9.0.25 | 52,171 | 3/9/2025 |
| 9.0.21 | 366 | 3/6/2025 |
| 9.0.20 | 19,657 | 3/6/2025 |