docs: function exportMixin(feed,mixin,mixinName,stable) {
  	var s = '/**\n';
  	s += '* '+mixin.title+'\n';
  	if (mixin.href) {
  		s += '* '+mixin.href+'\n';
  		if (!checkHref(mixin.href,mixin.name)) {
  			console.log('! Mixin '+mixinName+'('+mixin.name+') does not appear in');
  			console.log('  '+mixin.href);
  		}
  	}
  	if (mixin.depends_on) {
  		s += '* depends_on = '+mixin.depends_on+'\n';
  	}
  	if (mixin.prohibits) {
  		s += prohibits(mixin.prohibits);
  	}
  	if (mixin.dependency_on) {
  		s += depend(mixin.dependency_on);
  	}
  	if (mixin.affected_by) {
  		if (mixin.affected_by.filter) {
  			for (var i=0;i<mixin.affected_by.filter.length;i++) {
  				s += '* is affected by filter '+mixin.affected_by.filter[i].name+' ('+mixin.affected_by.filter[i].description+')\n';
  			}
  		}
  	}
  
  	s += '*/\n';
  	if (stable) {
  		fs.appendFileSync(apijs, s+'const '+mixinName+" = 'mixin="+mixin.name+"';\n", 'utf8');
  	}
  	else {
  		fs.appendFileSync(apijs, s+'const '+mixinName+" = 'unstable_mixin="+mixin.name+"&mixin="+mixin.name+"';\n", 'utf8');
  	}
  	cache.push(mixinName+' : '+mixinName+',\n');
  
  	var param = {};
  	for (var p in params) {
  		if (params[p].name == 'mixin') {
  			param = params[p];
  		}
  	}
  	if (!param.name) {
  		param.name = 'mixin';
  		param.in = 'query';
  		param.description = 'Mixins:\n';
  		param.schema = {};
  		param.schema.type = 'array';
  		//param.collectionFormat = 'multi';
  		param.schema.items = {};
  		param.schema.items.type = 'string';
  		param.required = false;
  		param.schema.items.enum = [];
  		params.push(param);
  	}
  	param.schema.items.enum.push(mixin.name);
  	param.description += '* '+mixin.name+': '+mixin.title+'\n';
  
  	if (!stable) {
  		param = {};
  		for (var p in params) {
  			if (params[p].name == 'unstable_mixin') {
  				param = params[p];
  			}
  		}
  		if (!param.name) {
  			param.name = 'unstable_mixin';
  			param.in = 'query';
  			param.description = 'Unstable mixins:\n';
  			param.schema = {};
  			param.schema.type = 'array';
  			//param.collectionFormat = 'multi';
  			param.schema.items = {};
  			param.schema.items.type = 'string';
  			param.required = false;
  			param.schema.items.enum = [];
  			params.push(param);
  		}
  		param.schema.items.enum.push(mixin.name);
  		param.description += '* '+mixin.name+': '+mixin.title+'\n';
  	}
  
  	return s;
  }