CrackDiggerEngine 2.0.0

dotnet add package CrackDiggerEngine --version 2.0.0
                    
NuGet\Install-Package CrackDiggerEngine -Version 2.0.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="CrackDiggerEngine" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CrackDiggerEngine" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="CrackDiggerEngine" />
                    
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 CrackDiggerEngine --version 2.0.0
                    
#r "nuget: CrackDiggerEngine, 2.0.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 CrackDiggerEngine@2.0.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=CrackDiggerEngine&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=CrackDiggerEngine&version=2.0.0
                    
Install as a Cake Tool

<div align="center">

CrackDiggerEngine

Search game listings on several public game sites from .NET.

NuGet Downloads License: MIT CI

© 2025–present · @m51v5 · m51v5.com

</div>


CrackDiggerEngine is a .NET library that searches game listing sites for a keyword and returns each result's title, link and image. Search one site, a few, or all of them at once.

Features

  • Several sites, one API: pick a site from an enum, or search them all.
  • Clean results: every result has a title, a link and an image address, never null.
  • Errors as data: a site that fails returns isSuccess = false and an ErrorMessage, so one broken site doesn't stop the others.
  • Ready for JSON: map results to dictionaries in one call.
  • Light: one dependency, HtmlAgilityPack.

Install

dotnet add package CrackDiggerEngine

Needs .NET 8 or newer. Package page: nuget.org/packages/CrackDiggerEngine.


Quick start

using CrackDigger;

var result = await CrackDiggerEngine.FindGameAsync(CrackDiggerEngine.enSiteUri.ovaGamesDotCom, "witcher 3");

if (result.isSuccess)
{
    foreach (var game in result.Data!)
    {
        Console.WriteLine($"{game.Title}: {game.GameLink}");
    }
}
else
{
    Console.WriteLine($"Error: {result.ErrorMessage}");
}

Search every site at once:

var all = await CrackDiggerEngine.FindGameAllSitesAsync("witcher 3");

foreach (var (site, games) in all)
{
    Console.WriteLine($"{site}: {(games.isSuccess ? games.Data!.Count() + " results" : games.ErrorMessage)}");
}

Supported sites

Enum value Site Status (2026-11-07)
fitgirl_repacksDoteSite fitgirl-repacks.site ✅ Works, no images
apunkagamesDotCom apunkagames.com ✅ Works
mrpcgamerDotNet mrpcgamer.net ✅ Works
ovaGamesDotCom ovagames.com ✅ Works
steamUnlockedDotPro steamunlocked.pro ⚠️ Returns results unrelated to the search
cracked_gamesDotOrg cracked-games.org ❌ The site's layout changed; nothing is found
steamripDotCom steamrip.com ❌ Blocked by the site's bot protection

CrackDiggerEngine.getSuporttedSites returns the same list as a dictionary of enum value to domain.


API

All members are on the static class CrackDiggerEngine, in the CrackDigger namespace.

Method Returns
FindGameAsync(enSiteUri site, string keyword) Task<clsGames>: one site's results
FindGameFilteredSitesAsync(List<enSiteUri> sites, string keyword) Task<Dictionary<enSiteUri, clsGames>>: the listed sites, each searched once
FindGameAllSitesAsync(string keyword) Task<Dictionary<enSiteUri, clsGames>>: every supported site

Sites are searched one after another. Each search sends one request to that site.

Results

clsGames, one site's search:

Property Meaning
isSuccess true if the page loaded and results were found
ErrorMessage Why it failed, when isSuccess is false
SearchLink The search address that was requested
SiteUrl The site's domain
Data The results, as IEnumerable<clsGameDataObject>; null when it failed

clsGameDataObject, one result: Title, GameLink, ImageLink. Each is an empty string when the site didn't provide it.

Both classes are created by the library only.

Mapping

Method Returns
MapAllGamesDataAsync(IEnumerable<clsGameDataObject> data) Task<IEnumerable<Dictionary<string, string>>>
MapSingleGameDataAsync(clsGameDataObject data) Task<Dictionary<string, string>>

Each dictionary has the keys title, link and image:

var rows = await CrackDiggerEngine.MapAllGamesDataAsync(result.Data!);
string json = System.Text.Json.JsonSerializer.Serialize(rows);

Privacy

Each search sends one request to that site's search page, with your keyword in the address and a User-Agent naming the library. Nothing goes anywhere else, and nothing is saved. Results come from third-party pages, so treat them as untrusted input. Details are in SECURITY.md.


Documentation

  • Development guide: building, checks, adding or fixing a site, and publishing a release.

Build from source

You need the .NET 8 SDK.

git clone https://github.com/m51v5/CrackDiggerEngine.git
cd CrackDiggerEngine
dotnet build CrackDiggerEngine.sln

Notes

  • Moving from CrackDiggerEngineByM51V5: that package ID is deprecated. Run dotnet remove package CrackDiggerEngineByM51V5, then dotnet add package CrackDiggerEngine, and change using CrackDiggerEngineByM51V5; to using CrackDigger;. Class and method names are the same.
  • Sites change their pages without notice, so a site can stop working between releases. Check isSuccess and ErrorMessage on every result.

Disclaimer

This library works like a search engine: it shows only information that the sites make public. It doesn't claim ownership of that information, which belongs to its owners. It stores nothing and isn't meant to be used against intellectual property or DRM rules.


Contributing and support


License

MIT © @m51v5

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

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
2.0.0 83 11/7/2026