Template paths 

Template and partial root paths are collected from various sources, each with a distinct priority. Higher-priority sources win over lower-priority ones. Within a single source, higher numeric keys override lower ones.

Priority order 

Source Priority Cacheable
Per-content-object TypoScript 100 No
plugin.tx_handlebars.view 50 Yes
Service container (e.g. Services.yaml) 0 Yes

Per-content-object (priority 100) 

Template and partial root paths can be set directly inside a HANDLEBARSTEMPLATE content object. These paths apply only to that specific rendering, including any nested partial lookups triggered by it.

tt_content.textmedia = HANDLEBARSTEMPLATE
tt_content.textmedia {
    templateRootPaths {
        10 = EXT:my_extension/Resources/Private/Templates
    }
    partialRootPaths {
        10 = EXT:my_extension/Resources/Private/Partials
    }
}
Copied!

TypoScript (priority 50) 

Global paths for all renderings on the current page can be configured under plugin.tx_handlebars.view:

plugin.tx_handlebars {
    view {
        templateRootPaths {
            10 = EXT:my_extension/Resources/Private/Templates
        }
        partialRootPaths {
            10 = EXT:my_extension/Resources/Private/Partials
        }
    }
}
Copied!

The cpsit/handlebars site set also populates these paths from the site settings {$handlebars.view.templateRootPath} and {$handlebars.view.partialRootPath}.

Service container (priority 0) 

The lowest-priority source is the service container. Paths registered here apply instance-wide, regardless of the current page or content object, and serve as the global fallback.

Configuration/Services.yaml
handlebars:
  view:
    templateRootPaths:
      10: EXT:my_extension/Resources/Private/Templates
    partialRootPaths:
      10: EXT:my_extension/Resources/Private/Partials
Copied!

The HandlebarsExtension DI extension merges all paths declared this way into the container parameters %handlebars.templateRootPaths% and %handlebars.partialRootPaths%.