node package manager



NPM version Build status Test coverage Dependency Status License Downloads

A node.js view system similar to what you're used to with Express' res.render(). Inspired by co-views and consolidate.js.

  • First-class async support. .render() always returns a Promise.
  • Streams are supported.
  • Template adapters are integrated, but are retrieved lazily to avoid code bloat.
  • Easier plugin system for custom renderers.


$ npm install templation


var Templation = require('templation')
var views = new Templation()
views.use('html', Templation.engines.html)

var views = new Templation(options)

Create a new view system. Options are:

  • cache - whether to cache the templates. Defaults to true in production.
  • root - the root folder to look for templates. Defaults to process.cwd(), so you should set this.

views.use(extension, engine)

Use a custom view engine. extension is a file extension to map this engine to. engine is an object with the following methods:

  • .compile(filename, options) - it should return (optionally via promise) a "compiled template". The "compiled template" must be an object or function. This gets cached when cache: true!
  • .render(compiled, options) - compiled is whatever is compiled from .compile(). It should return (optionally via promise) a String, Buffer, or Stream

views.render(name, options)

Render the template name, which resolves against root. Returns a promise, which then returns a String, Buffer, or Stream.


Enable or disable the caching system. (true / false)


A list of included engines. Generally, the API usage is:

views.use('html', Templation.engines.html)

Included adapters are:


var Templation = require('templation')
var views = new Templation()
views.use('html', Templation.engines.html)
http.createServer(function (req, res) {
  views.render('home').then(function (html) {
    // assuming html is a string 
    res.setHeader('Content-Length', Buffer.byteLength(html))
    res.setHeader('Content-Type', 'text/html')
  }, function (err) {
    res.statusCode = err.status || 500
    res.end('Internal Server Error')

License (MIT)