# Plugin system RFC
MycorrhizaWiki engine does not provide all the functionality a wiki may need and not need. Instead, it relies on the system of plugins.

This document is up-to-date.

## Types of plugins
- **Parser.** They add support for displaying different MIME-types.
- **Language.** They provide i18n support.

## Default plugins
Default MycorrhizaWiki distributive is shipped with several plugins installed.

- **parser/markdown.** Support for `text/markdown`. This parser is powered by [russross/blackfriday](https://github.com/russross/blackfriday); this parser is ok, I guess.
- **parser/creole.** Support for `text/creole`. *Note:* there is no standard Creole MIME type. This parser is powered by [m4tty/cajun](https://github.com/m4tty/cajun); this library is somewhat outdated. Perhaps we'll reimplement it.
- **parser/gemini.** Support for `text/gemini`. 
- **lang/en.** Support for English language.

## Plugin implementation
All plugins are written in Go and are compiled together with MycorrhizaWiki. If a wiki's admin decides to add a plugin, they shall recompile the engine with the plugin.

> Reminds of [something](http://suckless.org/), right?

*But compiling the engine just to add a plugin is stupid!!* Not really. Also, it makes the architecture more simple and secure.

*What if an admin doesn't know how to program?* Plugin installation is basically limited to putting some files into a folder, editing the config and running a shell command. No programming required to install a plugin.

See `plugin` directory at the root of the repo to get inspired by the present parsers.
