{
  "product": "Specification (reference)",
  "title": "Template Engine",
  "summary": "Render templates against data: interpolation, control flow, partials, escaping.",
  "category": "engines",
  "entries": [
    {
      "path": [
        "AI",
        "Syntax",
        "Variable interpolation"
      ],
      "value": "{{ name }}",
      "status": "yes",
      "note": "with dotted paths"
    },
    {
      "path": [
        "AI",
        "Syntax",
        "Conditionals"
      ],
      "value": "if / else if / else",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Syntax",
        "Loops over collections"
      ],
      "value": "for item in items",
      "status": "yes",
      "note": "with index and first/last flags"
    },
    {
      "path": [
        "AI",
        "Syntax",
        "Comments stripped from output"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Syntax",
        "Literal blocks that skip parsing"
      ],
      "value": "raw",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Composition",
        "Include partials"
      ],
      "value": "",
      "status": "yes",
      "note": "with their own context"
    },
    {
      "path": [
        "AI",
        "Composition",
        "Template inheritance"
      ],
      "value": "extends / block",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Composition",
        "Macros or reusable components"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Data",
        "Filters and pipes"
      ],
      "value": "{{ x | upper | truncate(10) }}",
      "status": "yes",
      "note": "chainable"
    },
    {
      "path": [
        "AI",
        "Data",
        "Custom filters and globals registered by the host"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Safety",
        "Auto-escaping by context"
      ],
      "value": "HTML by default",
      "status": "yes",
      "note": "explicit opt-out per expression"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Missing variables are configurable"
      ],
      "value": "empty or strict error",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Errors",
        "Parse errors report line and column"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Errors",
        "Runtime errors name the template and expression"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Performance",
        "Templates compile once and render many times"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Performance",
        "Loading from disk with caching"
      ],
      "value": "",
      "status": "yes",
      "note": "invalidated on change in dev"
    }
  ]
}
