# Writing a Plugin

A plugin should export a plain JavaScript object(#1). If the plugin needs to take options, it can be a function that returns a plain object(#2). The function will be called with the plugin’s options as the first argument, along with ctx which provides some compile-time metadata.

// #1
module.exports = {
   // ...
}
// #2
module.exports = (options, ctx) => {
   return {
      // ...
   }
}

TIP

A VuePress plugin module should be a CommonJS Module because VuePress plugins runs on the Node.js side.