Majorsilence.Reporting.AotCode
27.0.0-alpha.6
dotnet add package Majorsilence.Reporting.AotCode --version 27.0.0-alpha.6
NuGet\Install-Package Majorsilence.Reporting.AotCode -Version 27.0.0-alpha.6
<PackageReference Include="Majorsilence.Reporting.AotCode" Version="27.0.0-alpha.6"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Majorsilence.Reporting.AotCode" Version="27.0.0-alpha.6" />
<PackageReference Include="Majorsilence.Reporting.AotCode"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Majorsilence.Reporting.AotCode --version 27.0.0-alpha.6
#r "nuget: Majorsilence.Reporting.AotCode, 27.0.0-alpha.6"
#:package Majorsilence.Reporting.AotCode@27.0.0-alpha.6
#addin nuget:?package=Majorsilence.Reporting.AotCode&version=27.0.0-alpha.6&prerelease
#tool nuget:?package=Majorsilence.Reporting.AotCode&version=27.0.0-alpha.6&prerelease
Majorsilence Reporting (formerly My-FyiReporting)
Majorsilence Reporting is an open-source .NET reporting framework for building, rendering, and viewing RDL-based reports — a self-hosted alternative to SQL Server Reporting Services (SSRS) and Crystal Reports. It targets .NET 8 and .NET 10, renders reports to PDF and other formats from a variety of data sources, and ships both a fluent C# API for generating reports and a Windows drag-and-drop visual designer.
dotnet add package Majorsilence.Reporting.RdlCreator.SkiaSharp
dotnet add package Majorsilence.Reporting.RdlEngine.SkiaSharp
dotnet add package Majorsilence.Reporting.RdlCri.SkiaSharp
The core engine, report designer, and report viewer all support Linux, macOS, and Windows — the designer and viewer are built on Majorsilence.Forms, a cross-platform WinForms-API-compatible framework. Existing System.Windows.Forms host apps can still embed them as real WinForms controls via Majorsilence.Forms.WinForms's ToWinFormsControl(), WPF, Avalonia, Uno, GTK 4 and terminal hosts follow the same pattern (see Hosting in your UI framework).
If you have any question about Majorsilence Reporting or want to discuss it, a discussion group is available here:
https://github.com/majorsilence/Reporting/discussions
Documentation
See the projects wiki.
Download
See the downloads page.
Alternatively if you want keep up with the latest version you can always use Git
git clone https://github.com/majorsilence/Reporting.git
Quick start
Add the NuGet packages above to your project.
If running on linux install the required fonts.
sudo apt install ttf-mscorefonts-installer
Custom fonts for PDF export
Fonts shipped with your app, or kept in a folder the renderer does not scan, can be registered once at startup, before rendering. Registrations are process-wide.
using Majorsilence.Reporting.Rdl;
PdfFonts.RegisterFont("MICR Encoding", regular: "/app/fonts/MICREncoding.ttf");
PdfFonts.RegisterFontDirectory("/app/fonts"); // each font under the family it declares
PdfFonts.AddFallbackFamily("Noto Sans CJK JP"); // tried before the built-in fallbacks
A family you register replaces an installed one of the same name. Without code (RdlCmd, RdlMcp), set MAJORSILENCE_PDF_FONT_DIRS to a list of font folders separated by : (; on Windows).
You are now ready to create and generate reports.
c# example, create report, connected to an sql database
See Database Providers.
using Majorsilence.Reporting.RdlCreator;
// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();
string dataProvider = "[PLACEHOLDER/Json/Microsoft.Data.SqlClient/MySQL.NET/Firebird.NET 2.0/Microsoft.Data.Sqlite/PostgreSQL";
var create = new Majorsilence.Reporting.RdlCreator.Create();
using var report = await create.GenerateRdl(dataProvider,
connectionString,
"SELECT CategoryID, CategoryName, Description FROM Categories",
pageHeaderText: "DataProviderTest TestMethod1");
string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, "PLACEHOLDER.pdf");
using var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);
await report.RunGetData(null);
await report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);
c# example, create a pdf document
using Majorsilence.Reporting.RdlCreator;
// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();
var document = new Majorsilence.Reporting.RdlCreator.Document()
{
Description = "Sample report",
Author = "John Doe",
PageHeight = "11in",
PageWidth = "8.5in",
//Width = "7.5in",
TopMargin = ".25in",
LeftMargin = ".25in",
RightMargin = ".25in",
BottomMargin = ".25in"
}
.WithPage((page) =>
{
page.WithHeight("10in")
.WithWidth("7.5in")
.WithText(new Text
{
Name = "TheSimplePageText",
Top = ".1in",
Left = ".1in",
Width = "6in",
Height = ".25in",
Value = new Value { Text = "Text Area 1" },
Style = new Style { FontSize = "12pt", FontWeight = "Bold" }
});
});
using var fileStream = new FileStream("PLACEHOLDER.pdf", FileMode.Create, FileAccess.Write);
await document.Create(fileStream);
c# load an existing rdl report via RdlEngine
note: Notice the namespace and type difference of Majorsilence.Reporting.RdlCreator.Report for creating new rdl reports versus Majorsilence.Reporting.Rdl.Report for running a report.
using Majorsilence.Reporting.Rdl;
// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();
var rdlp = new RDLParser(System.IO.File.ReadAllText(@"C:\path\to\report\file.rdl"));
using var report = await rdlp.Parse();
string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, "PLACEHOLDER.pdf");
using var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);
await report.RunGetData(null);
await report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);
Development
Majorsilence Reporting is developed with the following workflow:
- Nothing happens for weeks or months
- Someone needs it to do something it doesn't already do
- That person implements that something and submits a pull request
- Repeat
If it doesn't have a feature that you want it to have, add it. If it has a bug you need fixed, fix it.
See Contribute.
Branches and releases
Versions are year.release.build.
| Branch | Purpose |
|---|---|
release/26.0.x |
Stable 26.0.x line. Only bug fixes and security fixes. Tagged v26.0.N. |
main |
Development toward the 27.x.x releases planned for 2027. Includes the modernization work. |
- Fixes for the stable line target
release/26.0.xand are then merged or cherry-picked forward intomain. - New features and breaking changes target
main.
Benchmarks
one
BenchmarkDotNet v0.15.2, macOS 26.0.1 (25A362) [Darwin 25.0.0] Apple M2, 1 CPU, 8 logical and 8 physical cores .NET SDK 9.0.200 [Host] : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD Job-AKATUD : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD
BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|
| NestedJson | 5.401 ms | 0.0560 ms | 0.0935 ms | 0.99 | 0.03 | 390.6250 | 125.0000 | 3.12 MB | 1.00 |
| Threads | Duration | Source | Calls/Sec | Total Calls | Errors |
|---|---|---|---|---|---|
| 1 | 30 | JsonDataProviderBenchmark | 162 | 4,873 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 362 | 10,865 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 363 | 10,894 | 0 |
| 30 | 30 | JsonDataProviderBenchmark | 334 | 10,043 | 0 |
| 40 | 30 | JsonDataProviderBenchmark | 316 | 9,497 | 0 |
| 50 | 30 | JsonDataProviderBenchmark | 296 | 8,905 | 0 |
two
BenchmarkDotNet v0.15.2, Windows 11 (10.0.26100.6584/24H2/2024Update/HudsonValley) Intel Core i5-8350U CPU 1.70GHz (Max: 1.90GHz) (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores .NET SDK 8.0.414 [Host] : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2 Job-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2
BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput
| Method | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|
| NestedJson | 16.67 ms | 0.796 ms | 2.140 ms | 15.84 ms | 1.01 | 0.17 | 727.2727 | 272.7273 | 3.24 MB | 1.00 |
| Threads | Duration | Source | Calls/Sec | Total Calls | Errors |
|---|---|---|---|---|---|
| 1 | 30 | JsonDataProviderBenchmark | 34 | 1,009 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 64 | 1,920 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 63 | 1,893 | 0 |
| 30 | 30 | JsonDataProviderBenchmark | 58 | 1,739 | 0 |
| 40 | 30 | JsonDataProviderBenchmark | 49 | 1,497 | 0 |
| 50 | 30 | JsonDataProviderBenchmark | 51 | 1,546 | 0 |
three
BenchmarkDotNet v0.15.2, Linux Ubuntu 24.04.3 LTS (Noble Numbat) AMD Ryzen 5 3600 4.21GHz, 1 CPU, 12 logical and 6 physical cores .NET SDK 8.0.120 [Host] : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2 Job-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2
BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|
| NestedJson | 5.542 ms | 0.1100 ms | 0.2011 ms | 1.00 | 0.05 | 359.3750 | 125.0000 | 2.94 MB | 1.00 |
| Threads | Duration | Source | Calls/Sec | Total Calls | Errors |
|---|---|---|---|---|---|
| 1 | 30 | JsonDataProviderBenchmark | 152 | 4,571 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 403 | 12,115 | 0 |
| 20 | 30 | JsonDataProviderBenchmark | 406 | 12,196 | 0 |
| 30 | 30 | JsonDataProviderBenchmark | 358 | 10,757 | 0 |
| 40 | 30 | JsonDataProviderBenchmark | 315 | 9,460 | 0 |
| 50 | 30 | JsonDataProviderBenchmark | 290 | 8,720 | 0 |
License
The entire project is Apache 2.0 licensed with select sub projects tri-licensed. Original code is apache 2.0 only. New projects are tri-licensed as of 26.0.0.
Apache 2.0 Licensed
- DataProviders
- EncryptionProver
- Majorsilence.WinformUtils
- RdlAsp.Mvc
- RdlCmd
- RdlCri
- RdlDesign
- RdlDesktop
- RdlEngine
- RdlGtk3
- RdlGtk3Viewer
- RdlMapFile
- RdlReader
- RdlViewer
- ReportDesigner
Tri Licensed
- MIT License — see LICENSE-MIT in sub folders
- Apache License 2.0 — see LICENSE-APACHE in sub folders
- BSD 2-Clause License — see LICENSE-BSD in sub folders
tri-licensed projects
- Majorsilence.Pdf
- Majorsilence.Pdf.Security
- Majorsilence.Reporting.UI
- Majorsilence.Reporting.UI.RdlAvalonia
- PdfNative
- RdlCreator
- RdlNative
- WebDesigner
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 27.0.0-alpha.6 | 46 | 10/28/2026 |
| 27.0.0-alpha.5 | 57 | 10/23/2026 |
| 27.0.0-alpha.4 | 55 | 10/21/2026 |
| 27.0.0-alpha.3 | 55 | 10/20/2026 |
| 27.0.0-alpha.2 | 55 | 10/13/2026 |
| 27.0.0-alpha.1 | 59 | 10/10/2026 |