MIT-licensed document processing for .NET — a free, open-source suite of libraries for creating and manipulating documents in all common business formats. No per-server fees, no copyleft restrictions, no proprietary lock-in.
| Package | Description | NuGet |
|---|---|---|
Unchained.Pdf |
PDF — load, save, extract text, fill forms, sign, encrypt, PDF/A, PDF/UA | |
Unchained.Pdf.Rendering |
PDF page rasterization to PNG (FreeType2 + HarfBuzz shaping) | |
Unchained.Pptx |
PPTX — read, write, edit slides, charts, animations; export to PDF/HTML/SVG/ODP | |
Unchained.Pptx.Rendering |
PPTX slide rasterization to PNG (FreeType2 + HarfBuzz shaping) | |
Unchained.Ooxml |
Shared OOXML infrastructure (OPC packaging, DrawingML, EMU) used by the OOXML formats | |
Unchained.Drawing.Runtimes |
Native FreeType2 binaries — installed automatically with any Rendering package |
| Package | Formats |
|---|---|
Unchained.Docx |
DOCX · ODT |
Unchained.Xlsx |
XLSX · ODS · CSV |
Every Unchained package follows the same principles:
- MIT licensed — use freely in commercial, proprietary, and open-source projects
- No copyleft — consuming Unchained never requires you to open-source your application
- Standards-based core — each format's core is implemented directly against its open standard (ISO 32000, ECMA-376, ODF); dependencies are permissively licensed (MIT / Apache-2.0 / BSD / FTL / SIL OFL), never GPL or LGPL
- Async-first — all public APIs are
async Task; safe on ASP.NET and gRPC pipelines - Pure managed where the standard library suffices; focused libraries pull in image codecs, text shaping, and font rasterization, with native binaries (FreeType2, HarfBuzz) bundled for every platform
<!-- PDF operations -->
<PackageReference Include="Unchained.Pdf" Version="0.1.0" />
<!-- + page rendering to PNG -->
<PackageReference Include="Unchained.Pdf.Rendering" Version="0.1.0" />using Unchained.Pdf.Engine;
var processor = new DocumentProcessor();
// Load
await using var doc = await processor.LoadAsync("invoice.pdf");
Console.WriteLine($"{doc.PageCount} pages — {doc.Pages[1].ExtractText()}");
// Save
await processor.SaveAsync(doc, "output.pdf");See the Unchained.Pdf documentation for the full API: text extraction, table generation, merging, annotations, form filling, digital signatures, encryption, PDF/A, and more.
<!-- PPTX operations -->
<PackageReference Include="Unchained.Pptx" Version="0.1.0" />
<!-- + slide rendering to PNG -->
<PackageReference Include="Unchained.Pptx.Rendering" Version="0.1.0" />using Unchained.Pptx.Engine;
var processor = new PresentationProcessor();
// Load and read
using var doc = await processor.LoadAsync("deck.pptx");
foreach (var slide in doc.Slides)
Console.WriteLine(slide.GetAllText());
// Export to PDF
await processor.SaveAsPdfAsync(doc, "deck.pdf");See the Unchained.Pptx documentation for the full API: slide editing, shapes, tables, charts, animations, themes, encryption, and exports to PDF/HTML/SVG/ODP.
Runnable console walkthroughs live in samples/:
| Sample | Demonstrates |
|---|---|
Unchained.Pdf.Samples |
Create from Markdown, extract text, generate tables, merge, watermark, set metadata, encrypt, render to PNG |
Unchained.Pptx.Samples |
Build a deck (text/shapes/table), read text, export to PDF/SVG/HTML, render slides, encrypt |
# Run every demo in a sample
dotnet run --project samples/Unchained.Pdf.Samples -- all
dotnet run --project samples/Unchained.Pptx.Samples -- all
# Or run a single demo (omit the argument for an interactive menu)
dotnet run --project samples/Unchained.Pdf.Samples -- tablesOutput files are written to an output/ directory next to each sample executable.
All packages target net8.0 · net9.0 · net10.0 and run on:
| Platform | Core | Rendering |
|---|---|---|
| Windows x64 / arm64 | ✅ | ✅ |
| Linux x64 / arm64 | ✅ | ✅ |
| macOS x64 (Intel) / arm64 (Apple Silicon) | ✅ | ✅ |
MIT — see LICENSE.txt.
Third-party component credits and copyright notices are in THIRD_PARTY_NOTICES.md.
See CONTRIBUTING.md. Issues and pull requests are welcome at github.com/Jeffeek/Unchained.
