Configuration That the Compiler Checks
ApexChartOptions<T> is a real generic type, not a dictionary of strings. Theme.Mode takes a Mode enum, Stroke.Curve takes a Curve, and a misspelled option name is a build error rather than a key that is silently ignored at runtime. The chart beside this flips between Curve.Smooth and Curve.Straight, which in C# is a one-word change the compiler validates.
Twelve Chart Types from One Enum
The same markup and the same bound collection produce a bar, line, area or scatter chart: change SeriesType and nothing else. The enum covers Area, Bar, Donut, Heatmap, Line, Pie, PolarArea, Radar, RadialBar, Scatter, Treemap and RangeArea, with dedicated series components for the shapes that need different data.
Aggregate Rows Without Reshaping Your Data
Single-dimension charts pair SeriesType with YAggregate, so a list of orders becomes gross value per country without you writing a grouping step first. The lambda runs over your own model: YAggregate="@(e => e.Sum(e => e.GrossValue))". Your query stays the shape your API returns.
Explicit Updates, Not Implicit Re-renders
Hold the component with @ref, change the bound collection, then call UpdateSeriesAsync. Coming from React or Vue this is the surprise: mutating the list does not redraw the chart on its own. The upside is that you control exactly when a redraw happens and whether it animates.
One Package, No Toolchain
The JavaScript and CSS ship inside the NuGet package, served from _content/Blazor-ApexCharts/. No npm, bundler, CDN or script tag.
Strongly Typed Options
ApexChartOptions<T> with typed properties and enums throughout, so option names and values are checked at build time.
Lambda Data Accessors
XValue, YValue and YAggregate are lambdas over your own model rather than field-name strings.
Runtime Updates
UpdateSeriesAsync and UpdateOptionsAsync redraw on demand, with control over animation and synced charts.
Server and WebAssembly
Async IJSRuntime interop throughout, so neither Blazor hosting model is a special case.
.NET MAUI
The companion Blazor-ApexCharts-MAUI package covers android, ios and maccatalyst.
Global Theming
An optional scoped IApexChartService carries global options, palettes and locales across every chart on screen.
MIT Wrapper, No Key for Charting
The NuGet package is MIT. Every chart type and standard option works with no licence key.
Blazor Chart Component FAQ
What is Blazor-ApexCharts?
Blazor-ApexCharts is a Blazor wrapper for ApexCharts.js that exposes the chart configuration surface as strongly typed C# classes and Razor components. It runs in Blazor Server, Blazor WebAssembly, WinForms and WPF, and in .NET MAUI through a companion package.
How do I install the Blazor chart component?
Run dotnet add package Blazor-ApexCharts, then add @using ApexCharts to your _Imports.razor. No npm, bundler or script tag is involved: the JavaScript and CSS ship inside the package and are served from _content/Blazor-ApexCharts/.
Which .NET versions does Blazor-ApexCharts support?
Version 7.0.0 multi-targets .NET 8, .NET 9 and .NET 10. The companion MAUI package targets .NET 9 for android, ios and maccatalyst.
Why does my Blazor chart render blank?
Almost always the render mode. From .NET 8, Blazor Web Apps render statically by default, so a component that needs JavaScript interop must opt in. Set the host page or component to InteractiveServer, InteractiveWebAssembly or InteractiveAuto, or the interop never runs and there is no console error.
Do I need a license key for Blazor charts?
Not for charting. Every chart type and every standard option works with no key and no revenue threshold. Only the seven premium interaction modules, which are undo and redo, perspectives, linked views with crossfilter, ink annotations, measure, context menu and storyboard, run in trial mode with a watermark until a key is applied.
How is Blazor-ApexCharts licensed?
The Blazor-ApexCharts wrapper package on NuGet is MIT licensed. MIT covers the wrapper. The ApexCharts engine it loads is a separate work under its own terms.
How do I refresh a Blazor chart with new data?
Hold the component with @ref and call UpdateSeriesAsync after changing the bound collection. Its signature is UpdateSeriesAsync(bool animate = true). UpdateOptionsAsync does the same for options, and takes redrawPaths, animate and updateSyncedCharts as required arguments.
Can I use ApexCharts in .NET MAUI?
Yes, through the Blazor-ApexCharts-MAUI package, registered with AddApexChartsMaui instead of AddApexCharts.
Ready to chart in C#?
One dotnet add package, one @using, and an interactive render mode. The setup guide walks the rest.
Browse chart demos