v2.0.0-rc6
After months of deep work and iteration, this release is finally here. There is XAML and hot reload support, reworked rendering for serious performance gains, and leaned hard into source generation to clean up and future-proof the codebase. Oh, and yes: LiveCharts is now AOT-friendly. It’s faster, cleaner, and more flexible than ever.
Seamless XAML Integration via Source Generators
LiveCharts now uses a powerful source generator that automatically transforms chart objects into designer-friendly UI components. For example, the generic LineSeries now has a corresponding XamlLineSeries class—part of a new naming convention where all UI-bound types are prefixed with Xaml. These components support data bindings, themes, hot reload, and full design-time integration:

This update dramatically improves the chart design experience. You can now fully style your charts using pure XAML, including theme support—no more ViewModel hacks or SkiaSharp dependencies just to customize visuals. In previous versions, UI customization often required logic in the ViewModel, which led to tightly coupled and less maintainable code. That’s now a thing of the past.
Documentation for XAML platforms has been fully updated (thanks, Copilot!) to showcase the new syntax. While the new XAML-first approach is recommended, the legacy syntax remains supported for backward compatibility.
On non-XAML platforms, MVVM usage has been phased out from examples across the site and repo, reflecting a cleaner, more platform-native approach.
Rendering is significantly faster
The rendering pipeline has undergone a deep overhaul. LiveCharts now manages SkiaSharp resources far more efficiently, with cleaner, hardware-accelerated implementations and tight synchronization with the OS screen refresh rate. We've also added custom integrations for UI frameworks—most notably, full support for the Uno Skia renderer.
SkiaSharp shaders, paints, and text blobs are now cached wherever possible, resulting in dramatically faster rendering times, smoother animations, and reduced resource consumption across the board.
Previously, LiveCharts relied on a fixed render loop that invalidated the control every ~16ms to simulate a 60 FPS refresh rate. While functional, this approach forced redraws regardless of whether the system was ready to display them. Now, rendering is fully delegated to the OS or UI framework. For example:
- On Blazor, we use requestAnimationFrame()
- On iOS*, CADDisplayLink
- On Android*, Choreographer
- On Uno Skia, a fully integrated render mode
This shift gives LiveCharts precise control over when and how frames are drawn—resulting in better performance and smoother visuals across platforms.
While it's hard to quantify the full performance gains (older versions lacked the benchmarking tools introduced in this release), the difference is substantial. Benchmarks in #1915 and #1936 offer a glimpse, but real-world usage shows even greater improvements.
As a bonus, there's now a "low-ish level" sample that removes the SkiaSharp dependency entirely—using Direct2D via Vortice—while still reusing 99% of the charting logic. This opens the door to even more rendering flexibility in the future.
Smarter Architecture with Source Generators
While this is an internal feature, it deserves the spotlight—because it radically simplifies how LiveCharts is built and maintained.
The library now uses a unified codebase, and a source generator automatically transforms core chart components into UI controls tailored for each supported framework. This means we write the logic once, and the generator handles the rest.
In previous versions, adding a new property to a chart control was a tedious, error-prone process. You had to manually define:
- An AvaloniaProperty for Avalonia
- A DependencyProperty for WPF
- A BindableProperty for MAUI
- Another DependencyProperty for WinUI (which behaves differently than WPF’s)
- Now Blazor, WinForm and Eto use regular properties.
It was repetitive, fragile, and frankly exhausting.
Now? It’s magical. The generator takes care of all the boilerplate, translating properties and control logic across frameworks automatically. The result: a cleaner, more maintainable codebase—and a much more enjoyable development experience.
notes
- iOS* or Android* mean native implementations, it applies to MAUI or Uno (native views, no SkiaRenderer)
What's Changed
- Custom visuals by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1796
- Scale by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1803
- No nullable maxvalue by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1804
- Refactor visual classes to use new abstract base classes by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1805
- Fixes: #1809 - Y-Axis separators alignment bug by @jnayee in https://github.com/beto-rodriguez/LiveCharts2/pull/1810
- RC 5.2 by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1811
- rc-5.3 by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1812
- Themes review by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1829
- States by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1841
- Motion properties improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1863
- Improve codegen by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1904
- Share code by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1906
- XAML and hot reload by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1851
- fix: corrected spelling of "Celsius" by @DavideSte in https://github.com/beto-rodriguez/LiveCharts2/pull/1881
- Corrected spelling mistake in Readme by @HugoW5 in https://github.com/beto-rodriguez/LiveCharts2/pull/1878
- Update 1.5.mappers.md by @Mano176 in https://github.com/beto-rodriguez/LiveCharts2/pull/1874
- Fix 1885 by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1909
- Improve limits validation by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1911
- Rendering improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1915
- Linear gradient fix by @dubby09 in https://github.com/beto-rodriguez/LiveCharts2/pull/1917
- Improve WinUI AOT compatibility by @lhak in https://github.com/beto-rodriguez/LiveCharts2/pull/1890
- Paints improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1936
- Fixes 1944 by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1946
- Zooming panning improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1947
- Fix spelling and grammar errors in documentation templates by @Copilot in https://github.com/beto-rodriguez/LiveCharts2/pull/1953
- Clipping improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1954
- Move z-index constants to dedicated PaintConstants class for better organization by @Copilot in https://github.com/beto-rodriguez/LiveCharts2/pull/1955
- LiveCharts without SkiaSharp running on DirectX11 via Vortice by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1958
- Render settings by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1959
- Sg improvements by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1960
- Xaml fixes by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1961
- Xaml fixes by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1964
- Docs by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1967
- Uno packing by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1969
- RC-6 by @beto-rodriguez in https://github.com/beto-rodriguez/LiveCharts2/pull/1965
New Contributors
- @DavideSte made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1881
- @HugoW5 made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1878
- @Mano176 made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1874
- @dubby09 made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1917
- @lhak made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1890
- @Copilot made their first contribution in https://github.com/beto-rodriguez/LiveCharts2/pull/1953
Full Changelog: https://github.com/beto-rodriguez/LiveCharts2/compare/v2.0.0-rc5...v2.0.0-rc6