Skip to content

Explore Templates

Now let's examine the templates that will generate our database documentation. Understanding how templates work is key to creating your own custom code generation.

📁 Template Structure

The tutorial uses two main files in the tutorial-database-documenter folder:

  • table.tmpl - The Go template that generates markdown documentation
  • templates.json - Configuration file that tells Monstarillo what to do

🔧 Configuration Breakdown

Let's examine the templates.json configuration:

{
  "templates": [
    {
      "templateFile": "{{getTag .Tags \"TemplateRoot\"}}/tutorial-database-documenter/table.tmpl",
      "generatedFileName": "{{ .CurrentTable.GetCamelCaseTableName}}.md",
      "generatedFolderName": "tables",
      "minimumGeneratedFileLength": 0,
      "outputPath": "{{getTag .Tags \"OutputPath\"}}/",
      "overwriteFile": true
    }
  ],
  "tags": [
    {
      "tagName": "TemplateRoot",
      "value": "/home/patrick/code/templates"
    },
    {
      "tagName": "OutputPath",
      "value": "/home/patrick/code-gen-output/postgres-chinhook-db-md"
    }
  ]
}

Template Configuration Properties

Property Value Purpose
templateFile {{getTag .Tags "TemplateRoot"}}/tutorial-database-documenter/table.tmpl Path to the template file using the TemplateRoot tag
generatedFileName {{ .CurrentTable.GetCamelCaseTableName}}.md Dynamic filename based on table name (e.g., Album.md)
generatedFolderName tables Subdirectory to organize generated files
outputPath {{getTag .Tags "OutputPath"}}/ Root output directory using OutputPath tag
overwriteFile true Replace existing files if they exist
minimumGeneratedFileLength 0 Create files regardless of size (0 = no minimum)

Configuration Tags

Tags are reusable variables that keep your configuration flexible:

Tag Purpose Example Value
TemplateRoot Location of template files /Users/you/monstarillo-templates
OutputPath Where to save generated files /Users/you/output

Dynamic Values

Notice how the configuration uses template variables: - {{getTag .Tags "TemplateRoot"}} - References the TemplateRoot tag - {{ .CurrentTable.GetCamelCaseTableName}} - Uses table metadata for filenames

📄 The Template File

The table.tmpl file contains Go template syntax that generates markdown documentation. Here's what it does:

Template Purpose

  • Input: Database table metadata (columns, types, relationships)
  • Output: Formatted markdown documentation for each table
  • Result: Human-readable database documentation

Template Variables Available

The template has access to rich database metadata through the Monstarillo context:

{{ .CurrentTable.Name }}              // Table name
{{ .CurrentTable.Columns }}           // Array of columns
{{ .CurrentTable.PrimaryKeys }}       // Primary key columns
{{ range .CurrentTable.Columns }}
  {{ .Name }}                         // Column name
  {{ .DataType }}                     // Database data type
  {{ .GoLangDataType }}              // Go equivalent type
{{ end }}
{{ .Tables }}                         // All database tables
{{ .Tags }}                          // Configuration tags

🎯 Generation Process

When Monstarillo runs, here's what happens:

  1. Connect to your database
  2. Extract metadata for all tables
  3. Loop through each table:
  4. Set CurrentTable to the current table being processed
  5. Execute table.tmpl with table data
  6. Generate TableName.md file in outputPath/tables/
  7. Repeat for every table in the database

Example Output

For a table named album, Monstarillo will: - Process the album table metadata - Generate a file named Album.md - Save it to [OutputPath]/tables/Album.md - Include column information, data types, and relationships


🚀 Next Steps

Ready to see this in action? Let's run Monstarillo and generate our database documentation:

Run Monstarillo →


💡 Template Customization Ideas

Once you understand the basics, you can create templates for:

  • REST API endpoints (Go, Java, Node.js)
  • Database models (Sequelize, GORM, Hibernate)
  • GraphQL schemas
  • API documentation (OpenAPI/Swagger)
  • Test files with realistic data

The API Reference documents all available template variables and methods.