# Plugins Plugins are self-contained code that usually add global-level functionality to Lune. ## Using a Plugin ```js import { createApp } from "lune-js"; import myPlugin from "./my-plugin"; createApp().use(myPlugin, {/* options */}).mount(); ``` ## Writing a Plugin A plugin is an object with an `install` method: ```js export default { install: (app, options) => { // add a global directive app.directive("my-directive", (ctx) => { // ... }); } }; ``` A plain function works too, and is called with the same arguments: ```js export default function myPlugin(app, options) { app.directive("my-directive", (ctx) => { // ... }); } ``` Anything else — or a plugin passed twice to the same app — logs a development warning and is ignored. Since `install` receives the app instance, a plugin can register directives, read or extend `app.scope`, and mount the app itself. ## Example ```html
``` ```js // log.js export default { install: (app, options) => { app.directive("log", ({ exp }) => { console.log(exp); }); } }; ```