Craftsman Scaffolds Your Boilerplate!
Craftsman is the workhorse behind the Wrapt framework and provides a suite of CLI commands for quickly scaffolding out new files and projects for your .NET Web APIs with simple CLI commands and configuration files.
Quickstart
- Make sure you have the .NET 8 SDK installed, along with EF Core
- Install the craftsman tool
dotnet tool install -g craftsman
- Spin up an example project
craftsman new example MyFirstProject
Documentation
For all the documentation on how to use Craftsman, visit wrapt.dev.
Upcoming Features
You can find some highlights below. I have some reminement items in the pipe and I'm working through a deep example project the really dogfood things and will be making updates around my finding from there.
Have a request for something you don't see in the project? Join our discord and let's talk about it!
Some 0.26 highlights
✅ Primary Constructors
✅ Updated API Versioning
Some 0.25 highlights
✅ .NET 8 scaffolding
✅ Archicture test enhancement
✅ Remove obsolete BFF commands
✅ Fix test actions
Some 0.24 highlights
✅ Logging enhancements and masking
✅ Dependabot and Github Actions for tests
✅ string[] support for Postgres
✅ Value Object property scaffolding
Some 0.23 highlights
✅ Moq -> NSub
✅ New GetAll feature
✅ Hangfire scaffolding
Some 0.22 highlights
✅ Move from Sieve to QueryKit
✅ TestContainers updated
✅ Records for queries and commands and DTOs
✅ Relationships overhaul
Some 0.21 highlights
✅ New default error handler middleware (existing still optional)
✅ Mapster -> Mapperly
Some 0.20 highlights
✅ Intermediate model to not pass DTOs to domain
✅ Specification support
Some 0.19 highlights
✅ Test projects updated to use XUnit
✅ .NET 7
✅ Integration tests have better service collection scoping and now have a service collection per test. This makes service mocking possible without clashing with other tests
✅ Options Pattern Configuration
Some 0.18 highlights
✅ Environment Service
✅ Built in Migrations
✅ Various testing and other improvements
Some 0.17 highlights
✅ Users and Roles managed in each boundary (AuthN still separate)
✅ New Email Value Object
✅ Functional Tests use Docker DB and has other cleanup items
✅ NextJS template (still a WIP and not documented, but you can find the sandbox for things here and poke through the Craftsman code if you'd like. Can answer questions in out Discord as well.)
Some v0.16 highlights
✅ Testing Optimizations
✅ Common Value Object Scaffolding
✅ Auth Server rewrite with Keycloak
✅ Move permission guards to feature
✅ Migrate Automapper to Mapster
Some v0.15 highlights
✅ Updated CLI command structure
✅ OpenTelemetry & Jaeger Tracing
✅ Built in Domain Event support (with unit test scaffolding)
✅ Moved to Program.cs only format
✅ Added repository & unit of work abstractions for better testing and validation
✅ SmartEnum property scaffolding support
Some v0.14 highlights
✅ Duende BFF scaffolding
✅ React scaffolding
✅ Dockerfile and Docker Compose scaffolding
Some v0.13 highlights
✅ DDD promoted entities (private setters, factory methods, associated fakers)
✅ Huge permissions upgrade. Significantly simplified setup which resulted in a new library (HeimGuard) that can be used in any .NET project.
✅ New register:producer command
✅ Added soft delete capability
✅ Added Shared Kernel
Some v0.12 highlights
✅ .NET 6 Scaffolding
✅ Docker utility updates for integration tests using Fluent Docker 🐳
✅ add:feature enhancement to add more than just ad-hoc features
✅ new:example command to generate example projects with associated templates
✅ Auth Server Scaffolding (In-Memory)
✅ Auditable entities
Support
If Wrapt and Craftsman are saving you time and helping your projects, consider sponsoring me on Github to support ongoing Wrapt development and make it even better!
Contributing
Time is of the essence. Before developing a Pull Request I recommend opening a new topic for discussion. I also haven't had enough PR interest to take the time and put together a contributing.md, but if you are interested, I will definitely put together a detailed writeup.
Contact Me
Sometimes Github notifications get lost in the shuffle. If you file an issue and don't hear from me in 24-48 hours feel free to ping me on twitter or Discord (pdevito3#4244). We also have own discord channel now for easy contact with me and larger community discussions!