ASP.NET Core + Hot Chocolate GraphQL + EF Core Starter
ASP.NET Core Minimal APIs, PostgreSQL, Entity Framework Core, Hot Chocolate GraphQL, Serilog, and Health Checks form a backend service configuration where the generated project is centered on a backend service. Better Fullstack can scaffold this exact compatibility-checked selection.
01 / selection
Stack at a glance
| Role | Technology | Repository description | Scope |
|---|---|---|---|
| Backend | ASP.NET Core Minimal APIs | Lightweight ASP.NET Core APIs with route handlers | Primary backend |
| Database | PostgreSQL | Advanced SQL database | Project-wide |
| Data access | Entity Framework Core | Code-first ORM with LINQ queries and migrations | Scoped to the backend |
| Authentication | None | Skip .NET auth selection | Project-wide |
| API | Hot Chocolate GraphQL | GraphQL server for .NET with code-first schemas | Scoped to the backend |
| Realtime | None | Skip .NET realtime selection | Project-wide |
| Observability | Serilog | Structured logging with rich sink ecosystem | Scoped to the backend |
| Observability | Health Checks | ASP.NET Core liveness and readiness endpoints | Scoped to the backend |
| Testing | xUnit | Common .NET test framework | Scoped to the backend |
| Testing | Testcontainers for .NET | Disposable Docker-backed integration tests | Scoped to the backend |
02 / architecture
How the pieces fit
- The generated stack is centered on a backend service with no browser frontend.
- Entity Framework Core is scoped to the backend.
- Hot Chocolate GraphQL is scoped to the backend.
- Serilog is scoped to the backend.
- Health Checks is scoped to the backend.
- xUnit is scoped to the backend.
- Testcontainers for .NET is scoped to the backend.
03 / output
What gets generated
The virtual generator produced 13 files across 1 directories. The output is a single-directory project.
Top-level entries
- ./.env.example
- ./.gitignore
- ./AGENTS.md
- ./CLAUDE.md
- ./Dockerfile
- ./Program.cs
- ./README.md
- ./appsettings.Development.json
- ./appsettings.json
- ./my_app.Tests
- ./my_app.csproj
- ./my_app.http
Representative files
- README.md
- Program.cs
- .env.example
- .gitignore
- AGENTS.md
- CLAUDE.md
- Dockerfile
- appsettings.Development.json
04 / create
Create command
This is the canonical Bun command generated for the selection.
bun create better-fullstack@latest my-app --ecosystem dotnet --database postgres --dotnet-web-framework aspnet-minimal --dotnet-orm ef-core --dotnet-auth none --dotnet-api graphql-hotchocolate --dotnet-testing xunit testcontainers-dotnet --dotnet-job-queue none --dotnet-realtime none --dotnet-observability serilog health-checks --dotnet-validation none --dotnet-caching none --dotnet-deploy docker --dotnet-libraries none --ai-docs claude-md agents-md05 / builder
Open in the builder
- eco
- dotnet
- db
- postgres
- au
- none
- dnauth
- none
- dnapi
- graphql-hotchocolate
- dntest
- xunit,testcontainers-dotnet
- dnrt
- none
- dnobs
- serilog,health-checks
06 / checks
Compatibility notes
Compatibility checked against Better Fullstack types version 2.8.0.
The generated record has 0 graph issues and 0 disabled selected options. This is a compatibility check, not a claim that this exact scaffold received a runtime smoke verification.
- .NET Auth is intentionally set to none.
- .NET Realtime is intentionally set to none.
07 / fit
When to choose this shape
Choose this shape when the generated project should expose backend functionality without a browser frontend.
08 / next
Related stacks and guide
Need a walkthrough? Read the related stack guide.
09 / faq
Questions
Is this combination supported?
It passes the repository's compatibility analysis, selected-option checks, stack graph validation, project schema parsing, and virtual generation. That result is described here as compatibility checked.
Does it generate one app or separate parts?
The generated project is centered on a backend service. The actual generated output uses a single-directory layout.
How can I customize the selection?
Open the generated builder link above. Its query parameters reproduce this selection, and the builder can change compatible options before generating a new command.