Facet 1.9.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Facet --version 1.9.1
                    
NuGet\Install-Package Facet -Version 1.9.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Facet" Version="1.9.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Facet" Version="1.9.1" />
                    
Directory.Packages.props
<PackageReference Include="Facet" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Facet --version 1.9.1
                    
#r "nuget: Facet, 1.9.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Facet@1.9.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Facet&version=1.9.1
                    
Install as a Cake Addin
#tool nuget:?package=Facet&version=1.9.1
                    
Install as a Cake Tool

Facet

"One part of a subject, situation, object that has many parts."

Facet is a C# source generator that lets you define lightweight projections (DTOs, API models, etc.) directly from your domain models — without writing boilerplate.

It generates partial classes, records, structs, or record structs with constructors, LINQ projections, and even supports custom mappings — all at compile time, with zero runtime cost.


What is Facetting?

Facetting is the process of defining focused views of a larger model at compile time.

Instead of manually writing separate DTOs, mappers, and projections, Facet allows you to declare what you want to keep — and generates everything else.

You can think of it like carving out a specific facet of a gem:

  • The part you care about
  • Leaving the rest behind.

Why Facetting?

  • Reduce duplication across DTOs, projections, and ViewModels
  • Maintain strong typing with no runtime cost
  • Stay DRY (Don't Repeat Yourself) without sacrificing performance
  • Works seamlessly with LINQ providers like Entity Framework

Key Features

  • ✅ Generate classes, records, structs, or record structs from existing types
  • ✅ Exclude fields/properties you don't want (create a Facetted view of your model)
  • ✅ Include/redact public fields
  • ✅ Auto-generate constructors for fast mapping
  • ✅ LINQ projection expressions (Expression<Func<TSource,TTarget>>)
  • ✅ Custom mapping via IFacetMapConfiguration
  • ✅ Provider-agnostic extension methods for mapping and projecting

Documentation

The Facet Ecosystem

Facet is modular and consists of the following NuGet packages:

  • Facet: The core source generator with built-in extension methods and mapping configuration support. Generates DTOs, projections, and mapping code with provider-agnostic extension methods.

  • Facet.Extensions.EFCore: Async extension methods for Entity Framework Core (requires EF Core 6+).


Facet — Define less, project more.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Facet:

Package Downloads
Facet.Extensions

Provider-agnostic extension methods for Facet.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.6.1 23 9/10/2025
2.6.0 52 9/9/2025
2.5.0 252 9/4/2025
2.4.8 190 9/3/2025
2.4.7 239 9/1/2025
2.4.6 131 9/1/2025
2.4.5 201 8/30/2025
2.4.4 415 8/27/2025
2.4.3 188 8/27/2025
2.4.2 180 8/27/2025
2.4.1 214 8/26/2025
2.4.0 203 8/26/2025
2.3.0 1,544 8/20/2025
2.2.0 158 8/20/2025
2.1.0 266 8/18/2025
2.0.1 762 8/5/2025
2.0.0 154 8/4/2025
1.9.3 196 7/4/2025
1.9.1 155 7/3/2025
1.9.0 153 7/3/2025
1.8.0 252 6/4/2025
1.7.0 210 5/6/2025
1.6.0 179 4/27/2025
1.5.0 218 4/26/2025
1.4.0 143 4/25/2025
1.3.0 170 4/24/2025
1.2.0 175 4/24/2025
1.1.1 175 4/23/2025
1.1.0 180 4/23/2025
1.0.2 374 4/23/2025
1.0.1 190 4/23/2025
1.0.0 189 4/23/2025
0.1.0 182 4/22/2025