DOCS v0.1.13 github

@hatch:template v0.1.2

Jinja/Twig-style templating for HTML and XML with first-class htmx support — fragments, components, slots, conditionals, loops, response helpers.

stable system updated May 1, 2026 source ↗
README
$ hatch add @hatch:template

MOD template

CL TemplateError

NEW TemplateError.new(msg)

GET TemplateError.message

GET TemplateError.toString

CL Lex_

NEW Lex_.new(src)

GET Lex_.tokens

FN Lex_.static scan(src)

FN Lex_.run()

FN Lex_.flushText_()

FN Lex_.interp_()

FN Lex_.stmt_()

FN Lex_.skipLeadingWs_()

FN Lex_.comment_()

FN Lex_.rtrim_(s)

CL ExprParse_

NEW ExprParse_.new(src)

GET ExprParse_.pos_

FN ExprParse_.static parse(src)

FN ExprParse_.skipWs_()

FN ExprParse_.peek_(s)

FN ExprParse_.peekWord_(w)

FN ExprParse_.eat_(s)

FN ExprParse_.eatWord_(w)

FN ExprParse_.parseOr_()

FN ExprParse_.parseAnd_()

FN ExprParse_.parseNot_()

FN ExprParse_.parseCmp_()

FN ExprParse_.parseFilter_()

FN ExprParse_.parsePrimary_()

FN ExprParse_.parsePath_(base)

FN ExprParse_.parseIdent_()

FN ExprParse_.parseString_()

FN ExprParse_.parseNumber_()

FN ExprParse_.isDigit_(c)

FN ExprParse_.isIdentStart_(c)

FN ExprParse_.isIdentCh_(c)

CL Parse_

NEW Parse_.new(tokens)

GET Parse_.pos_

FN Parse_.static parse(tokens)

FN Parse_.peekStmt_()

FN Parse_.parseBody_(endWords)

FN Parse_.parseStmt_(kw, raw)

FN Parse_.parseExtends_(raw)

FN Parse_.parseBlock_(raw)

FN Parse_.parseIf_(raw)

FN Parse_.parseFor_(raw)

FN Parse_.parseSlot_(raw)

FN Parse_.parseEmbed_(raw)

FN Parse_.parseEmbedTail_(name, rest)

FN Parse_.parseFillBody_(raw)

FN Parse_.splitNameTail_(tail)

FN Parse_.parseObjectBindings_(s)

FN Parse_.splitTopLevelCommas_(s)

FN Parse_.findTopLevelChar_(s, ch)

FN Parse_.parseFragment_(raw)

FN Parse_.parseCall_(raw)

FN Parse_.parseSet_(raw)

FN Parse_.parseInclude_(raw)

FN Parse_.firstWord_(s)

FN Parse_.rest_(kw, s)

FN Parse_.findInKeyword_(s)

CL Scope_

NEW Scope_.root(ctx)

NEW Scope_.child(parent)

FN Scope_.set(name, value)

FN Scope_.lookup(name)

FN Scope_.has(name)

CL SlotFill_

NEW SlotFill_.new(body, scope, comps, slots, registry)

FN SlotFill_.renderWith(bindings)

CL Render_

NEW Render_.new(nodes, components, slots, fragmentName, blocks, registry, frags)

GET Render_.output

GET Render_.found_

FN Render_.static render(nodes, scope, comps, slots)

FN Render_.static renderFull(nodes, scope, comps, slots, blocks, registry)

FN Render_.static renderFullWithFrags(nodes, scope, comps, slots, blocks, registry, frags)

FN Render_.static renderFragment(nodes, scope, name, comps, slots)

FN Render_.static renderFragmentFull(nodes, scope, name, comps, slots, blocks, registry)

FN Render_.walkAll(nodes, scope)

FN Render_.walk_(n, scope)

FN Render_.bindCallArgs_(params, argExprs, child, scope)

FN Render_.evalExpr_(e, scope)

FN Render_.evalPath_(e, scope)

FN Render_.dotGet_(v, name)

FN Render_.indexGet_(v, idx)

FN Render_.cmp_(op, l, r)

FN Render_.applyFilter_(name, v, args)

FN Render_.truthy_(v)

FN Render_.toList_(seq)

FN Render_.stringify_(v)

FN Render_.htmlEscape_(s)

FN Render_.toUpper_(s)

FN Render_.toLower_(s)

CL MapLoader

NEW MapLoader.new(sources)

FN MapLoader.load(name)

CL FnLoader

NEW FnLoader.new(fn)

FN FnLoader.load(name)

CL TemplateRegistry

NEW TemplateRegistry.new(loader)

FN TemplateRegistry.get(name)

FN TemplateRegistry.render(name, ctx)

FN TemplateRegistry.renderFragment(name, fragName, ctx)

CL Template

NEW Template.parse_(ast, registry)

GET Template.ast_

GET Template.blocks_

GET Template.extendsParent_

GET Template.registry_

GET Template.fragments_

FN Template.static parse(src)

FN Template.static parseWith(src, registry)

FN Template.analyze_(ast)

FN Template.collectFragments_(nodes)

FN Template.render(ctx)

FN Template.renderFragment(name, ctx)

FN Template.renderWithOverrides_(scope, ctx, overrides)

CL HxResponse

NEW HxResponse.new(body)

GET HxResponse.body

GET HxResponse.headers

FN HxResponse.trigger(name)

FN HxResponse.trigger(name, detail)

FN HxResponse.triggerAfterSettle(name)

FN HxResponse.triggerAfterSettle(name, detail)

FN HxResponse.triggerAfterSwap(name)

FN HxResponse.triggerAfterSwap(name, detail)

FN HxResponse.pushUrl(url)

FN HxResponse.replaceUrl(url)

FN HxResponse.redirect(url)

FN HxResponse.location(url)

FN HxResponse.refresh()

FN HxResponse.retarget(sel)

FN HxResponse.reswap(mode)

FN HxResponse.reselect(sel)

FN HxResponse.header(name, value)

FN HxResponse.setHeader_(name, value)

FN HxResponse.jsonEvent_(name, detail)

FN HxResponse.jsonValue_(v)

FN HxResponse.jsonEscape_(s)

CL Hx

FN Hx.static response(body)

FN Hx.static response()

FN Hx.static isRequest(headers)

FN Hx.static context(headers)

FN Hx.static lowerAscii_(s)