Skip to content

Granit Tech Stack — ADR-justified dependencies

Frameworks fail when their dependencies stop being maintained. Granit picks each direct dependency the way a senior engineer picks a kitchen knife — based on what’s been kept sharp for years, not what’s trending this quarter. Every choice that had alternatives is captured in an ADR so the reasoning survives the person who made it.

This page lists every direct production dependency, organized by functional domain. Indirect transitive dependencies — and there are many — are tracked in THIRD-PARTY-NOTICES.md.

For test-only dependencies, see Testing stack (ADR-003).

ComponentVersionRole
.NET10Runtime and SDK
C#14Language
ASP.NET Core10Web framework
LibraryLicenseRoleADR
Entity Framework CoreMITORM, migrations, interceptors (audit, soft delete)
Npgsql.EntityFrameworkCore.PostgreSQLPostgreSQLPostgreSQL provider for EF Core
Microsoft.EntityFrameworkCore.SqlServerMITSQL Server provider for EF Core
StackExchange.RedisMITRedis client for distributed cachingADR-002
FusionCacheMITL1/L2 cache with backplane, fail-safe, stampede protection, OpenTelemetryADR-018
Microsoft.Extensions.Caching.HybridMITHybridCache backbone — wrapped by Granit’s tenant-scoped cache service
LibraryLicenseRoleADR
WolverineMITMessage bus, transactional outbox, handler pipelineADR-005
CronosMITCRON expression parsing for recurring jobsADR-005
LibraryLicenseRoleADR
VaultSharpApache-2.0HashiCorp Vault client — used by Granit.Vault.HashiCorp (transit encryption, dynamic credentials)
Azure.Security.KeyVault.KeysMITAzure Key Vault key operations (encrypt/decrypt)
Azure.Security.KeyVault.SecretsMITAzure Key Vault secret management (DB credentials)
Azure.IdentityMITDefaultAzureCredential for Azure SDK authentication
Microsoft.AspNetCore.Authentication.JwtBearerMITJWT Bearer authentication middleware
LibraryLicenseRoleADR
FluentValidationApache-2.0Declarative validation rulesADR-006
SmartFormatMITPluralization in validation messagesADR-008
LibraryLicenseRoleADR
Microsoft.Extensions.AIMITProvider-agnostic IChatClient / IEmbeddingGenerator abstractions — used by Granit.AI
Microsoft.Extensions.AI.OpenAIMITOpenAI integration (GPT-4o, o3/o4-mini, embeddings) for Granit.AI.OpenAI and Granit.AI.AzureOpenAI
Azure.AI.OpenAIMITAzure OpenAI Service client with DefaultAzureCredential support — used by Granit.AI.AzureOpenAI
OllamaSharpMITOllama client for local model execution + /api/show capability discovery — used by Granit.AI.Ollama
Microsoft.Extensions.VectorData.AbstractionsMITProvider-agnostic vector store interface — used by Granit.AI.VectorData
ModelContextProtocolMITMCP client/server SDK — used by Granit.AI.Mcp and Granit.Mcp.{Client,Server}
ModelContextProtocol.AspNetCoreMITASP.NET Core hosting for MCP tool sources
LibraryLicenseRoleADR
Asp.VersioningMITAPI versioning (URL segment, header, query)ADR-004
Scalar.AspNetCoreMITInteractive OpenAPI documentation UIADR-009
Microsoft.AspNetCore.OpenApiMITOpenAPI 3.1 document generation (versioned per major API)ADR-009
Microsoft.AspNetCore.ODataMITOData v4 runtime — bridges QueryDefinition<T> to EntitySets for Power BI / Excel / Tableau in Granit.Http.ODataExposureADR-050
Microsoft.AspNetCore.OutputCaching.StackExchangeRedisMITDistributed output cache backplane for Granit.Http.OutputCaching.StackExchangeRedis
Yarp.ReverseProxyMITReverse-proxy core for the Backend-For-Frontend pattern (Granit.Bff.Yarp)
Microsoft.Extensions.Http.ResilienceMITPolly v8 resilience pipeline for outbound HTTP (retry, circuit breaker, timeout) — used by HTTP-based notification providers and webhook delivery
AngleSharpMITHTML parsing + DOM traversal — used by Granit.Browsing and notification template processors
LibraryLicenseRoleADR
SerilogApache-2.0Structured logging (OTLP sink)ADR-001
OpenTelemetry .NETApache-2.0Distributed tracing, metrics (OTLP export)ADR-001
LibraryLicenseRoleADR
ScribanBSD-2-ClauseTemplate engine (Liquid-compatible, sandboxed)ADR-010
Mjml.NetMITMJML → responsive HTML email transformer in the templating pipeline
PuppeteerSharpMITHTML-to-PDF rendering via headless ChromiumADR-012
Microsoft.PlaywrightApache-2.0Headless browser automation — used by Granit.Browsing providers
PdfPigApache-2.0PDF text extraction for Granit.AI.Extraction and document indexing
ClosedXMLMITExcel (.xlsx) generationADR-011
LibraryLicenseRoleADR
SepMITHigh-performance CSV parsingADR-015
Sylvan.Data.ExcelMITExcel (.xlsx/.xls) parsingADR-016
LibraryLicenseRoleADR
AWSSDK.S3Apache-2.0S3-compatible object storage (MinIO, Ceph, etc.)
Azure.Storage.BlobsMITAzure Blob Storage client — used by Granit.BlobStorage.AzureBlob
Google.Cloud.Storage.V1Apache-2.0Google Cloud Storage client — used by Granit.BlobStorage.GoogleCloud
Magick.NETApache-2.0Image processing (resize, WebP/AVIF, EXIF stripping)ADR-013
LibraryLicenseRoleADR
MailKitMITSMTP email delivery
Azure.Communication.EmailMITAzure Communication Services email sending
Azure.Communication.SmsMITAzure Communication Services SMS sending
AWSSDK.SimpleEmailV2Apache-2.0Amazon SES v2 email delivery — used by Granit.Notifications.Email.AwsSes
AWSSDK.SimpleNotificationServiceApache-2.0Amazon SNS SMS delivery — used by Granit.Notifications.Sms.AwsSns
Microsoft.Azure.NotificationHubsMITAzure Notification Hubs push notifications
Microsoft.AspNetCore.SignalRMITReal-time WebSocket notifications
Lib.Net.Http.WebPushMITWeb Push notifications (VAPID)

