CINXE.COM
devel:plugins [DokuWiki]
<!DOCTYPE html> <html lang="en" dir="ltr" class="no-js"> <head> <meta charset="utf-8" /> <title>devel:plugins [DokuWiki]</title> <meta name="generator" content="DokuWiki"/> <meta name="theme-color" content="#008800"/> <meta name="robots" content="index,follow"/> <meta name="keywords" content="devel,plugins"/> <link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="DokuWiki"/> <link rel="start" href="/"/> <link rel="contents" href="/devel:plugins?do=index" title="Sitemap"/> <link rel="manifest" href="/lib/exe/manifest.php"/> <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/feed.php"/> <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&ns=devel"/> <link rel="edit" title="Edit this page" href="/devel:plugins?do=edit"/> <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/devel:plugins"/> <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/devel:plugins"/> <link rel="canonical" href="https://www.dokuwiki.org/devel:plugins"/> <link rel="stylesheet" href="/lib/exe/css.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e"/> <link rel="alternate" hreflang="de" href="https://www.dokuwiki.org/de:devel:plugins"/> <link rel="alternate" hreflang="fr" href="https://www.dokuwiki.org/fr:devel:plugins"/> <link rel="alternate" hreflang="ja" href="https://www.dokuwiki.org/ja:devel:plugins"/> <link rel="alternate" hreflang="ko" href="https://www.dokuwiki.org/ko:devel:plugins"/> <link rel="alternate" hreflang="ru" href="https://www.dokuwiki.org/ru:devel:plugins"/> <link rel="alternate" hreflang="zh" href="https://www.dokuwiki.org/zh:devel:plugins"/> <link rel="alternate" hreflang="zh-tw" href="https://www.dokuwiki.org/zh-tw:devel:plugins"/> <link rel="alternate" hreflang="x-default" href="https://www.dokuwiki.org/devel:plugins"/> <script >var NS='devel';var JSINFO = {"plugins":{"edittable":{"default columnwidth":""}},"id":"devel:plugins","namespace":"devel","ACT":"show","useHeadingNavigation":0,"useHeadingContent":0};(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" defer="defer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" defer="defer"></script> <script src="/lib/exe/js.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e&lang=en" defer="defer"></script> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="shortcut icon" href="/lib/tpl/dokuwiki/images/favicon.ico" /> <link rel="apple-touch-icon" href="/lib/tpl/dokuwiki/images/apple-touch-icon.png" /> <meta name="verify-v1" content="OVxl3gsCv2MhZqh1cBQyl0JytWXSwXMjyvwc+4w3WtA=" /> <meta name="google-site-verification" content="YhTVK69hW94ZXUtc2zSLPxTkZKbZIn0zK67mz5WQB-E" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-83791-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-83791-1', { 'anonymize_ip': true }); </script> </head> <body> <div id="dokuwiki__site"><div id="dokuwiki__top" class="site dokuwiki mode_show tpl_dokuwiki showSidebar hasSidebar"> <!-- ********** HEADER ********** --> <header id="dokuwiki__header"><div class="pad group"> <div class="headings group"> <ul class="a11y skip"> <li><a href="#dokuwiki__content">skip to content</a></li> </ul> <h1 class="logo"><a href="/start" accesskey="h" title="Home [h]"><img src="/lib/tpl/dokuwiki/images/logo.png" width="64" height="64" alt="" /><span>DokuWiki</span></a></h1> <p class="claim">It's better when it's simple</p> </div> <div class="tools group"> <!-- USER TOOLS --> <div id="dokuwiki__usertools"> <h3 class="a11y">User Tools</h3> <ul> <li class="action login"><a href="/devel:plugins?do=login&sectok=" title="Log In" rel="nofollow"><span>Log In</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg></a></li> </ul> </div> <!-- SITE TOOLS --> <div id="dokuwiki__sitetools"> <h3 class="a11y">Site Tools</h3> <form action="/start" method="get" role="search" class="search doku_form" id="dw__search" accept-charset="utf-8"><input type="hidden" name="do" value="search" /><input type="hidden" name="id" value="devel:plugins" /><div class="no"><input name="q" type="text" class="edit" title="[F]" accesskey="f" placeholder="Search" autocomplete="on" id="qsearch__in" value="" /><button value="1" type="submit" title="Search">Search</button><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form> <div class="mobileTools"> <form action="/doku.php" method="get" accept-charset="utf-8"><div class="no"><input type="hidden" name="id" value="devel:plugins" /><select name="do" class="edit quickselect" title="Tools"><option value="">Tools</option><optgroup label="Page Tools"><option value="edit">Edit this page</option><option value="revisions">Old revisions</option><option value="backlink">Backlinks</option></optgroup><optgroup label="Site Tools"><option value="recent">Recent Changes</option><option value="media">Media Manager</option><option value="index">Sitemap</option></optgroup><optgroup label="User Tools"><option value="login">Log In</option></optgroup></select><button type="submit">></button></div></form> </div> <ul> <li class="action recent"><a href="/devel:plugins?do=recent" title="Recent Changes [r]" rel="nofollow" accesskey="r">Recent Changes</a></li><li class="action media"><a href="/devel:plugins?do=media&ns=devel" title="Media Manager" rel="nofollow">Media Manager</a></li><li class="action index"><a href="/devel:plugins?do=index" title="Sitemap [x]" rel="nofollow" accesskey="x">Sitemap</a></li> </ul> </div> </div> <!-- BREADCRUMBS --> <div class="breadcrumbs"> <div class="trace"><span class="bchead">Trace:</span> <span class="bcsep">•</span> <span class="curid"><bdi><a href="/devel:plugins" class="breadcrumbs" title="devel:plugins">plugins</a></bdi></span></div> </div> <hr class="a11y" /> </div></header><!-- /header --> <div class="wrapper group"> <!-- ********** ASIDE ********** --> <nav id="dokuwiki__aside" aria-label="Sidebar"><div class="pad aside include group"> <h3 class="toggle">Sidebar</h3> <div class="content"><div class="group"> <div class="plugin_translation is-dropdown"><span class="title">Translations of this page<sup><a href="/localization" class="wikilink1" title="localization" data-wiki-id="localization">?</a></sup>: </span><ul><li class="span"><span class="wikilink1" title="English">English (en)</span></li><li class="a"><a class="wikilink2" title="|العربية" href="/ar:devel:plugins">|العربية (ar)</a></li><li class="a"><a class="wikilink2" title="Català" href="/ca:devel:plugins">Català (ca)</a></li><li class="a"><a class="wikilink2" title="Česky" href="/cs:devel:plugins">Česky (cs)</a></li><li class="a"><a class="wikilink2" title="Dansk" href="/da:devel:plugins">Dansk (da)</a></li><li class="a"><a class="wikilink1" title="Deutsch" href="/de:devel:plugins">Deutsch (de)</a></li><li class="a"><a class="wikilink2" title="Ελληνικά" href="/el:devel:plugins">Ελληνικά (el)</a></li><li class="a"><a class="wikilink2" title="Esperanto" href="/eo:devel:plugins">Esperanto (eo)</a></li><li class="a"><a class="wikilink2" title="Español" href="/es:devel:plugins">Español (es)</a></li><li class="a"><a class="wikilink2" title="فارسی" href="/fa:devel:plugins">فارسی (fa)</a></li><li class="a"><a class="wikilink1" title="Français" href="/fr:devel:plugins">Français (fr)</a></li><li class="a"><a class="wikilink2" title="עברית" href="/he:devel:plugins">עברית (he)</a></li><li class="a"><a class="wikilink2" title="Magyar" href="/hu:devel:plugins">Magyar (hu)</a></li><li class="a"><a class="wikilink2" title="Italiano" href="/it:devel:plugins">Italiano (it)</a></li><li class="a"><a class="wikilink1" title="日本語" href="/ja:devel:plugins">日本語 (ja)</a></li><li class="a"><a class="wikilink1" title="한국어" href="/ko:devel:plugins">한국어 (ko)</a></li><li class="a"><a class="wikilink2" title="Lietuvių Kalba" href="/lt:devel:plugins">Lietuvių Kalba (lt)</a></li><li class="a"><a class="wikilink2" title="Nederlands" href="/nl:devel:plugins">Nederlands (nl)</a></li><li class="a"><a class="wikilink2" title="Norsk" href="/no:devel:plugins">Norsk (no)</a></li><li class="a"><a class="wikilink2" title="Polski" href="/pl:devel:plugins">Polski (pl)</a></li><li class="a"><a class="wikilink2" title="Português" href="/pt-br:devel:plugins">Português (pt-br)</a></li><li class="a"><a class="wikilink2" title="Română" href="/ro:devel:plugins">Română (ro)</a></li><li class="a"><a class="wikilink1" title="Русский" href="/ru:devel:plugins">Русский (ru)</a></li><li class="a"><a class="wikilink2" title="Српски Језик" href="/sr:devel:plugins">Српски Језик (sr)</a></li><li class="a"><a class="wikilink2" title="Svenska" href="/sv:devel:plugins">Svenska (sv)</a></li><li class="a"><a class="wikilink2" title="ไทย" href="/th:devel:plugins">ไทย (th)</a></li><li class="a"><a class="wikilink2" title="Українська" href="/uk:devel:plugins">Українська (uk)</a></li><li class="a"><a class="wikilink1" title="中文" href="/zh:devel:plugins">中文 (zh)</a></li><li class="a"><a class="wikilink1" title="繁體中文" href="/zh-tw:devel:plugins">繁體中文 (zh-tw)</a></li></ul></div> <p> <strong>Learn about DokuWiki</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/features" class="wikilink1" title="features" data-wiki-id="features">Features</a> & <a href="/blogroll" class="wikilink1" title="blogroll" data-wiki-id="blogroll">reviews</a> </div> </li> <li class="level1"><div class="li"> <a href="/install" class="wikilink1" title="install" data-wiki-id="install">Installation guide</a></div> </li> <li class="level1"><div class="li"> <a href="/manual" class="wikilink1" title="manual" data-wiki-id="manual">User manual</a> & <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a></div> </li> <li class="level1"><div class="li"> <a href="/changes" class="wikilink1" title="changes" data-wiki-id="changes">Release notes</a></div> </li> <li class="level1"><div class="li"> <a href="/faq" class="wikilink1" title="faq" data-wiki-id="faq">FAQ</a></div> </li> </ul> <p> <strong>Advanced Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/extensions" class="wikilink1" title="extensions" data-wiki-id="extensions">Extensions</a></div> </li> <li class="level1"><div class="li"> <a href="/development" class="wikilink1" title="development" data-wiki-id="development">Development manual</a></div> </li> </ul> <p> <strong>Corporate Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/faq:support" class="wikilink1" title="faq:support" data-wiki-id="faq:support">Get support</a></div> </li> <li class="level1"><div class="li"> <a href="/donate" class="wikilink1" title="donate" data-wiki-id="donate">Donations</a></div> </li> </ul> <p> <strong>Our Community</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/teams:getting_involved" class="wikilink1" title="teams:getting_involved" data-wiki-id="teams:getting_involved">Get involved</a></div> </li> <li class="level1"><div class="li"> <a href="/dokuinstall" class="wikilink1" title="dokuinstall" data-wiki-id="dokuinstall">Users</a></div> </li> <li class="level1"><div class="li"> <a href="http://forum.dokuwiki.org" class="urlextern" title="http://forum.dokuwiki.org">User forum</a></div> </li> <li class="level1"><div class="li"> <a href="/mailinglist" class="wikilink1" title="mailinglist" data-wiki-id="mailinglist">Development mailinglist</a></div> </li> </ul> <hr /> <p> Follow us on <a href="https://phpc.social/@dokuwiki" class="urlextern" title="https://phpc.social/@dokuwiki">Mastodon</a> and other <a href="/social" class="wikilink1" title="social" data-wiki-id="social">social networks</a>. </p> <p> <a href="/privacy" class="wikilink1" title="privacy" data-wiki-id="privacy">Our Privacy Policy</a> </p> </div></div> </div></nav><!-- /aside --> <!-- ********** CONTENT ********** --> <main id="dokuwiki__content"><div class="pad group"> <div class="pageId"><span>devel:plugins</span></div> <div class="page group"> <!-- wikipage start --> <!-- TOC START --> <div id="dw__toc" class="dw__toc"> <h3 class="toggle">Table of Contents</h3> <div> <ul class="toc"> <li class="level1"><div class="li"><a href="#plugin_development">Plugin Development</a></div> <ul class="toc"> <li class="level2"><div class="li"><a href="#plugin_types">Plugin Types</a></div></li> <li class="level2"><div class="li"><a href="#sources">Sources</a></div></li> <li class="level2"><div class="li"><a href="#plugin_name">Plugin Name</a></div></li> <li class="level2"><div class="li"><a href="#plugin_wizard">Plugin Wizard</a></div></li> <li class="level2"><div class="li"><a href="#publishing_a_plugin_on_dokuwikiorg">Publishing a Plugin on dokuwiki.org</a></div></li> <li class="level2"><div class="li"><a href="#inspirations">Inspirations</a></div> <ul class="toc"> <li class="level3"><div class="li"><a href="#existing_plugins">Existing Plugins</a></div></li> <li class="level3"><div class="li"><a href="#event_list">Event List</a></div></li> </ul></li> </ul></li> </ul> </div> </div> <!-- TOC END --> <h1 class="sectionedit1" id="plugin_development">Plugin Development</h1> <div class="level1"> <p> It is very easy to write a DokuWiki plugin. Before writing your own, remember to search for similar plugins among <a href="/plugins" class="wikilink1" title="plugins" data-wiki-id="plugins">plugins already written</a> and read through <a href="/devel:security" class="wikilink1" title="devel:security" data-wiki-id="devel:security">security guidelines for plugin authors</a>. </p> <p> DokuWiki has a flexible plugin <abbr title="Application Programming Interface">API</abbr> which allows developers to extend its functionality, be it additional <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a> modes, custom <a href="/devel:action_modes" class="wikilink1" title="devel:action_modes" data-wiki-id="devel:action_modes">action modes</a>, new <a href="/export" class="wikilink1" title="export" data-wiki-id="export">export</a> formats, and a lot more. Depending on the plugin's purpose, a plugin can either consist of one, or more, components of the following plugin types. </p> </div> <div class="secedit editbutton_section editbutton_1"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Plugin Development] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="plugin_development" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="1-581" /><button type="submit" title="Plugin Development">Edit</button></div></form></div> <h2 class="sectionedit2" id="plugin_types">Plugin Types</h2> <div class="level2"> <p> At the moment DokuWiki features seven different plugin types. </p> <ul> <li class="level1"><div class="li"> <a href="/devel:syntax_plugins" class="wikilink1" title="devel:syntax_plugins" data-wiki-id="devel:syntax_plugins">Syntax Plugins</a> extend DokuWiki's basic <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a>.</div> </li> <li class="level1"><div class="li"> <a href="/devel:action_plugins" class="wikilink1" title="devel:action_plugins" data-wiki-id="devel:action_plugins">Action Plugins</a> can be used to extend or replace many aspects of DokuWiki's core operations, from saving wikipages to adding new <a href="/devel:action_modes" class="wikilink1" title="devel:action_modes" data-wiki-id="devel:action_modes">action modes</a>.</div> </li> <li class="level1"><div class="li"> <a href="/devel:admin_plugins" class="wikilink1" title="devel:admin_plugins" data-wiki-id="devel:admin_plugins">Admin Plugins</a> can provide administration functionality for DokuWiki - these plugins are accessible to superusers and managers via the Admin button.</div> </li> <li class="level1"><div class="li"> <a href="/devel:helper_plugins" class="wikilink1" title="devel:helper_plugins" data-wiki-id="devel:helper_plugins">Helper Plugins</a> can be used to provide functionality to many other plugins, so each plugin doesn't have to re-implement a certain function over and over again.</div> </li> <li class="level1"><div class="li"> <a href="/devel:renderer_plugins" class="wikilink1" title="devel:renderer_plugins" data-wiki-id="devel:renderer_plugins">Renderer Plugins</a> allow to create new <a href="/export" class="wikilink1" title="export" data-wiki-id="export">export</a> modes and to replace the standard DokuWiki XHTML renderer.</div> </li> <li class="level1"><div class="li"> <a href="/devel:remote_plugins" class="wikilink1" title="devel:remote_plugins" data-wiki-id="devel:remote_plugins">Remote Plugins</a> allow to add webservices to your plugin.</div> </li> <li class="level1"><div class="li"> <a href="/devel:auth_plugins" class="wikilink1" title="devel:auth_plugins" data-wiki-id="devel:auth_plugins">Auth Plugins</a> add additional authentication backend to the DokuWiki, which could be activated via configuration manager.</div> </li> <li class="level1"><div class="li"> <a href="/devel:cli_plugins" class="wikilink1" title="devel:cli_plugins" data-wiki-id="devel:cli_plugins">CLI Plugins</a> add command line tools to your plugin</div> </li> </ul> <p> Plugin types are not mutually exclusive, i.e. a plugin can also be assigned to several plugin types. </p> <p> Examples: A simple plugin like <a href="/plugin:color" class="wikilink1" title="plugin:color" data-wiki-id="plugin:color">color plugin</a> may only consist of a single file, <code>syntax.php</code>. More advanced plugins consist of several components, for example the <a href="/plugin:data" class="wikilink1" title="plugin:data" data-wiki-id="plugin:data">structured data plugin</a> have the syntax handling split in “data entry” and “table view” components, an action component for the special edit button attached to every data entry and an admin interface for database maintenance. </p> </div> <div class="secedit editbutton_section editbutton_2"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Plugin Types] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="plugin_types" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="582-2106" /><button type="submit" title="Plugin Types">Edit</button></div></form></div> <h2 class="sectionedit3" id="sources">Sources</h2> <div class="level2"> <p> There are a number of sources especially for plugin development: </p> <ul> <li class="level1"><div class="li"> The <a href="/devel:plugin_file_structure" class="wikilink1" title="devel:plugin_file_structure" data-wiki-id="devel:plugin_file_structure">plugin file structure</a> gives overview of the naming convention and structure, and where you add <a href="/devel:javascript" class="wikilink1" title="devel:javascript" data-wiki-id="devel:javascript">JavaScript</a> and <a href="/devel:css" class="wikilink1" title="devel:css" data-wiki-id="devel:css">CSS stylesheets</a>, relevant for all plugin types</div> </li> <li class="level1"><div class="li"> There are some <a href="/devel:common_plugin_functions" class="wikilink1" title="devel:common_plugin_functions" data-wiki-id="devel:common_plugin_functions">common plugin functions</a>, available in all plugins types. Adds localisation, configuration and interspection.</div> </li> <li class="level1"><div class="li"> These <a href="/devel:security" class="wikilink1" title="devel:security" data-wiki-id="devel:security">security guidelines</a> give some deeper understanding of common issues and presents some protection measures.</div> </li> <li class="level1"><div class="li"> Some general <a href="/devel:plugin_programming_tips" class="wikilink1" title="devel:plugin_programming_tips" data-wiki-id="devel:plugin_programming_tips">plugin programming tips</a> are available, mostly good practices and pointers to handsome tools in DokuWiki.</div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_3"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Sources] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="sources" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2107-2789" /><button type="submit" title="Sources">Edit</button></div></form></div> <h2 class="sectionedit4" id="plugin_name">Plugin Name</h2> <div class="level2"> <p> A valid plugin name: </p> <ul> <li class="level1"><div class="li"> Should only contain the characters a-z and 0-9. </div> </li> <li class="level1 node"><div class="li"> Underscore is NOT allowed as:</div> <ul> <li class="level2"><div class="li"> This is used to separate <code><plugin name></code> from <code><component name></code>. </div> </li> <li class="level2"><div class="li"> Using underscore will also give a <a href="/popularity" class="wikilink1" title="popularity" data-wiki-id="popularity">popularity</a> rating of zero. </div> </li> </ul> </li> <li class="level1 node"><div class="li"> If the same name is used by two different plugins</div> <ul> <li class="level2"><div class="li"> they are mutually excluding and inherently incompatible, </div> </li> <li class="level2"><div class="li"> furthermore only one of them can have a plugin homepage on dokuwiki.org.</div> </li> </ul> </li> </ul> </div> <div class="secedit editbutton_section editbutton_4"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Plugin Name] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="plugin_name" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2790-3281" /><button type="submit" title="Plugin Name">Edit</button></div></form></div> <h2 class="sectionedit5" id="plugin_wizard">Plugin Wizard</h2> <div class="level2"> <p> A Wizard to create the basic skeleton for a DokuWiki plugin can be found at <a href="http://pluginwizard.dokuwiki.org/" class="urlextern" title="http://pluginwizard.dokuwiki.org/">http://pluginwizard.dokuwiki.org/</a> and is recommended to be used for starting the development. Alternatively use the command line <a href="/plugin:dev" class="wikilink1" title="plugin:dev" data-wiki-id="plugin:dev">dev Plugin</a>. </p> <p> If you later need to extend your plugin refer to the <a href="/devel:plugin_file_structure" class="wikilink1" title="devel:plugin_file_structure" data-wiki-id="devel:plugin_file_structure">plugin file structure</a> on how files are arranged in a plugin. </p> </div> <div class="secedit editbutton_section editbutton_5"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Plugin Wizard] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="plugin_wizard" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="3282-3682" /><button type="submit" title="Plugin Wizard">Edit</button></div></form></div> <h2 class="sectionedit6" id="publishing_a_plugin_on_dokuwikiorg">Publishing a Plugin on dokuwiki.org</h2> <div class="level2"> <p> If you created a plugin, please share it with the community. Just create a page named after your plugin in the plugin namespace. E.g. if your pluginfolder is named <code>sample</code> create a page <code>plugin:sample</code> here in the wiki. </p> <p> The page should contain all needed documentation on how to install and use the plugin and give users a pretty good idea what it does before installing the plugin. Adding screenshots might be a good idea as well. When creating the new page, a namespace template will prefill sections and tips for you. </p> <p> At the top of the plugin page a few metadata fields have to be filled. A description of each field can be found on <a href="/plugin:repository" class="wikilink1" title="plugin:repository" data-wiki-id="plugin:repository">Repository Plugin</a> page. </p> <p> Users will see that an update is available in the extension manager. For this to work properly it is necessary that the date “Last updated on” at the Plugin wiki page equals the date in the file <a href="/devel:plugin_info" class="wikilink1" title="devel:plugin_info" data-wiki-id="devel:plugin_info">plugin.info.txt</a> in the source tarball/zipfile. If this is not the case, available updates will not be shown or the “Update” signal will persist despite the plugin being up-to-date! </p> <p> Uploads are not allowed on dokuwiki.org, so you need to host your plugin files somewhere else. We recommend to manage your source with a Revision Control System like <a href="/devel:git" class="wikilink1" title="devel:git" data-wiki-id="devel:git">git</a>. If you do, it's easiest to use a public repository host like <a href="https://github.com/" class="urlextern" title="https://github.com/">GitHub</a>, <a href="https://gitlab.com/" class="urlextern" title="https://gitlab.com/">GitLab</a> or <a href="https://bitbucket.org/" class="urlextern" title="https://bitbucket.org/">Bitbucket</a> which offers also a bug tracker for your repository. </p> <p> Plugin developers can check the <a href="/devel:badextensions" class="wikilink1" title="devel:badextensions" data-wiki-id="devel:badextensions">bad extension page</a> for differences in their github repository checkin, the <a href="/devel:plugin_info" class="wikilink1" title="devel:plugin_info" data-wiki-id="devel:plugin_info">plugin.info.txt</a> and the respective page at dokuwiki.org. </p> </div> <div class="secedit editbutton_section editbutton_6"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Publishing a Plugin on dokuwiki.org] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="publishing_a_plugin_on_dokuwikiorg" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="3683-5433" /><button type="submit" title="Publishing a Plugin on dokuwiki.org">Edit</button></div></form></div> <h2 class="sectionedit7" id="inspirations">Inspirations</h2> <div class="level2"> </div> <div class="secedit editbutton_section editbutton_7"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Inspirations] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="inspirations" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="5434-5459" /><button type="submit" title="Inspirations">Edit</button></div></form></div> <h3 class="sectionedit8" id="existing_plugins">Existing Plugins</h3> <div class="level3"> <p> Already more than 1400 plugins are written for DokuWiki. To learn how things are working, you might study some <a href="/plugins" class="wikilink1" title="plugins" data-wiki-id="plugins">existing plugins</a> that have some similarity with your ideas. At <a href="https://codesearch.dokuwiki.org/" class="urlextern" title="https://codesearch.dokuwiki.org/">codesearch.dokuwiki.org</a> you can find <a href="https://codesearch.dokuwiki.org/xref/plugin/" class="urlextern" title="https://codesearch.dokuwiki.org/xref/plugin/">all them</a> in a browsable format. </p> </div> <div class="secedit editbutton_section editbutton_8"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Existing Plugins] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="existing_plugins" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="5460-5834" /><button type="submit" title="Existing Plugins">Edit</button></div></form></div> <h3 class="sectionedit9" id="event_list">Event List</h3> <div class="level3"> <p> Another way is to search the <a href="/devel:events_list" class="wikilink1" title="devel:events_list" data-wiki-id="devel:events_list">event list</a> for a suitable event that may be used to implement the desired plugin function. The plugins that use this event can then be found using the code search mentioned above. </p> <p> At the bottom of each event page, where the details of the event are listed, there is a link to a pre-filled code search. It provides specific examples of the function and application of the respective event. </p> </div> <div class="secedit editbutton_section editbutton_9"><form class="button btn_secedit" method="post" action="/devel:plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1725625367" /><input type="hidden" name="summary" value="[Event List] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="event_list" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="5835-" /><button type="submit" title="Event List">Edit</button></div></form></div> <!-- wikipage stop --> </div> <div class="docInfo"><bdi>devel/plugins.txt</bdi> · Last modified: <time datetime="2024-09-06T14:22:47+0200">2024-09-06 14:22</time> by <bdi>michaelsy</bdi></div> <hr class="a11y" /> </div></main><!-- /content --> <!-- PAGE ACTIONS --> <nav id="dokuwiki__pagetools" aria-labelledby="dokuwiki__pagetools__heading"> <h3 class="a11y" id="dokuwiki__pagetools__heading">Page Tools</h3> <div class="tools"> <ul> <li class="edit"><a href="/devel:plugins?do=edit" title="Edit this page [e]" rel="nofollow" accesskey="e"><span>Edit this page</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg></a></li><li class="revs"><a href="/devel:plugins?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o"><span>Old revisions</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg></a></li><li class="backlink"><a href="/devel:plugins?do=backlink" title="Backlinks" rel="nofollow"><span>Backlinks</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg></a></li><li class="top"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t"><span>Back to top</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg></a></li> </ul> </div> </nav> </div><!-- /wrapper --> <!-- ********** FOOTER ********** --> <footer id="dokuwiki__footer"><div class="pad"> <div class="license">Except where otherwise noted, content on this wiki is licensed under the following license: <bdi><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license" class="urlextern">CC Attribution-Share Alike 4.0 International</a></bdi></div> <div class="buttons"> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license"><img src="/lib/images/license/button/cc-by-sa.png" alt="CC Attribution-Share Alike 4.0 International" /></a> <a href="https://www.dokuwiki.org/donate" title="Donate" ><img src="/lib/tpl/dokuwiki/images/button-donate.gif" width="80" height="15" alt="Donate" /></a> <a href="https://php.net" title="Powered by PHP" ><img src="/lib/tpl/dokuwiki/images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a> <a href="//validator.w3.org/check/referer" title="Valid HTML5" ><img src="/lib/tpl/dokuwiki/images/button-html5.png" width="80" height="15" alt="Valid HTML5" /></a> <a href="//jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS" ><img src="/lib/tpl/dokuwiki/images/button-css.png" width="80" height="15" alt="Valid CSS" /></a> <a href="https://dokuwiki.org/" title="Driven by DokuWiki" ><img src="/lib/tpl/dokuwiki/images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a> </div> <div style="margin-top: 2em; font-size:90%" class="dokuwiki"><div style="float:right"><a href="http://www.splitbrain.org/personal#imprint" style="float:right; text-decoration: none; color:#333">Imprint</a></div></div><!-- Include for DokuWiki site wide top bar --> <style type="text/css"> @media screen { body { padding-top: 30px; } #global__header { position: absolute; top: 0; left: 0; text-align: left; vertical-align: middle; line-height: 1.5; background-color: #333; box-shadow: 0 0 8px rgba(0,0,0,0.5); width: 100%; margin: 0; padding: 5px 20px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; white-space: nowrap; overflow: hidden; } #global__header h2 { position: absolute; left: -99999em; top: 0; overflow: hidden; display: inline; } #global__header ul, #global__header li { margin: 0; padding: 0; list-style: none; display: inline; line-height: 1.5; } #global__header a { color: #bbb; text-decoration: none; margin-right: 20px; font-size: 14px; font-weight: normal; } #global__header a:hover, #global__header a:active, #global__header a:focus { color: #fff; text-decoration: underline; } #global__header form { float: right; margin: 0 0 0 20px; } #global__header input { background-color: #333; background-image: none; border: 1px solid #bbb; color: #fff; box-shadow: none; border-radius: 2px; margin: 0; line-height: normal; padding: 1px 0 1px 0; height: auto; } #global__header input.button { border: none; color: #bbb; } #global__header input.button:hover, #global__header input.button:active, #global__header input.button:focus { color: #fff; text-decoration: underline; } } /* /@media */ @media only screen and (min-width: 601px) { /* changes specific for www.dokuwiki.org */ #dokuwiki__header { padding-top: 3em; } #dokuwiki__usertools { top: 3em; } /* changes specific for bugs.dokuwiki.org */ div#container div#showtask { top: 40px; } } /* /@media */ @media only screen and (max-width: 600px) { body { padding-top: 0; } #global__header { position: static; white-space: normal; overflow: auto; } #global__header form { float: none; display: block; margin: 0 0 .4em; } } /* /@media */ @media print { #global__header { display: none; } } /* /@media */ </style> <div id="global__header"> <h2>Global DokuWiki Links</h2> <form method="get" action="https://search.dokuwiki.org/" target="_top"> <input type="text" name="q" title="Search all DokuWiki sites at once" class="input" /> <input type="submit" title="Search all DokuWiki sites at once" value="Search" class="button" /> </form> <ul> <li><a href="https://download.dokuwiki.org" title="Download the latest release" target="_top">Download</a></li> <li><a href="https://www.dokuwiki.org" title="Read the DokuWiki documentation" target="_top">Wiki</a></li> <li><a href="https://forum.dokuwiki.org" title="Ask questions in the DokuWiki forum" target="_top">Forum</a></li> <li><a href="https://irc.dokuwiki.org" title="Check IRC chat logs or join the chat" target="_top">IRC</a></li> <li><a href="https://github.com/splitbrain/dokuwiki/issues" title="Report and track bugs" target="_top">Bugs</a></li> <li><a href="https://translate.dokuwiki.org/" title="Help translating the DokuWiki interface" target="_top">Translate</a></li> <li><a href="https://github.com/splitbrain/dokuwiki" title="Access the most recent git commits" target="_top">Git</a></li> <li><a href="https://xref.dokuwiki.org/reference/dokuwiki/" title="Cross-Reference of the DokuWiki source code" target="_top">XRef</a></li> <li><a href="https://codesearch.dokuwiki.org/" title="Search through the sources of DokuWiki, plugins and templates" target="_top">Code Search</a></li> </ul> </div> <!-- end of DokuWiki top bar include --> </div></footer><!-- /footer --> </div></div><!-- /site --> <div class="no"><img src="/lib/exe/taskrunner.php?id=devel%3Aplugins&1742885082" width="2" height="1" alt="" /></div> <div id="screen__mode" class="no"></div></body> </html>