Ddap.Grpc
1.0.2.3
See the version list below for details.
dotnet add package Ddap.Grpc --version 1.0.2.3
NuGet\Install-Package Ddap.Grpc -Version 1.0.2.3
<PackageReference Include="Ddap.Grpc" Version="1.0.2.3" />
<PackageVersion Include="Ddap.Grpc" Version="1.0.2.3" />
<PackageReference Include="Ddap.Grpc" />
paket add Ddap.Grpc --version 1.0.2.3
#r "nuget: Ddap.Grpc, 1.0.2.3"
#:package Ddap.Grpc@1.0.2.3
#addin nuget:?package=Ddap.Grpc&version=1.0.2.3
#tool nuget:?package=Ddap.Grpc&version=1.0.2.3
<div align="center"> <img src="icons/icon.svg" alt="DDAP Icon" width="128" height="128">
ποΈ DDAP - Developer in Control
Dynamic Data API Provider. You control everything. We handle the boilerplate.
β οΈ Migrating from v0.x? Package names have changed. See Known Issues for migration guide. </div>
β‘ What is DDAP?
DDAP automatically generates REST, GraphQL, and gRPC APIs from your database schemaβbut without forcing any decisions on you.
Unlike other frameworks that lock you into specific libraries, databases, or patterns, DDAP provides infrastructure only. You choose:
- ποΈ Your database (SQL Server, MySQL, PostgreSQL, SQLite, or custom)
- π§ Your ORM (Dapper or Entity Framework)
- π¨ Your serializer (System.Text.Json, Newtonsoft.Json, or any)
- π Your API style (REST, GraphQL, gRPC, or all three)
DDAP discovers your schema, generates base types, and gets out of your way.
π― Developer in Control
| What DDAP Provides | What You Control |
|---|---|
| β Entity discovery from database | π― Database type (SQL Server, MySQL, etc.) |
| β Metadata mapping (tables, columns, keys) | π― ORM choice (Dapper or Entity Framework) |
| β Base API types (controllers, queries, services) | π― Serialization library (any JSON library) |
| β Auto-Reload infrastructure | π― Auto-Reload configuration (when, how) |
| β Hooks and lifecycle callbacks | π― GraphQL configuration (complete control) |
| β Partial classes for extension | π― REST configuration (formatters, routing) |
| π― gRPC configuration (services, options) | |
| π― Everything else! |
β Other Frameworks vs β DDAP
βββββββββββββββββββββββββββββββββββββββ
β π« Opinionated Frameworks β
β β Force Newtonsoft.Json β
β β Hardcode XML/YAML formatters β
β β Database-specific packages β
β β Hidden configurations β
β β Lock you into patterns β
βββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ
β β
DDAP - Developer in Control β
β β
You choose serializer β
β β
You configure formatters β
β β
Single Dapper, ANY database β
β β
Everything explicit β
β β
You own the architecture β
βββββββββββββββββββββββββββββββββββββββ
π€ Why DDAP?
The Problem: Framework Lock-In
Most API frameworks promise to speed up development, but they lock you into their choices:
- π Fixed Dependencies: Forced to use specific libraries (Newtonsoft.Json, Entity Framework, etc.)
- π Hidden Magic: Behavior you can't see, debug, or modify
- π Database Coupling: Tight integration with specific database providers
- π Migration Pain: When you need to change, you rewrite everything
Example: Your framework uses Newtonsoft.Json internally. You want to switch to System.Text.Json for performance. You can'tβit's hardcoded. You're stuck.
The DDAP Solution: Infrastructure, Not Opinion
DDAP takes a radically different approach. We provide infrastructure without forcing any decisions:
π― Developer Empowerment
You make every technical decision. Want to use Dapper? Use Dapper. Want Entity Framework? Use Entity Framework. Want to switch tomorrow? Switch. DDAP adapts to your choicesβyou never adapt to DDAP.
// YOUR choice of database - any IDbConnection works
builder.Services.AddDdap()
.AddDapper(() => new MySqlConnection(...)) // Or SqlConnection, NpgsqlConnection, etc.
.AddRest();
// Later, switch to Entity Framework - no problem
builder.Services.AddDdap()
.AddEntityFramework<MyDbContext>()
.AddRest();
πͺΆ Minimal Dependencies
DDAP Core has ZERO opinionated dependencies. We don't bundle:
- β No JSON library (you choose: System.Text.Json, Newtonsoft.Json, or custom)
- β No database drivers (you add only what you need)
- β No specific ORM version (you control your dependency graph)
- β No hidden middleware (you see and control everything)
Result: Your application stays lean. You only pay for what you use.
π‘οΈ Resilient Abstraction
DDAP abstracts the right things:
- β Schema Discovery: We handle reading database metadata
- β Code Generation: We generate boilerplate (controllers, queries, types)
- β API Plumbing: We provide base classes you can extend
- β NOT Business Logic: Your domain stays yours
- β NOT Configuration: You configure everything explicitly
If DDAP disappeared tomorrow, your application would still workβyou own the architecture.
π Zero-Downtime Evolution
Auto-Reload System detects schema changes and reloads without restarting:
options.AutoReload = new AutoReloadOptions
{
Enabled = true,
IdleTimeout = TimeSpan.FromMinutes(5),
Strategy = ReloadStrategy.InvalidateAndRebuild, // You choose
Behavior = ReloadBehavior.ServeOldSchema // You choose
};
Deploy database changes. DDAP detects them. API updates automatically. Zero downtime.
When to Use DDAP
β Use DDAP when you want:
- Full control over your technology stack
- To avoid framework lock-in
- Minimal dependencies in your application
- Explicit, debuggable configuration
- Freedom to evolve your architecture
- Database-first or schema-first development
- Multiple API protocols (REST + GraphQL + gRPC)
β Don't use DDAP if:
- You prefer frameworks that make all decisions for you
- You're building a non-database-backed API
- You want an all-in-one solution with batteries included
- You're okay with framework lock-in
The DDAP Philosophy
"Framework features should be opt-in, not opt-out. Decisions should be explicit, not implicit. The developer should control the framework, not the other way around."
DDAP is infrastructure you control, not a framework that controls you.
π Quick Start
1. Install packages
dotnet add package Ddap.Core
dotnet add package Ddap.Data.Dapper # OR Ddap.Data.EntityFramework
dotnet add package Ddap.GraphQL # Optional
dotnet add package Ddap.Rest # Optional
dotnet add package Ddap.Grpc # Optional
2. Configure (Dapper example)
using Microsoft.Data.SqlClient;
var builder = WebApplication.CreateBuilder(args);
// YOU choose the database connection
builder.Services.AddDdap()
.AddDapper(() => new SqlConnection(
builder.Configuration.GetConnectionString("DefaultConnection")
))
.AddRest()
.AddGraphQL(graphql =>
{
// YOU configure HotChocolate
graphql
.AddFiltering()
.AddSorting()
.AddProjections();
});
var app = builder.Build();
app.MapControllers();
app.MapGraphQL();
app.Run();
3. Done! π
- REST:
GET /api/entity - GraphQL:
POST /graphql { entities { name } }
β¨ Features
ποΈ Database Agnostic
- Dapper: Works with ANY
IDbConnection(SQL Server, MySQL, PostgreSQL, SQLite, Oracle, etc.) - Entity Framework: Use your existing
DbContext
π Multi-Protocol APIs
- REST: Standard HTTP/JSON endpoints with full controller customization
- GraphQL: Powered by HotChocolate, fully configurable
- gRPC: High-performance RPC, configurable services
π Auto-Reload System
Automatically reloads database schema after idle periods:
- β 3 Strategies: InvalidateAndRebuild, HotReloadIncremental, RestartExecutor
- β 3 Behaviors: ServeOldSchema, BlockRequests, QueueRequests
- β 3 Detection Methods: AlwaysReload, CheckHash, CheckTimestamps
- β Lifecycle Hooks: OnBeforeReloadAsync, OnAfterReloadAsync
options.AutoReload = new AutoReloadOptions
{
Enabled = true,
IdleTimeout = TimeSpan.FromMinutes(5),
Strategy = ReloadStrategy.InvalidateAndRebuild,
Behavior = ReloadBehavior.ServeOldSchema,
Detection = ChangeDetection.CheckHash
};
ποΈ Zero Opinions
- No forced dependencies
- No hidden configurations
- No magic behavior
- You configure everything
π§ Fully Extensible
// Extend via partial classes
namespace Ddap.Rest;
public partial class EntityController
{
[HttpGet("custom")]
public IActionResult Custom() => Ok("Your endpoint");
}
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββ
β Your Application β
β (Controllers, Services, Business Logic) β
βββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββββββββΌββββββββββββββββββββββββββββ
β DDAP Core Infrastructure β
β β
Entity Discovery β
β β
Metadata Mapping β
β β
Base Type Generation β
β β
Auto-Reload Management β
β β
Lifecycle Hooks β
βββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββββββββΌββββββββββββββββββββββββββββ
β Your Configuration Choices β
β π― Database: SQL Server / MySQL / etc. β
β π― ORM: Dapper / Entity Framework β
β π― Serializer: System.Text.Json / etc. β
β π― APIs: REST / GraphQL / gRPC β
βββββββββββββββββββββββββββββββββββββββββββββ
π¦ Packages
Package Status Legend
- β Stable: Production-ready, fully tested
- β οΈ Known Issues: Functional with documented issues
Core Infrastructure
| Package | Description | Status |
|---|---|---|
Ddap.Core |
Core abstractions, infrastructure, and base types | β Stable |
Data Access Providers
| Package | Description | Status |
|---|---|---|
| Dapper-Based | ||
Ddap.Data.Dapper |
Dapper provider (works with ANY IDbConnection) |
β Stable |
| Entity Framework-Based | ||
Ddap.Data.EntityFramework |
Entity Framework Core provider | β Stable |
Note: Dapper is database-agnostic. Add your database driver (e.g.,
Microsoft.Data.SqlClient,MySqlConnector,Npgsql) alongsideDdap.Data.Dapper.
API Protocol Providers
| Package | Description | Status |
|---|---|---|
Ddap.Rest |
REST API endpoints with full controller customization | β Stable |
Ddap.GraphQL |
GraphQL API powered by HotChocolate | β Stable |
Ddap.Grpc |
High-performance gRPC services | β Stable |
Additional Features
| Package | Description | Status |
|---|---|---|
Ddap.Auth |
JWT authentication and authorization | β Stable |
Ddap.Subscriptions |
Real-time subscriptions (WebSockets, SignalR) | β Stable |
Ddap.Aspire |
.NET Aspire orchestration and observability | β Stable |
Development Tools
| Package | Description | Status |
|---|---|---|
Ddap.CodeGen |
Source generators for boilerplate code | β Stable |
Client Libraries
| Package | Description | Status |
|---|---|---|
Ddap.Client.Core |
Core client abstractions and base types | β Stable |
Ddap.Client.Rest |
Type-safe REST client | β Stable |
Ddap.Client.GraphQL |
GraphQL client with query building | β Stable |
Ddap.Client.Grpc |
High-performance gRPC client | β Stable |
π Documentation
- π― Philosophy - Developer in Control
- π Getting Started - Step-by-step guide
- ποΈ Database Providers - Dapper vs EF
- π API Providers - REST, GraphQL, gRPC
- π Auto-Reload - Schema refresh system
- ποΈ Architecture - How it works
- π§ Advanced - Extensibility
- π Troubleshooting - Common issues
π€ Contributing
Contributions welcome! See CONTRIBUTING.md
π License
MIT License - see LICENSE
β Star History
If DDAP helps you, please star the repo! π
Built with β€οΈ by developers who believe in control, not constraints.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- Ddap.Auth (>= 1.0.2.3)
- Ddap.Core (>= 1.0.2.3)
- Grpc.AspNetCore (>= 2.76.0)
- Microsoft.AspNetCore.Mvc.Core (>= 2.3.9)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.2)
- Newtonsoft.Json (>= 13.0.3)
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 |
|---|---|---|
| 1.0.2.333-preview-333 | 27 | 2/1/2026 |
| 1.0.2.282-preview-282 | 29 | 1/31/2026 |
| 1.0.2.272-preview-272 | 30 | 1/31/2026 |
| 1.0.2.220-preview-220 | 29 | 1/30/2026 |
| 1.0.2.216-preview-216 | 27 | 1/30/2026 |
| 1.0.2.3 | 27 | 2/1/2026 |
| 1.0.2-alpha.2 | 31 | 1/30/2026 |
| 1.0.1 | 73 | 1/30/2026 |
| 1.0.0-preview-20260130-022600 | 28 | 1/30/2026 |
| 1.0.0-preview-20260130-022504 | 24 | 1/30/2026 |
| 1.0.0-preview-20260130-021738 | 25 | 1/30/2026 |
| 1.0.0-preview-20260130-020856 | 29 | 1/30/2026 |
| 1.0.0-preview-20260130-020409 | 29 | 1/30/2026 |
| 1.0.0-preview-20260130-010758 | 30 | 1/30/2026 |
| 1.0.0-preview-20260129-232815 | 30 | 1/29/2026 |
| 1.0.0-preview-20260129-141732 | 27 | 1/29/2026 |
| 1.0.0-preview-20260129-111901 | 29 | 1/29/2026 |
| 1.0.0-preview-20260124-015241 | 34 | 1/24/2026 |