Ddap.GraphQL
1.0.1
See the version list below for details.
dotnet add package Ddap.GraphQL --version 1.0.1
NuGet\Install-Package Ddap.GraphQL -Version 1.0.1
<PackageReference Include="Ddap.GraphQL" Version="1.0.1" />
<PackageVersion Include="Ddap.GraphQL" Version="1.0.1" />
<PackageReference Include="Ddap.GraphQL" />
paket add Ddap.GraphQL --version 1.0.1
#r "nuget: Ddap.GraphQL, 1.0.1"
#:package Ddap.GraphQL@1.0.1
#addin nuget:?package=Ddap.GraphQL&version=1.0.1
#tool nuget:?package=Ddap.GraphQL&version=1.0.1
ποΈ DDAP - Developer in Control
Dynamic Data API Provider. You control everything. We handle the boilerplate.
β‘ 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) |
β
Project templates (dotnet new) |
π― 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 β
βββββββββββββββββββββββββββββββββββββββ
π 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 } }
OR Use the Template
dotnet new install Ddap.Templates
dotnet new ddap-api --name MyApi
cd MyApi
dotnet run
β¨ 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
};
π¦ Project Templates
dotnet new ddap-api --database-provider dapper --database-type mysql --api-providers "rest,graphql"
ποΈ 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 | Description | Status |
|---|---|---|
| Server Packages | ||
Ddap.Core |
Core abstractions and infrastructure | β Stable |
Ddap.Data.Dapper |
Dapper provider (database-agnostic) | β Stable |
Ddap.Data.EntityFramework |
Entity Framework Core provider | β Stable |
Ddap.Rest |
REST API endpoints | β Stable |
Ddap.GraphQL |
GraphQL API (HotChocolate) | β Stable |
Ddap.Grpc |
gRPC services | β Stable |
Ddap.Auth |
Authentication and authorization | β Stable |
Ddap.Subscriptions |
Real-time subscriptions | β Stable |
Ddap.Aspire |
.NET Aspire orchestration | β Stable |
Ddap.Templates |
Project templates | β Stable |
Ddap.CodeGen |
Source generators | β Stable |
| Client Packages | ||
Ddap.Client.Core |
Core client abstractions | β Stable |
Ddap.Client.Rest |
REST client | β Stable |
Ddap.Client.GraphQL |
GraphQL client | β Stable |
Ddap.Client.Grpc |
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
- π¦ Templates -
dotnet newguide - ποΈ 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.Core (>= 1.0.1)
- HotChocolate.AspNetCore (>= 15.1.12)
- HotChocolate.Types.Scalars (>= 15.1.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Ddap.GraphQL:
| Package | Downloads |
|---|---|
|
Ddap.Subscriptions
Real-time subscription support for DDAP using SignalR and GraphQL subscriptions for live data updates. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.2.333-preview-333 | 47 | 2/1/2026 |
| 1.0.2.282-preview-282 | 36 | 1/31/2026 |
| 1.0.2.272-preview-272 | 35 | 1/31/2026 |
| 1.0.2.220-preview-220 | 37 | 1/30/2026 |
| 1.0.2.216-preview-216 | 37 | 1/30/2026 |
| 1.0.2.3 | 40 | 2/1/2026 |
| 1.0.2-alpha.2 | 34 | 1/30/2026 |
| 1.0.1 | 81 | 1/30/2026 |
| 1.0.0-preview-20260130-022600 | 30 | 1/30/2026 |
| 1.0.0-preview-20260130-022504 | 33 | 1/30/2026 |
| 1.0.0-preview-20260130-021737 | 30 | 1/30/2026 |
| 1.0.0-preview-20260130-020856 | 37 | 1/30/2026 |
| 1.0.0-preview-20260130-020409 | 40 | 1/30/2026 |
| 1.0.0-preview-20260130-010758 | 37 | 1/30/2026 |
| 1.0.0-preview-20260129-232814 | 36 | 1/29/2026 |
| 1.0.0-preview-20260129-141732 | 35 | 1/29/2026 |
| 1.0.0-preview-20260129-111901 | 35 | 1/29/2026 |
| 1.0.0-preview-20260124-015241 | 43 | 1/24/2026 |