Convert Figma logo to code with AI

pdevito3 logocraftsman

A .NET scaffolding tool to help you stop worrying about boilerplate and focus on your business logic ๐Ÿš€

1,143
69
1,143
10

Top Related Projects

5,808

๐Ÿš€ A lightweight, framework-agnostic database migration tool.

Swagger 2.0 implementation for go

17,982

Infinite Red's battle-tested React Native project boilerplate, along with a CLI, component/model generators, and more! 9 years of continuous development and counting.

5,758

The simple, fast, and scalable code generator that lives in your project.

Quick Overview

Craftsman is a .NET scaffolding tool designed to streamline the process of creating and maintaining .NET projects, particularly those following Clean Architecture principles. It automates the generation of boilerplate code, API endpoints, and database migrations, allowing developers to focus on core business logic.

Pros

  • Accelerates development by generating consistent, well-structured code
  • Supports Clean Architecture and Domain-Driven Design principles out of the box
  • Offers customizable templates to fit specific project needs
  • Integrates well with popular .NET libraries and frameworks

Cons

  • Learning curve for developers unfamiliar with the tool's conventions
  • May generate more code than necessary for simple projects
  • Limited flexibility for projects with unconventional architectures
  • Requires regular updates to keep up with changes in .NET ecosystem

Code Examples

  1. Creating a new API project:
craftsman new api MyAwesomeApi

This command generates a new API project with the name "MyAwesomeApi" using Craftsman's default template.

  1. Adding a new entity to an existing project:
craftsman add entity Product -n "Name" -n "Description" -n "Price:decimal"

This command adds a new "Product" entity with "Name", "Description", and "Price" properties to the project.

  1. Generating database migrations:
craftsman add migration "InitialMigration"

This command creates a new database migration named "InitialMigration" based on the current entity models.

Getting Started

To get started with Craftsman, follow these steps:

  1. Install the Craftsman CLI tool:

    dotnet tool install -g craftsman
    
  2. Create a new API project:

    craftsman new api MyProject
    
  3. Navigate to the project directory and run the API:

    cd MyProject/MyProject
    dotnet run
    

This will create a new API project, set up the necessary files and folders, and start the API server.

Competitor Comparisons

5,808

๐Ÿš€ A lightweight, framework-agnostic database migration tool.

Pros of dbmate

  • Language-agnostic database migration tool, supporting multiple databases
  • Simple CLI interface for easy integration into various workflows
  • Supports both SQL and Go-based migrations

Cons of dbmate

  • Limited to database migrations, lacking broader application scaffolding features
  • Doesn't provide code generation capabilities for other parts of the application
  • Less opinionated about project structure compared to Craftsman

Code Comparison

dbmate migration example:

-- migrate:up
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name VARCHAR(255),
  email VARCHAR(255) NOT NULL
);

-- migrate:down
DROP TABLE users;

Craftsman entity example:

public class User : BaseEntity
{
    public string Name { get; set; }
    public string Email { get; set; }
}

Summary

dbmate is a focused database migration tool that works across multiple languages and databases. It excels in simplicity and flexibility for managing database schemas. Craftsman, on the other hand, is a more comprehensive solution for .NET projects, offering full application scaffolding and code generation beyond just database migrations. While dbmate provides a straightforward approach to database management, Craftsman offers a more opinionated and feature-rich experience for .NET developers looking to quickly bootstrap entire applications.

Swagger 2.0 implementation for go

Pros of go-swagger

  • Mature and widely adopted project with extensive documentation
  • Supports generating server stubs and client SDKs from Swagger/OpenAPI specs
  • Offers a CLI tool for easy integration into development workflows

Cons of go-swagger

  • Limited to Go language, while Craftsman supports multiple languages
  • Focuses primarily on API development, whereas Craftsman offers broader project scaffolding
  • Steeper learning curve for developers new to Swagger/OpenAPI specifications

Code Comparison

go-swagger example:

swagger generate server -f ./swagger.yaml -A myapp

Craftsman example:

craftsman new api MyApi

Key Differences

  • go-swagger is specifically designed for Swagger/OpenAPI-based API development in Go
  • Craftsman is a more general-purpose project scaffolding tool supporting multiple languages and frameworks
  • go-swagger generates code from existing Swagger/OpenAPI specs, while Craftsman creates new project structures based on user input

Use Cases

  • Choose go-swagger for Go-based API projects with existing Swagger/OpenAPI specifications
  • Opt for Craftsman when starting new projects in various languages or requiring more comprehensive scaffolding
17,982

Infinite Red's battle-tested React Native project boilerplate, along with a CLI, component/model generators, and more! 9 years of continuous development and counting.

Pros of Ignite

  • Broader ecosystem support, including React Native and mobile app development
  • More extensive documentation and community resources
  • Longer project history and larger user base

Cons of Ignite

  • Less focused on backend development compared to Craftsman
  • May have a steeper learning curve for developers new to React Native
  • Not specifically tailored for .NET development

Code Comparison

Ignite CLI command:

ignite new MyAwesomeApp

Craftsman CLI command:

craftsman new api MyAwesomeApi

Key Differences

  • Focus: Ignite is primarily for React Native app development, while Craftsman specializes in .NET API development
  • Language: Ignite uses JavaScript/TypeScript, Craftsman uses C#
  • Target Audience: Ignite caters to mobile app developers, Craftsman targets backend developers
  • Customization: Craftsman offers more fine-grained control over API structure and features
  • Ecosystem: Ignite has a larger ecosystem of plugins and extensions

Conclusion

Both Ignite and Craftsman are valuable tools for their respective domains. Ignite excels in React Native development with a rich ecosystem, while Craftsman provides a more specialized solution for .NET API development with detailed customization options. The choice between them depends on the specific project requirements and the developer's preferred technology stack.

5,758

The simple, fast, and scalable code generator that lives in your project.

Pros of Hygen

  • Language-agnostic and can be used with various programming languages and frameworks
  • Highly customizable with a flexible templating system
  • Supports interactive prompts for dynamic code generation

Cons of Hygen

  • Requires more setup and configuration for specific project structures
  • Less opinionated, which may lead to inconsistencies across projects
  • Steeper learning curve for creating custom templates

Code Comparison

Hygen template example:

---
to: app/models/<%= name %>.js
---
const <%= Name %> = {
  name: '<%= name %>',
  // Add more properties here
}

module.exports = <%= Name %>

Craftsman template example:

public class <%= entity.Name %>
{
    public Guid Id { get; set; }
    // Add more properties here
}

Both tools use similar templating syntax, but Craftsman is more focused on .NET-specific code generation, while Hygen offers a more generic approach suitable for various languages and frameworks.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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.

Latest Release License


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!