Scrubkit 0.1.0-preview.1
Prefix ReservedSee the version list below for details.
dotnet add package Scrubkit --version 0.1.0-preview.1
NuGet\Install-Package Scrubkit -Version 0.1.0-preview.1
<PackageReference Include="Scrubkit" Version="0.1.0-preview.1" />
<PackageVersion Include="Scrubkit" Version="0.1.0-preview.1" />
<PackageReference Include="Scrubkit" />
paket add Scrubkit --version 0.1.0-preview.1
#r "nuget: Scrubkit, 0.1.0-preview.1"
#:package Scrubkit@0.1.0-preview.1
#addin nuget:?package=Scrubkit&version=0.1.0-preview.1&prerelease
#tool nuget:?package=Scrubkit&version=0.1.0-preview.1&prerelease
Scrubkit
Point it at a folder, get back a clean table of file text + metadata — fully offline. It quietly scrubs common sensitive values (emails, phones, card/SSN-like numbers, IPs) so you keep what matters about a file without carrying the raw personal data downstream.
The core is fast and small — it handles the common formats out of the box. Need
more? Add opt-in packages (e.g. Scrubkit.Email) that plug new extractors in.
using Scrubkit;
var scrubber = new FolderScrubber(new ReadOptions
{
Recursion = Recursion.AllNested, // or TopOnly
MaxFiles = 1000,
MaxBytesPerFile = 25 * 1024 * 1024,
Redaction = RedactionLevel.Standard,
});
IReadOnlyList<FileRecord> table = await scrubber.ReadAsync(@"C:\Docs");
foreach (var r in table)
Console.WriteLine($"{r.Name}\t{r.TypeBucket}\t{r.Text.Length} chars"
+ (r.HasSensitiveData ? $"\t(scrubbed: {string.Join(",", r.Redactions.Keys)})" : ""));
Core formats
PDF · DOCX · PPTX · XLSX (shared strings) · TXT/MD/CSV/LOG/JSON/XML/HTML/RTF ·
image EXIF (make/model/software). Unknown types return a metadata-only row.
Extraction never throws to the caller — problems land in FileRecord.Warnings.
Adding formats
Implement IFileExtractor and register it — it's tried before the built-ins (so you can
also override one). Extensions arrive lower-cased with the leading dot (e.g. ".xyz"):
public sealed class MyExtractor : IFileExtractor
{
public bool CanHandle(string ext) => ext == ".xyz";
public ExtractedContent Extract(string path) => new(metadata, text);
}
options.Extractors.Add(new MyExtractor());
Extract may throw — FolderScrubber isolates per-file failures into
FileRecord.Warnings, so it never crashes the batch. If you're shipping an add-on as its
own package, reference Scrubkit.Abstractions (contracts only) rather than the full
Scrubkit package, so you don't drag in PdfPig/MetadataExtractor.
Add-on packages (planned): Scrubkit.Email (.eml/.msg), OCR for scanned images,
EPUB, legacy Office, archives.
Large trees: streaming & parallelism
ReadAsync buffers the whole table. For big folders, stream records as they're produced
and/or process files concurrently:
var options = new ReadOptions { MaxDegreeOfParallelism = 4 }; // bounded, order-preserving
await foreach (var r in new FolderScrubber(options).ReadStreamAsync(@"C:\Docs"))
Index(r); // handle each FileRecord without holding them all in memory
With MaxDegreeOfParallelism > 1, your extractors/redactor must be thread-safe (the
built-ins are). Output order is preserved regardless.
Scrubbing is best-effort, not a guarantee
The built-in StandardRedactor is pattern matching. It reduces incidental exposure
of common personal data; it will miss things and is not a compliance tool (not a
substitute for a DLP or PHI review). Need stronger guarantees? Implement IRedactor
(e.g. an NER/model-based pass) and set ReadOptions.Redactor.
100% offline. No network calls. No telemetry.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. 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 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- MetadataExtractor (>= 2.9.3)
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- PdfPig (>= 0.1.15)
- Scrubkit.Abstractions (>= 0.1.0-preview.1)
-
net8.0
- MetadataExtractor (>= 2.9.3)
- PdfPig (>= 0.1.15)
- Scrubkit.Abstractions (>= 0.1.0-preview.1)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Scrubkit:
| Package | Downloads |
|---|---|
|
Scrubkit.Extensions.DependencyInjection
Microsoft.Extensions.DependencyInjection integration for Scrubkit. Call services.AddScrubkit(...) to register a configured FolderScrubber for constructor injection in ASP.NET Core, worker services, and other generic hosts. Configure recursion, limits, add-on extractors, and an optional redactor via the ReadOptions hook. |
|
|
Scrubkit.All
Convenience meta-package that references the entire Scrubkit family: the core (PDF/Office/text/image EXIF + CSV/JSON output), the extractor add-ons (.eml/.msg email, OpenDocument, .epub, legacy binary Office .doc/.xls/.ppt), the AddScrubkit dependency-injection integration, the Microsoft.Extensions.AI local redaction integration, the Semantic Kernel vector store integration, and — on net8.0/net10.0 — Parquet output. Install this to get everything out of the box; install the individual packages instead if you want a lean footprint. No code of its own. |
|
|
Scrubkit.Extensions.MicrosoftExtensionsAI
Microsoft.Extensions.AI integration for Scrubkit. Provides RedactingChatClient (inheriting from DelegatingChatClient) and RedactingEmbeddingGenerator (inheriting from DelegatingEmbeddingGenerator) to redact user prompts and inputs locally and offline before sending them to external/cloud LLM providers. |
|
|
Scrubkit.Extensions.SemanticKernel
Semantic Kernel integration for Scrubkit. Provides helper extension methods to easily ingest, redact, chunk, and index folder contents directly into Semantic Kernel's ISemanticTextMemory or modern IVectorStoreRecordCollection stores. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.12.0 | 228 | 8/24/2026 |
| 1.11.0 | 307 | 8/4/2026 |
| 1.10.0 | 287 | 7/31/2026 |
| 1.9.0 | 228 | 7/27/2026 |
| 1.8.0 | 203 | 7/24/2026 |
| 1.7.0 | 191 | 7/22/2026 |
| 1.6.0 | 204 | 7/22/2026 |
| 1.5.0 | 214 | 7/21/2026 |
| 1.4.0 | 200 | 7/20/2026 |
| 1.3.0 | 162 | 7/19/2026 |
| 1.2.0 | 109 | 7/18/2026 |
| 1.1.0 | 115 | 7/17/2026 |
| 1.0.0 | 120 | 7/15/2026 |
| 0.1.0-preview.1 | 70 | 7/12/2026 |
See the changelog: https://github.com/jjopensoftworks-blip/Scrubkit/blob/main/CHANGELOG.md