Twilio, SendGrid, and Scaleway providers (Granit.Notifications.Twilio, Granit.Notifications.Email.SendGrid, Granit.Notifications.Email.Scaleway) use the vendors’ REST APIs directly via Microsoft.Extensions.Http.Resilience — no vendor SDK is required.

LibraryLicenseRoleADR
Microsoft.IO.RecyclableMemoryStreamMITPooled memory streams (reduces GC pressure)

These libraries are used exclusively in *.Tests projects and are not shipped in production packages.

LibraryLicenseRoleADR
xUnit v3Apache-2.0Test frameworkADR-003
ShouldlyBSD-3-ClauseAssertion libraryADR-003, ADR-014
NSubstituteBSD-3-ClauseMocking frameworkADR-003
BogusMITTest data generationADR-003
TestcontainersMITDocker-based integration testsADR-007
LicenseExamples
MITEF Core, Wolverine, ClosedXML, StackExchange.Redis, Microsoft.Extensions.AI, Microsoft.AspNetCore.OData, Yarp.ReverseProxy, ModelContextProtocol, MailKit, OllamaSharp
Apache-2.0OpenTelemetry, Serilog, FluentValidation, Magick.NET, Google.Cloud.Storage.V1, AWSSDK.*, Microsoft.Playwright, PdfPig
BSD-3-ClauseNSubstitute, Shouldly
BSD-2-ClauseScriban
PostgreSQLNpgsql

All dependencies are OSI-approved open-source licenses compatible with Apache-2.0. Authoritative counts, exact versions, and copyright notices are maintained in THIRD-PARTY-NOTICES.md — the table above is a quick spectrum, not a contract.