Pixata.Blazor
5.12.1
See the version list below for details.
dotnet add package Pixata.Blazor --version 5.12.1
NuGet\Install-Package Pixata.Blazor -Version 5.12.1
<PackageReference Include="Pixata.Blazor" Version="5.12.1" />
<PackageVersion Include="Pixata.Blazor" Version="5.12.1" />
<PackageReference Include="Pixata.Blazor" />
paket add Pixata.Blazor --version 5.12.1
#r "nuget: Pixata.Blazor, 5.12.1"
#:package Pixata.Blazor@5.12.1
#addin nuget:?package=Pixata.Blazor&version=5.12.1
#tool nuget:?package=Pixata.Blazor&version=5.12.1
Pixata.Blazor 

Like many developers, I find myself writing the same Blazor components over and over again. I have gathered some of those components together in one place, and am making them available for anyone else who might find them useful.
A Nuget package is available for these components.
See the release notes for what changed in each version.
I sometimes waffle on about these components in my blog. No-one reads it, but it satisfies my deeply buried desire to be a writer. If you read the blog, you'll realize why the desire is still deeply buried!
There is a complementary package, which contains additional components for those who have a subscription to Telerik.
Sample project
I have added a Blazor web project to the repository, and use that to try out and demonstrate the components. It doesn't contain samples for all the components yet, but I hope to add more over time. It is deployed at test.pixata.co.uk.
Documentation
The documentation is split over the following pages...
| Page | What's in it |
|---|---|
| Styling | The stylesheet the components ship with, how to fit it to your own theme, and what changed when the Bootstrap dependency was dropped |
| Components | VirtualiseWithState, SitePageTitle, IdentityInspector, HebrewDatePicker, ListOrGridChooser and the CommonComponentBase base class |
| Grid | PixataGrid, a data grid with paging, sorting, filtering, selection, editing, grouping, resizable, movable and frozen columns, saved state, virtual scrolling, detail rows, row dragging, CSV export, keyboard navigation, translation and right-to-left layout. Excel export is in the Pixata.Blazor.Grid.Excel package |
| Date picker | PixataDatePicker, PixataDateInput and PixataCalendar, for picking and typing dates |
| Date range picker | PixataDateRangePicker, for picking the start and end of a range of dates, and the calendar's range mode |
| Containers | HtmlRaw, Busy, Loader, Confirm, Inform, MessageView, Expander and DumpCollection |
| ApiResponseView | The container that renders an ApiResponse<T>, handling loading, errors and expired sessions for you |
| Forms | The form layout components and the complete FormRowXxx rows |
| Notifications | Toast-style notifications, and how to have API errors reported through them |
| Audit viewer | The component for browsing the audit trail recorded by Pixata.AspNetCore |
| Helpers and services | PersistentStateHelper, TemplateHelper, MessageBroker, PasswordOptionsHelper, ScrollStateService, PixataBaseClientService and TryGetQueryString() |
| Payload encryption | Client-side setup for encrypting API traffic between a WASM app and an ASP.NET Core server |
| Declarative control flow | If, Switch and ForEach, which replace the Razor @if, @switch and @foreach statements |
| Drop-downs | PixataComboBox, PixataDropDownList and PixataMultiSelect |
| Tab strip | PixataTabStrip and PixataTab |
| Tree view | PixataTreeView, for showing flat or hierarchical data as a tree, with selection, checkboxes, loading on demand, and drag and drop |
| Editor | PixataEditor, a rich (HTML) text editor |
| File select and upload | PixataFileSelect, which hands the chosen files to your code, and PixataUpload, which posts them to an endpoint |
| Dialogs | PixataDialog, and the alert, confirm and prompt dialogs you can show from code |
| Window | PixataWindow, a floating window that can be moved, resized, minimised and maximised |
| Wizard and stepper | PixataWizard and PixataStepper |
| Radio group | PixataRadioGroup |
| Switch | PixataSwitch, a toggle switch for booleans |
| Charts | PixataChart, with column, line and pie series |
| Buttons | PixataButton, PixataPrimaryButton, PixataSecondaryButton, PixataDropDownButton and PixataSplitButton |
| Scheduler | PixataScheduler, for showing and editing appointments in day, multi-day, week, month, timeline and agenda views |
Registering dependencies
Some components in this package require services to be registered in the DI container. To make this easier, you can use the AddPixataBlazor extension method in your Program.cs file...
builder.Services.AddPixataBlazor();
This registers the following services (all from this package)...
| Service | What needs it |
|---|---|
MessageBrokerInstance |
The MessageBroker, which lets components send messages to each other without knowing about each other |
NotificationHelper |
The notifications (sample page) |
PasswordOptionsHelper |
Showing the user your Identity password requirements |
PersistentStateHelper<T> |
Avoiding hitting the database twice when a page loads. Used by the ApiResponseView, but can be used independently |
PixataDialogFactory |
The alert, confirm and prompt dialogs you show from code (sample page). It also needs <PixataDialogHost /> in your layout, as described below |
PixataDialogTexts |
The button text and tooltips used by the dialogs and windows (OK, Cancel, Close and so on). Register your own instance before calling AddPixataBlazor() to translate them |
ScrollStateService |
The VirtualiseWithState component |
TemplateHelper |
Building templates for grids and other templated components (sample page) |
PersistentStateHelper<T>does the same job as the[PersistentState]attribute added in .NET 10. This one was written around .NET 8, and is still useful for projects targetting .NET versions before 10.
It also registers Blazored.LocalStorage, which ScrollStateService needs. This package has always referenced Blazored.LocalStorage, but until v2.34.0 it left you to register it, so unless you knew to add builder.Services.AddBlazoredLocalStorage() yourself, your app fell over at startup when the container was validated. If you have already registered it (with your own options, for example), your registration is left alone.
Note that you need to do this in any Program.cs file, so if you have a mixed rendering mode (both server-side and client-side), you'll need to call AddPixataBlazor in both Program.cs files.
It is a good idea to add this line after your own service registrations, as it checks for duplicate registrations. Therefore, if you have already registered any of the services, you will see a message in your console...
A service of type TemplateHelper has already been registered
This isn't actually a problem, but removing the duplicate registration will keep the code file a bit cleaner.
The audit viewer and the payload encryption have their own registration methods, as most apps don't want them. See the pages listed above.
The dialog host
If you want to show the alert, confirm and prompt dialogs from code (with PixataDialogFactory), add the host component to your layout, inside an interactively rendered component...
@using Pixata.Blazor.Components
<PixataDialogHost />
If you ask for one of these dialogs without a host on the page, you get an exception telling you to add it. If your layout is rendered statically and only some pages are interactive, put the host in those pages instead, as it has to share a DI scope with the code that shows the dialogs. See Dialogs for more.
Styling
Don't forget to add the stylesheet, or the components will render unstyled...
<link rel="stylesheet" href="_content/Pixata.Blazor/pixata.css" />
See Styling for what's in it, and how to fit it to your own theme.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Blazored.FluentValidation (>= 2.2.0)
- Blazored.LocalStorage (>= 4.5.0)
- Microsoft.AspNetCore.Components.Authorization (>= 10.0.0)
- Microsoft.AspNetCore.Components.Web (>= 10.0.0)
- Microsoft.AspNetCore.WebUtilities (>= 10.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Identity.Core (>= 10.0.0)
- Newtonsoft.Json.Bson (>= 1.0.3)
- Pixata.Extensions (>= 2.23.0)
-
net8.0
- Blazored.FluentValidation (>= 2.2.0)
- Blazored.LocalStorage (>= 4.5.0)
- Microsoft.AspNetCore.Components.Authorization (>= 8.0.22)
- Microsoft.AspNetCore.Components.Web (>= 8.0.22)
- Microsoft.AspNetCore.WebUtilities (>= 8.0.22)
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Identity.Core (>= 8.0.22)
- Newtonsoft.Json.Bson (>= 1.0.3)
- Pixata.Extensions (>= 2.23.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Pixata.Blazor:
| Package | Downloads |
|---|---|
|
Pixata.Blazor.LanguageExtComponents
A set of reusable Blazor components related to the LanguageExt Nuget package |
|
|
Pixata.Blazor.Grid.Excel
Excel export for the PixataGrid component in Pixata.Blazor, using ClosedXML. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.17.0 | 0 | 10/27/2026 |
| 5.16.0 | 0 | 10/27/2026 |
| 5.15.0 | 0 | 10/27/2026 |
| 5.14.0 | 0 | 10/27/2026 |
| 5.13.2 | 0 | 10/27/2026 |
| 5.13.1 | 0 | 10/27/2026 |
| 5.13.0 | 0 | 10/27/2026 |
| 5.12.1 | 70 | 10/26/2026 |
| 5.12.0 | 78 | 10/26/2026 |
| 5.11.1 | 77 | 10/26/2026 |
| 5.11.0 | 85 | 10/25/2026 |
| 5.10.0 | 79 | 10/22/2026 |
| 5.9.1 | 84 | 10/22/2026 |
| 5.9.0 | 84 | 10/22/2026 |
| 5.8.0 | 83 | 10/21/2026 |
| 5.7.0 | 86 | 10/21/2026 |
| 5.6.0 | 91 | 10/21/2026 |
| 5.5.0 | 104 | 10/19/2026 |
| 5.4.0 | 85 | 10/19/2026 |
| 5.1.0 | 86 | 10/18/2026 |