docs: function (opts, cb) {
          assert.object(opts, 'opts');
          assert.func(cb, 'cb');
          // asserts of other inputs done by parse and installRoutes respectively
          vasync.pipeline({arg: {}, funcs: [
              function parse(ctx, _cb) {
                  parser.parse(opts, function (err, config) {
                      ctx.config = config.validatedConfig;
                      ctx.basePath = config.basePath;
                      return _cb(err);
                  });
              },
              function installRoutes(ctx, _cb) {
                  install({
                      enroute: ctx.config,
                      server: opts.server,
                      basePath: ctx.basePath,
                      hotReload: opts.hotReload,
                      excludePath: opts.excludePath
                  }, function (err) {
                      return _cb(err);
                  });
              }
          ]}, function (err, res) {
              return cb(err);
          });
      }