Skip to content

Configuration & API Reference

This page consolidates the configuration options, public API surface, usage guidance, and common pitfalls for the Granit.Templating module family.

app.MapGranitTemplating(options =>
{
options.RoutePrefix = "api/v1/templates"; // default: "templates"
options.TagName = "Template Administration"; // default: "Templates"
});
CategoryKey typesPackage
ModuleGranitTemplatingModule, GranitTemplatingScribanModule, GranitTemplatingEntityFrameworkCoreModule, GranitTemplatingEndpointsModule, GranitTemplatingWorkflowModule
PipelineITextTemplateRenderer, ITemplateResolver, ITemplateEngineGranit.Templating
PipelineTemplateDescriptor, RenderedContent, TextRenderedContent, BinaryRenderedContent, RenderedTextResultGranit.Templating
KeysTemplateType<TData>, TextTemplateType<TData>, TemplateKey, DocumentFormatGranit.Templating
EnrichmentITemplateDataEnricher<TData>Granit.Templating
LayoutsILayoutRegistry, LayoutRegistrationGranit.Templating
Global contextITemplateGlobalContext, AppGlobalContextOptionsGranit.Templating, Granit.Templating.Scriban
Store (read)IDocumentTemplateStoreReader, ITemplateCategoryStoreReaderGranit.Templating
Store (write)IDocumentTemplateStoreWriter, ITemplateCategoryStoreWriterGranit.Templating
LifecycleWorkflowLifecycleStatus, ITemplateTransitionHook, TemplateRevisionGranit.Templating, Granit.Workflow
PermissionsTemplatingPermissions.Manage ("Templates.Manage")Granit.Templating.Endpoints
ExtensionsAddGranitTemplating(), AddGranitTemplatingWithScriban(), AddEmbeddedTemplates(), AddTemplateLayout()
ExtensionsMapGranitTemplating()Granit.Templating.Endpoints

Use Granit.Templating when:

  • Non-developers need to edit email/SMS/notification content without code changes
  • Templates require approval workflows before reaching customers (ISO 27001, regulated industries)
  • You need multi-language templates with culture fallback and variable injection
  • Template rendering must be sandboxed (user-authored content, no risk of code execution)

Skip it when:

  • You generate static, developer-controlled text (e.g., internal log messages) — string interpolation is simpler
  • You need binary-first output (PDF from scratch, not from HTML) — go directly to Document Generation
  • Templates are single-use and never change — the lifecycle overhead (Draft -> Published) is unnecessary