Describe your report once. Render it everywhere.
Pysar is a report engine for .NET: XAML markup or a fluent C# builder in, a vector PDF, bitmap pages, or a zoomable in-app viewer out — identical on Windows, macOS, Linux, Android, iOS and the browser.
var report = ReportBuilder.Create("Hello report")
.WithPageFormat(new PageFormat { Margin = new Thickness(30) })
.WithDetail(detail => detail.AddElement(new Text { Content = "Hello from Pysar" }))
.Build();
await new SkiaReportRenderer().SavePdfAsync(report, "hello.pdf");
Viewer
The same report on every device
Pick a UI framework and a target — every combination renders identical pages: same totals, same pagination, same zoomable viewer.
.NET MAUI on Windows — screenshot on the way. The integration ships today; only this capture is pending.
Avalonia on Windows — screenshot on the way. The integration ships today; only this capture is pending.
Avalonia on Linux — screenshot on the way. The integration ships today; only this capture is pending.
WPF on Windows — screenshot on the way. The integration ships today; only this capture is pending.
What you get
Built for real, paginated documents
Bands, bindings and pagination that behave like a document engine — not a UI framework stretched to fit.
Two authoring styles
.rxaml markup for fixed-shape reports, the fluent builder for structure computed at runtime — same object model, can be mixed.
Real pagination
Detail rows slice across pages, headers repeat, page bands re-resolve per page, and PageNumber/PageCount reach your bindings.
Vector PDF output
Text stays selectable and sharp at any zoom — nothing is rasterised — plus bitmap page rendering at any scale.
Tiled viewer
One viewer control shared across every UI framework — only the visible region rasterises, so memory follows the viewport.
Compile-time validation
The source generator checks {Binding} paths and DataTrigger.Binding against x:DataType, for reports loaded at runtime too.
Data binding & triggers
{Binding}, string formats, value converters and DataTrigger for conditional formatting — resolved once, at build time.
Packages
Name at most three packages
Pysar always, Pysar.Xaml for .rxaml markup, and one platform package for your UI framework.
| Package | Responsibility |
|---|---|
| Pysar | Reports, bands, layouts, repeaters, styles, triggers, data binding, and the SkiaSharp measurement, pagination, rendering and PDF engine |
| Pysar.Xaml | Declarative report markup: the runtime loader and the code-behind source generator |
| Pysar.Viewer | Framework-neutral viewer logic: page geometry, zoom, tile planning and the tile cache (arrives transitively) |
| Pysar.Maui | .NET MAUI integration: app-package assets, font registration, PDF export and sharing |
| Pysar.Avalonia | Avalonia integration: avares:// assets, font registration and the report view |
| Pysar.Blazor | Blazor integration: the report viewer component, printing through the browser |
| Pysar.Wpf | WPF integration (Windows only): pack/manifest assets, font registration and the report view |
| Pysar.Uno | Uno Platform integration: embedded assets, font registration, the report view and printing |
Platforms
The same ReportView, everywhere
Every platform package exposes the same properties — Zoom, EffectiveZoom, PageSpacing — so the integration reads the same across your apps.
.NET MAUI
Android, iOS & Mac Catalyst
Avalonia
Desktop, mobile & web
Uno
Android, web & desktop
WPF
Windows only
Blazor
Runs in the browser
Editor tooling for Pysar
.rxaml syntax highlighting for Rider, VS Code and Visual Studio is free, forever. Pysar.Design is available for Rider on the JetBrains Marketplace as a paid plugin with a 30-day trial.