HybridCache + Redis: Solving Distributed Cache Invalidation
Two-tier caches are fast, but cross-pod invalidation is the part everyone gets wrong. Here is how the L1 + L2 + backplane pattern works, and how Granit wires it up with Redis.
Two-tier caches are fast, but cross-pod invalidation is the part everyone gets wrong. Here is how the L1 + L2 + backplane pattern works, and how Granit wires it up with Redis.
Scattering validation across controllers, services, and entities produces inconsistent errors and missed cases. Pin it to the API boundary with FluentValidation and endpoint filters — and let the platform do the rest.
MediatR is in-process only — no outbox, no retry, no transport. Wolverine is the CQRS bus most teams actually need. Here is how Granit uses it.
Wire Serilog, OpenTelemetry and the Grafana LGTM stack into a .NET 10 app in one call. Structured logs, distributed traces, metrics — all OTLP, all sovereign.
IOptions, IOptionsSnapshot, and IOptionsMonitor solve different problems. Picking the wrong one causes stale config, unnecessary allocations, or subtle concurrency bugs. Here is when to use each — with real examples from Granit’s 128 packages.
Hardcoded connection strings and static API keys are a breach waiting to happen. HashiCorp Vault gives you dynamic credentials, transit encryption, and per-entity key isolation — and Granit integrates all three as a single module dependency.
A dropped connection, a mobile retry, a load-balancer timeout — any of these can duplicate a POST. Idempotency keys turn dangerous replays into harmless no-ops, and Granit ships the entire pattern as a single middleware.
SSE, SignalR, or raw WebSockets? A practical decision framework for .NET real-time applications, with protocol deep-dives, trade-offs, and ready-to-use Granit code samples for each transport.
FullStackHero and Granit both target modular .NET applications, but their architectures, compliance stories, and extension models diverge sharply. Here is a fair, side-by-side comparison for architects choosing their next foundation.
The new Granit.Mcp module family wraps the MCP C# SDK to expose your application capabilities to AI agents, with auto-discovery, RBAC authorization, and GDPR-compliant output sanitization.
Your React app stores access tokens in localStorage. A compromised npm package reads them. Game over. Granit.Bff moves token handling to the server, so the browser only sees an HttpOnly cookie it cannot read.
Granit ships 100+ NuGet packages with zero circular dependencies, enforced by Kahn’s algorithm at startup and architecture tests at build time.
Granit is an open-source modular framework for .NET 10 — 100+ packages, zero circular dependencies, GDPR and ISO 27001 compliance built in. Here is why we built it and what it gives you.
Shared DbContexts create hidden coupling between modules. Here is how Granit enforces database isolation per module — and why it makes microservice extraction mechanical.
Microservices are not a goal. They are a trade-off. Here is why Granit bets on the modular monolith as the default architecture — and how the framework makes extraction painless when the time comes.