Higher-level template rendering for node.js using generators
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples fix examples and readme Feb 11, 2015
test replace utils-merge with object-assign Aug 28, 2015
.gitignore Initial commit Sep 6, 2013
History.md v2.1.0 Aug 28, 2015
Makefile Initial commit Sep 6, 2013
Readme.md Fix typo in readme (#26) Jul 19, 2016
index.js replace utils-merge with object-assign Aug 28, 2015
package.json v2.1.0 Aug 28, 2015



Template rendering for co using co-render. This module provides higher level sugar than co-render to reduce redundancy, for example specifying a views directory and default extension name.


$ npm install co-views

And install whichever engine(s) you use:

$ npm install ejs jade


  • map an object mapping extension names to engine names [{}]
  • default default extension name to use when missing [html]
  • cache cached compiled functions [NODE_ENV != 'development']


For example if you wanted to use "swig" for .html files you would simply pass:

{ map: { html: 'swig' } }


Set the default template extension when none is passed to the render function. This defaults to "html". For example if you mostly use Jade, then you'd likely want to assign this to:

{ default: 'jade' }

Allowing you to invoke render('user') instead of render('user.jade').


When true compiled template functions will be cached in-memory, this prevents subsequent disk i/o, as well as the additional compilation step that most template engines perform. By default this is enabled when the NODE_ENV environment variable is anything but "development", such as "stage" or "production".


Render several users with different template engines in parallel. View lookup is performed relative to the ./examples directory passed, and the "swig" engine is mapped to ".html" files.

var co = require('co');
var views = require('co-views');

var render = views('examples', {
  map: { html: 'swig' }

var tobi = {
  name: 'tobi',
  species: 'ferret'

var loki = {
  name: 'loki',
  species: 'ferret'

var luna = {
  name: 'luna',
  species: 'cat'

co(function *(){
  var a = render('user', { user: tobi });
  var b = render('user.jade', { user: loki });
  var c = render('user.ejs', { user: luna });
  var html = yield [a, b, c];
  html = html.join('');

App-wide views

Dependending on your choice of application structure, you may wish to share these same settings between all of your application, instead of constantly initializing co-views. To do this simply create a views.js module and export the render function returned:

var views = require('co-views');

module.exports = views('views', {
  map: {
    html: 'swig',
    md: 'hogan'