Majorsilence.Reporting.EncryptionProvider
27.0.0-alpha.2
dotnet add package Majorsilence.Reporting.EncryptionProvider --version 27.0.0-alpha.2
NuGet\Install-Package Majorsilence.Reporting.EncryptionProvider -Version 27.0.0-alpha.2
<PackageReference Include="Majorsilence.Reporting.EncryptionProvider" Version="27.0.0-alpha.2" />
<PackageVersion Include="Majorsilence.Reporting.EncryptionProvider" Version="27.0.0-alpha.2" />
<PackageReference Include="Majorsilence.Reporting.EncryptionProvider" />
paket add Majorsilence.Reporting.EncryptionProvider --version 27.0.0-alpha.2
#r "nuget: Majorsilence.Reporting.EncryptionProvider, 27.0.0-alpha.2"
#:package Majorsilence.Reporting.EncryptionProvider@27.0.0-alpha.2
#addin nuget:?package=Majorsilence.Reporting.EncryptionProvider&version=27.0.0-alpha.2&prerelease
#tool nuget:?package=Majorsilence.Reporting.EncryptionProvider&version=27.0.0-alpha.2&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
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Majorsilence.Forms (>= 26.11.3)
- System.Data.DataSetExtensions (>= 4.5.0)
-
net8.0
- Majorsilence.Forms (>= 26.11.3)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Majorsilence.Reporting.EncryptionProvider:
| Package | Downloads |
|---|---|
|
Majorsilence.Reporting.RdlViewer
Cross-platform report viewer control for Majorsilence Reporting, built on Majorsilence.Forms. Embed RDL/RDLC report viewing, printing (PDF only -- see MIGRATION-NOTES.md), and export in desktop apps. Targets .NET 8 and .NET 10, any OS Majorsilence.Forms.Avalonia supports. To host it in WPF use Majorsilence.Forms.Wpf's ToWpfElement(); for System.Windows.Forms hosts use Majorsilence.Forms.WinForms's ToWinFormsControl(). |
|
|
Majorsilence.Reporting.ReportDesigner
Cross-platform drag-and-drop RDL report designer control for Majorsilence Reporting, built on Majorsilence.Forms. Targets .NET 8 and .NET 10, any OS Majorsilence.Forms.Avalonia supports. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 27.0.0-alpha.2 | 30 | 10/13/2026 |
| 27.0.0-alpha.1 | 56 | 10/10/2026 |
| 26.0.7 | 252 | 10/9/2026 |
| 26.0.6 | 139 | 9/29/2026 |
| 26.0.5 | 100 | 9/29/2026 |
| 26.0.3 | 464 | 7/10/2026 |
| 26.0.2 | 158 | 6/28/2026 |
| 26.0.1 | 144 | 6/24/2026 |
| 5.0.19 | 148 | 6/10/2026 |
| 5.0.18 | 531 | 2/7/2026 |
| 5.0.17 | 243 | 10/13/2025 |
| 5.0.16 | 184 | 9/27/2025 |
| 5.0.15 | 232 | 9/7/2025 |
| 5.0.14 | 235 | 9/7/2025 |
| 5.0.13 | 247 | 8/29/2025 |
| 5.0.12 | 289 | 8/24/2025 |
| 5.0.11 | 149 | 8/15/2025 |
| 5.0.10 | 261 | 7/26/2025 |
| 5.0.9 | 286 | 4/13/2025 |
| 5.0.8 | 262 | 3/19/2025 |