Documentation
IzzyBlazor is a Blazor component library built for static SSR. Components render as HTML, gain interactivity with a small script, and support C# bindings and events when you choose an interactive render mode.
dotnet add package IzzyBlazor --prerelease
One set of components for every page. This form posts and validates on a static page, with JavaScript off too, and runs over a circuit on an interactive one, with no change to the markup. The model takes the post through [SupplyParameterFromForm]:
<Form Model="Signup" FormName="signup" OnValidSubmit="SaveAsync">
<TextField @bind-Value="Signup.Email" />
<Button Submit>Sign up</Button>
</Form>
{
[SupplyParameterFromForm(FormName = "signup")]
private SignupModel? Signup { get; set; }
protected override void OnInitialized() => Signup ??= new();
}Off · Static · Live
Examples on this site run three ways. Pick one with the switch, here and on component pages:
- Off: JavaScript disabled, so you see exactly what the HTML and CSS do on their own.
- Static: a static SSR page with IzzyBlazor's script, which adds keyboard handling, live values and the like. No circuit.
- Live: an interactive page on Blazor Server, where C# event handlers and
@bindrun.
Preview
Code
System.ComponentModel.DataAnnotations
<Form Model="Model" FormName="workspace" OnValidSubmit="Save" Grow>
<Heading Level="2" Size="TextSize.Lg">Workspace</Heading>
<TextField @bind-Value="Model!.Name" />
<Row Gap="4" Wrap>
<Select @bind-Value="Model!.Region" Grow />
<SegmentedControl @bind-Value="Model!.Theme" />
</Row>
<Slider @bind-Value="Model!.Timeout" Min="5" Max="120" Step="5" ShowValue ValueFormat="{0} min" />
<Switch @bind-Value="Model!.Alerts" ControlPosition="ControlPosition.End" Hint="An email when a deploy fails." />
<FormActions><Button Submit>Save</Button></FormActions>
if (_saved)
{
<Alert Status="Status.Success">Saved Model!.Name: Model.Theme, Model.Timeout-minute sessions.</Alert>
}
</Form>
{
[SupplyParameterFromForm(FormName = "workspace")]
private Workspace? Model { get; set; }
private bool _saved;
protected override void OnInitialized() => Model ??= new();
private void Save() => _saved = true;
public sealed class Workspace
{
[Required(ErrorMessage = "Name the workspace"), StringLength(40)]
public string Name { get; set; } = "Acme";
public Region Region { get; set; } = Region.UsEast;
public Theme Theme { get; set; } = Theme.Dark;
[Display(Name = "Session timeout")]
public int Timeout { get; set; } = 30;
[Display(Name = "Deploy alerts")]
public bool Alerts { get; set; } = true;
}
public enum Region
{
[Display(Name = "US East")] UsEast,
[Display(Name = "US West")] UsWest,
[Display(Name = "Europe")] Europe,
[Display(Name = "Asia Pacific")] AsiaPacific,
}
public enum Theme { Light, Dark, System }
}Live: The same markup binds to C#, and Save runs a C# handler.
How it's built
One set for every render mode
The same components on static, Server, WebAssembly and Auto pages. Nearly all work with JavaScript off and do more with it. Render modes
Forms that post
Form and its fields bind on a static post and on an interactive page, with labels, limits and messages from your model's attributes. Forms and validation
State in the URL
Table, FilterForm and Pagination keep sorting, filters and the page in the query string, so they work with no circuit and links keep them. Table
Style props and themes
Spacing, sizes and colors as parameters, and IzzyTheme for the preset, brand and fonts, rendered on the server so the theme is there on first paint. Style props · Theming
Native elements first
Buttons, dialogs, selects and disclosures are the browser's own, so focus, keyboard and screen readers work as the platform defines them; the script adds ARIA where it adds behavior.
What's in the box
80+ components in 10 categories. See them all.
App shell 5 components
AppShell, AppSidebar, SiteNav, IzzyTheme and 1 more
Typography 10 components
Actions 6 components
Button, IconButton, ButtonGroup, Toolbar and 2 more
Selection 8 components
Select, Combobox, MultiSelect, Checkbox and 4 more
Navigation 7 components
NavMenu, Tabs, Breadcrumb, Pagination and 3 more
Feedback 9 components
Alert, Banner, ToastRegion, Badge and 5 more
Data display 11 components
Table, Card, Stat, DescriptionList and 7 more
Requirements
- .NET 10, in a Blazor Web App: static pages, and Server, WebAssembly or Auto pages.
- Two packages:
IzzyBlazorfor the server project, andIzzyBlazor.Corefor a.Clientproject. Packages - Current browsers: Chrome and Edge 123+, Firefox 128+, Safari 17.5+. Newer features, such as the customizable select, are used where the browser has them.
- MIT licensed. Pro components are planned.
Resources
- Demos: realistic scenarios in all three modes, with the source.
- GitHub: the source and issues.
- Release notes: what changed in each version.
- AI assistants: connect yours to the docs' MCP server.
- API metadata: every component's API as JSON, for tools and AI assistants.