FryPdf.PluginSdk 0.1.0

dotnet add package FryPdf.PluginSdk --version 0.1.0
                    
NuGet\Install-Package FryPdf.PluginSdk -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FryPdf.PluginSdk" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FryPdf.PluginSdk" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="FryPdf.PluginSdk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FryPdf.PluginSdk --version 0.1.0
                    
#r "nuget: FryPdf.PluginSdk, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FryPdf.PluginSdk@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FryPdf.PluginSdk&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=FryPdf.PluginSdk&version=0.1.0
                    
Install as a Cake Tool

FryPdf.PluginSdk

The official, cross-platform Plugin SDK and core document processing engine for FryPDF — a high-performance, privacy-first PDF creation and editing studio built with .NET 10, SkiaSharp, UglyToad.PdfPig, and QuestPDF.

NuGet License: MIT


What is FryPdf.PluginSdk?

FryPdf.PluginSdk provides all contracts, extension descriptors, typed dispatch pipelines, and domain models required to develop third-party plugins for FryPDF.

Plugins run in isolated, collectible AssemblyLoadContext sandboxes and can extend every major application pillar without modifying host code:

  • PDF Tools: Custom document operations (watermarking, redaction, converters, merge/split)
  • Ribbon Actions & Tabs: Dynamic ribbon contributions and button capsules
  • Contextual Sidebars & Overlays: Document telemetry, metadata inspectors, interactive panels
  • Custom Canvas Elements: Custom visual and interactive elements
  • AI & OCR Engines: Custom model connectors and text extractors
  • Document Importers & Exporters: Custom format ingestion and rendering

Installation

Add the SDK package to your plugin project via NuGet:

dotnet add package FryPdf.PluginSdk

Or reference it in your .csproj:

<ItemGroup>
  
  <PackageReference Include="FryPdf.PluginSdk" Version="1.0.0" PrivateAssets="all" />
</ItemGroup>

Important: Host assemblies are provided by the running FryPDF application at runtime. Always set PrivateAssets="all" on FryPdf.PluginSdk in your plugin project to prevent shipping duplicate assemblies inside your .fryplugin bundle.


Quickstart: Creating a Plugin

1. Implement IFryPlugin

using System;
using System.Threading;
using System.Threading.Tasks;
using PdfEditorApp.Core.Plugins;
using PdfEditorApp.Core.Plugins.Descriptors;

namespace MyAwesomePlugin;

public class MyWatermarkPlugin : IFryPlugin
{
    public string Id => "com.example.watermark";
    public string Name => "Quick Watermark";
    public Version Version => new(1, 0, 0);

    public Task ApplyAsync(IFryPluginContext ctx, CancellationToken ct = default)
    {
        // Register a tool descriptor
        ctx.RegisterTool(new PdfToolDescriptor
        {
            Id = Id,
            Name = Name,
            Description = "Applies a custom watermark to every page",
            Category = "OptimizeAndSecurity",
            IconKind = "Watermark",
            IconColorHex = "#0284C7"
        });

        // Register reversible teardown effects
        ctx.RegisterEffect(() =>
        {
            // Cleanup on plugin unload
        });

        return Task.CompletedTask;
    }
}

2. Define plugin.json Manifest

Add plugin.json in your plugin project root:

{
  "id": "com.example.watermark",
  "name": "Quick Watermark",
  "version": "1.0.0",
  "author": "Acme Tools",
  "description": "Applies custom watermarks across all document pages.",
  "category": "Tools",
  "entryPoint": "MyAwesomePlugin.dll"
}

3. Package as .fryplugin

Plugins are packaged as .fryplugin zip archives containing your compiled plugin DLL, dependencies, and plugin.json. Users can install them directly into FryPDF via drag-and-drop or the built-in Plugin Manager.


Architecture Principles

  1. Inverted Capability Context (IFryPluginContext): Plugins register and consume capabilities via a thread-safe context with zero static coupling.
  2. Reversible Effects (PluginScope): All side effects registered via ctx.RegisterEffect are unwound in reverse order on plugin unload to eliminate memory leaks.
  3. Directed Acyclic Graph (DAG) Solver: Dependencies declared via RequiredServices are topologically sorted and mounted deterministically.
  4. Typed Dispatch Pipelines: Composable middleware pipelines (Waterfall, Bail, Parallel, Serial, Emit) for document processing.

Resources & Documentation

Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on FryPdf.PluginSdk:

Package Downloads
FryPdf.Plugin.TicTacToe

Playable Tic-Tac-Toe shell overlay plugin for FryPDF

FryPdf.Plugin.Chess

Playable Chess game shell overlay plugin for FryPDF (CPU vs User)

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 0 9/14/2026
0.0.9 38 9/13/2026
0.0.8 52 9/12/2026