-
Extremely lightweight
Everything is1.26 kB
(gzip) – even less with tree-shaking! -
Super Performant
Significantly faster than the big names; and the small ones. -
Familiar Syntax
brocha templates look great with Handlebars syntax highlighting. -
Custom Directives
Easily define custom blocks, via the API, to extend functionality.
pnpm add brocha
yarn add brocha
npm i --save brocha
Visit the
/examples
and Syntax Cheatsheet for more info!
example.hbs
render.js
import { readFile } from 'fs/promises'
import { compile, transform } from 'brocha'
const template = await readFile('example.hbs', 'utf8')
// Transform the template into a function
// NOTE: Produces a string; ideal for build/bundlers
// ---
let toESM = transform(template)
console.log(typeof toESM) // => "string"
console.log(toESM)
// => `import{esc as $$1}from"brocha";export default function($$3,$$2){...}`
let toCJS = transform(template, { format: 'cjs' })
console.log(typeof toCJS) // => "string"
console.log(toCJS)
// => `var $$1=require("brocha").esc;module.exports=function($$3,$$2){...}`
// Convert the template into a live function
// NOTE: Produces a `Function`; ideal for runtime/servers
// ---
let render = compile(template)
console.log(typeof render) // => "function"
render({
title: 'Reminders',
items: [
{ id: 1, text: 'Feed the doggo' },
{ id: 2, text: 'Buy groceries' },
{ id: 3, text: 'Exercise, ok' },
]
})
// => "<p>You have 3 tasks remaining!</p>\n"
// => + "<small>You've got this 💪🏼</small>\n\n"
// => + "<ul>\n"
// => + " <li>Feed the doggo</li>\n"
// => + " <li>Buy groceries</li>\n"
// => + " <li>Exercise, ok</li>\n"
// => + "</ul>"
Please refer to the Syntax Cheatsheet.
Visit the API and Custom Blocks for documentation.
Running via Node v14.15.13
Please visit the /bench
directory for complete, reproducible benchmarks.
The following is a subset of the full results, presented without context. Again, please visit /bench
for explanations, comparisons, and/or differences.
Benchmark: Render w/ raw values (no escape)
pug x 34,847 ops/sec ±2.79% (93 runs sampled)
handlebars x 6,700 ops/sec ±1.41% (92 runs sampled)
ejs x 802 ops/sec ±0.54% (94 runs sampled)
dot x 40,704 ops/sec ±3.08% (93 runs sampled)
art-template x 39,839 ops/sec ±0.86% (90 runs sampled)
brocha x 44,656 ops/sec ±0.42% (92 runs sampled)
Benchmark: Render w/ escaped values
pug x 2,800 ops/sec ±0.31% (95 runs sampled)
handlebars x 733 ops/sec ±0.34% (94 runs sampled)
ejs x 376 ops/sec ±0.17% (91 runs sampled)
dot x 707 ops/sec ±0.15% (96 runs sampled)
art-template x 2,707 ops/sec ±0.12% (96 runs sampled)
brocha x 2,922 ops/sec ±0.31% (96 runs sampled)
MIT © Nicholas Berlette. Based on tempura by Luke Edwards.