A powerful and extensible template-based code generation framework for .NET. Features include Scriban template engine, template partials/includes, generation hooks, schema validation, configuration presets, batch generation, preview/diff, and fluent API.
$ dotnet add package CodeTemplateForgeA lightweight and extensible template-based code generation framework for .NET.
using TemplateForge;
using TemplateForge.Core;
// Create generator
var generator = new CodeGenerator();
// Load templates
await generator.LoadPackageAsync("templates.bin");
// Create context with variables
var context = new TemplateContext()
.Set("project_name", "MyProject")
.Set("version", "1.0.0")
.Set("author", "John Doe");
// Generate code
var result = await generator.GenerateAsync(context, outputPath);
// Using hex value
var generator = new CodeGenerator(0x4D595047); // "MYPG"
// Using string
var generator = new CodeGenerator("MYPG");
// Using helper
using TemplateForge.Utilities;
var magic = MagicNumberHelper.FromString("CHIP");
var generator = new CodeGenerator(magic);
using TemplateForge.Packaging;
// Build package programmatically
var builder = new TemplatePackageBuilder()
.WithId("my-templates")
.WithName("My Template Package")
.WithVersion("1.0.0")
.WithMagicNumber("MYPG") // Custom magic number
.AddTemplatesFromDirectory("./templates");
await builder.SaveAsync("my-templates.bin");
// Or quick pack
await PackageBuilderExtensions.PackDirectoryAsync(
"./templates",
"output.bin",
"*.template",
MagicNumberHelper.FromString("MYPG")
);
using TemplateForge.Extensions;
var context = new TemplateContext()
.SetHex("config_reg", 0x1A, 2) // "1a"
.SetBool("feature_enabled", true) // Sets 3 vars: feature_enabled, feature_enabled_int, is_feature_enabled
.SetDouble("timeout", 2.5) // Smart formatting
.SetEnum("mode", MyEnum.Option1); // Sets mode, mode_value, is_mode_option1, etc.var generator = new CodeGenerator();
generator.ProgressChanged += (s, e) =>
Console.WriteLine($"[{e.ProgressPercentage:F0}%] {e.CurrentTemplate}");
generator.Log += (s, e) =>
Console.WriteLine($"[{e.Level}] {e.Message}");
generator.BeforeRendering += (s, e) =>
{
if (e.TemplateName.Contains("debug"))
e.Cancel = true; // Skip debug templates
};
generator.Completed += (s, e) =>
Console.WriteLine($"Done! {e.FilesGenerated} files in {e.Duration.TotalSeconds:F2}s");var generator = new CodeGenerator()
.WithDefaults()
.WithDirectories("obj", "build")
.Configure(options =>
{
options.OverwriteExisting = true;
options.ContinueOnError = false;
options.ValidateTemplates = true;
options.OutputEncoding = Encoding.UTF8;
});{{ variable_name }}
{{ if condition }}...{{ end }}
{{ for item in collection }}...{{ end }}
{{ variable | string.upcase }}
TemplateForge/
├── Core/ # Template engine interfaces
├── Packaging/ # Package formats and loaders
├── Processing/ # Value and output processors
├── Configuration/ # Generator options
├── Extensions/ # Extension methods
├── Utilities/ # Helper classes
└── CodeGenerator.cs # Main entry point
MIT License