CrackDiggerEngine 2.0.0
dotnet add package CrackDiggerEngine --version 2.0.0
NuGet\Install-Package CrackDiggerEngine -Version 2.0.0
<PackageReference Include="CrackDiggerEngine" Version="2.0.0" />
<PackageVersion Include="CrackDiggerEngine" Version="2.0.0" />
<PackageReference Include="CrackDiggerEngine" />
paket add CrackDiggerEngine --version 2.0.0
#r "nuget: CrackDiggerEngine, 2.0.0"
#:package CrackDiggerEngine@2.0.0
#addin nuget:?package=CrackDiggerEngine&version=2.0.0
#tool nuget:?package=CrackDiggerEngine&version=2.0.0
<div align="center">
CrackDiggerEngine
Search game listings on several public game sites from .NET.
© 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 = falseand anErrorMessage, 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.
Search
| 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. Rundotnet remove package CrackDiggerEngineByM51V5, thendotnet add package CrackDiggerEngine, and changeusing CrackDiggerEngineByM51V5;tousing CrackDigger;. Class and method names are the same. - Sites change their pages without notice, so a site can stop working between releases. Check
isSuccessandErrorMessageon 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
- Found a bug, a broken site, or have an idea? Open an issue.
- Want to help? Read the contributing guide and the code of conduct.
- Found a security problem? See SECURITY.md.
- Other ways to reach me: m51v5.com/contact.
License
| 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 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. |
-
net8.0
- HtmlAgilityPack (>= 1.11.72)
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 |