GameKit.Auth
JWT issuance + refresh, Steam, Discord, guest, and password login built in. Google, Apple, Epic, and Argon2 hashing ship as sibling packages.
GameKit is a GPL-licensed .NET 10 library — auth, matchmaking, rankings, presence, lobbies, and an admin console as composable NuGet packages you compile into your own ASP.NET Core app. Postgres, Redis, your hardware. Nothing else.
$ dotnet add package GameKit.Core
$ dotnet add package GameKit.Auth
$ dotnet add package GameKit.Matchmaking
$ dotnet add package GameKit.Rankings
$ dotnet new install GameKit.Templates
$ dotnet new gamekit -n MyGame
The template "GameKit" was created successfully.
$ docker compose up -d postgres redis
$ dotnet run
GameKit is not a standalone service you deploy next to your game.
It’s a set of NuGet packages you install into your own ASP.NET Core application
— your Program.cs, your DI container, your middleware pipeline, your routes.
The result is a complete, production-capable backend that runs on hardware you control.
Every algorithm and strategy is an interface you can replace:
IMatchmakingStrategy, IRankingAlgorithm,
IOAuthProvider, IPasswordHasher. Install only what
you need. Own the rest. Depend on no cloud service.
Every module is its own NuGet package. Anonymous install, no account, no key.
JWT issuance + refresh, Steam, Discord, guest, and password login built in. Google, Apple, Epic, and Argon2 hashing ship as sibling packages.
Redis-backed live queues with pools, rating brackets, parties, backfill, and a background matcher that’s safe across replicas.
Glicko-2 by default, seasons with reset policies, ladders, and leaderboards. Swap the math via IRankingAlgorithm.
Online / offline / in-match status from TTL-keyed Redis heartbeats. No Postgres tables, no polling loops in your game.
Real-time lobbies over SignalR with a REST surface and a Redis backplane for multi-replica deployments.
Blazor Server admin console: player search, bans, audit log, queue depth, and live health — mounted inside your app.
Entities, DbContext, the fluent builder, GDPR export / delete, account merge, and rate-limiting helpers. The one required package.
Operator tooling: run migrations, take backups, and drill disaster recovery from the terminal — no dashboard required.
An OpenAPI document for every endpoint you mount, generated from the modules you actually installed.
One fluent builder wires everything into your own DI container. Real code — this is the actual API.
var gamekit = builder.Services
.AddGameKit(o => o.ConnectionString = cs);
// JWT + Steam / Discord / guest sign-in
gamekit.AddAuth(a => a.Steam.Realm = realm)
.AddPresence() // Redis heartbeats
.AddLobby(); // SignalR lobbies
// Glicko-2 ladder + bracketed matchmaking
gamekit.AddRankings().AddLadder("ranked");
gamekit.AddMatchmaking().AddLadder("ranked");
var app = builder.Build();
app.UseGameKitAuth();
app.UseGameKit(); // authz + auto-migrate
app.MapGameKit(); app.MapAuth();
app.MapMatchmaking(); app.MapRankings();
app.Run();
// Every algorithm is an interface.
// Ship your own matcher — GameKit
// discovers it in your DI container.
public sealed class RegionAwareStrategy
: IMatchmakingStrategy
{
// pair by ping + rating bracket ...
}
builder.Services.AddSingleton<
IMatchmakingStrategy,
RegionAwareStrategy>();
// The same seam exists everywhere:
// IRankingAlgorithm — swap Glicko-2
// IOAuthProvider — bring your own IdP
// IPasswordHasher — BCrypt or Argon2
/health/live and /health/ready endpoints, wired for your load balancer out of the box.
Leader leases for background tickers and graceful drain — scale your app horizontally without split-brain matchers.
OpenTelemetry traces and metrics for every module — and zero instrumentation cost if you never turn it on.
Player data export, delete, and account merge are first-class operations, not a support ticket.
Backup, disaster recovery, and per-package migrations driven by gamekit CLI commands and documented runbooks.
dotnet new gamekit → docker compose up → first authenticated player and first completed match.