docs: function render (config, cb) {
  	if (!config.src) {
  		throw new Error("No source directory provided. " +
  			"Set config.src to a directory that contains source templates.");
  	}
  	if (!config.dest) {
  		throw new Error("No destination directory provided. " +
  			"Set config.dest to a directory in which to render and save templates.");
  	}
  	if (!config.engine) {
  		throw new Error("No template engine provided. " +
  			"Set config.engine to a consolidate.js supported template engine. " +
  			"You may also want to add it to your package.json.");
  	}
  
  	try {
  		require(config.engine);
  	} catch (e) {
  		throw new Error("The template engine \"" + config.engine + "\" was not found. " +
  			"Did you forget to install it?\n\n    npm install --save-dev " +
  			config.engine + '\n');
  	}
  
  	var files = find(config.src, config.extension),
  		remaining = files.length,
  		stripExtension = config.stripExtension !== false;
  
  	function checkRemaining () {
  		remaining--;
  		if (!remaining && cb) {
  			cb();
  		}
  	}
  
  	function saveFile (file, err, data) {
  		if (err) {
  			throw err;
  		}
  
  		var dest = file.dest(config.dest, stripExtension);
  
  		mkdirp.sync(path.dirname(dest));
  		fs.writeFileSync(dest, data, 'utf8');
  
  		checkRemaining();
  	}
  
  	function renderFile (file) {
  		file.addData(config.data);
  
  		consolidate[config.engine](
  			path.join(config.src, file.src),
  			file.data,
  			saveFile.bind(null, file)
  		);
  	}
  
  	files.forEach(renderFile);
  }