v1.3 — Production Ready

One config. Full REST API. Zero boilerplate.

Ninjadog uses a powerful template engine to generate your entire API stack from a single JSON config. No runtime reflection, no manual wiring, no files to keep in sync.

ninjadog.json
{
  "entities": {
    "Product": {
      "properties": {
        "Id":    { "type": "Guid", "isKey": true },
        "Name":  { "type": "string" },
        "Price": { "type": "decimal" }
      }
    }
  }
}
~33
Files generated
~10
Lines you write
0
Runtime reflection
0s
To full CRUD

Why Ninjadog?

Stop hand-rolling boilerplate. Annotate your entity and let the compiler do the heavy lifting.

Without Ninjadog
Code per entity ~500+ lines
Files to maintain 20+ files
Layer sync Manual
Runtime cost Depends
Reflection Often required
Time to full CRUD Hours
With Ninjadog
Code per entity ~10 lines
Files to maintain 1 file
Layer sync Automatic
Runtime cost Zero
Reflection None
Time to full CRUD Seconds

33 files from one entity

Each entity defined in ninjadog.json produces a complete, production-ready API layer.

Endpoints
5 files
Create, GetAll, GetOne, Update, Delete — paginated, typed routes
Contracts
7 files
DTOs, request objects, and response objects for every operation
Data Layer
4 files
Repository + interface, service + interface with Dapper & SQLite
Mapping
4 files
Domain-to-DTO, DTO-to-Domain, and contract conversions
Validation
2 files
FluentValidation for Create & Update, type-aware rules
OpenAPI
5 files
Full Swagger documentation summaries for each endpoint
Database
2 files
Schema initializer & connection factory with type-correct columns
Project Setup
4 files
Program.cs, appsettings.json, DI extensions, and domain entity classes
Browse all generators

Build & run. That's it.

Annotate your class, run dotnet build, and your full CRUD API is ready.

Terminal
# Initialize a new project
$ ninjadog init
Ninjadog settings file created successfully.

# Generate the API
$ ninjadog build
Build succeeded.
    33 files generated for Product

# Run the API
$ cd src/applications/MyApi && dotnet run
Now listening on: https://localhost:5001
POST /products Create
GET /products List all
GET /products/{id:guid} Get one
PUT /products/{id:guid} Update
DELETE /products/{id:guid} Delete
Route constraints are generated automatically based on your key type — :guid for Guid, :int for int, and untyped for string.

Ready to ship faster?

Get started in under 2 minutes. One config, one command, full API.

$ dotnet tool install -g Ninjadog
Get Started in 2 Minutes View on NuGet