Skip to main content

Plugin types

Moodle is a powerful, and very extensible, Learning Management System. One of its core tenets is its extensibility, and this is primarily achieved through the development of plugins.

A wider range of plugin types are available and these should be selected depending on your needs.

Things you can find in all plugins

Although there are many different types of plugin, there are some things that work the same way in all plugin types. Please see the Plugin files documentation that describes common files which are found in many plugin types.

Naming conventions

Plugins typically have at least two names:

  • The friendly name, shown to users, and
  • A machine name used internally.

The machine name must meet the following rules:

  • It must start with a lowercase latin letter
  • It may contain only lowercase latin letters, numbers, and underscores
  • It must end with a lowercase latin letter, or a number
  • The hyphen, and minus character - are not allowed

If a plugin does not meet these requirements then it will be silently ignored.


Plugin name validation takes place in core_component::is_valid_plugin_name() and the following regular expression is used:

Activity module exception

The underscore character is not supported in activity modules for legacy reasons.

Plugin typeComponent name (Frankenstyle)Moodle pathDescriptionMoodle versions
Activity modulesmod/modActivity modules are essential types of plugins in Moodle as they provide activities in courses. For example: Forum, Quiz and Assignment.1.0+
Antivirus pluginsantivirus/lib/antivirusAntivirus scanner plugins provide functionality for virus scanning user uploaded files using third-party virus scanning tools in Moodle. For example: ClamAV.3.1+
Assignment submission pluginsassignsubmission/mod/assign/submissionDifferent forms of assignment submissions2.3+
Assignment feedback pluginsassignfeedback/mod/assign/feedbackDifferent forms of assignment feedbacks2.3+
Book toolsbooktool/mod/book/toolSmall information-displays or tools that can be moved around pages2.1+
Course Custom fieldscustomfield/customfield/fieldCustom field types, used in Custom course fields3.7+
Database fieldsdatafield/mod/data/fieldDifferent types of data that may be added to the Database activity module1.6+
Database presetsdatapreset/mod/data/presetPre-defined templates for the Database activity module1.6+
LTI sourcesltisource/mod/lti/sourceLTI providers can be added to external tools easily through the external tools interface see Documentation on External Tools. This type of plugin is specific to LTI providers that need a plugin that can register custom handlers to process LTI messages2.7+
File Convertersfileconverter/files/converterAllow conversion between different types of user-submitted file. For example from .doc to PDF.3.2+
LTI servicesltiservice/mod/lti/serviceAllows the implementation of LTI services as described by the IMS LTI specification2.8+
Machine learning backendsmlbackend/lib/mlbackendPrediction processors for analytics API3.4+
Forum reportsforumreport/mod/forum/reportDisplay various reports in the forum activity3.8+
Quiz reportsquiz/mod/quiz/reportDisplay and analyse the results of quizzes, or just plug miscellaneous behaviour into the quiz module1.1+
Quiz access rulesquizaccess/mod/quiz/accessruleAdd conditions to when or where quizzes can be attempted, for example only from some IP addresses, or student must enter a password first2.2+
SCORM reportsscormreport/mod/scorm/reportAnalysis of SCORM attempts2.2+
Workshop grading strategiesworkshopform/mod/workshop/formDefine the type of the grading form and implement the calculation of the grade for submission in the Workshop module2.0+
Workshop allocation methodsworkshopallocation/mod/workshop/allocationDefine ways how submissions are assigned for assessment in the Workshop module2.0+
Workshop evaluation methodsworkshopeval/mod/workshop/evalImplement the calculation of the grade for assessment (grading grade) in the Workshop module2.0+
Blocksblock/blocksSmall information-displays or tools that can be moved around pages2.0+
Question typesqtype/question/typeDifferent types of question (for example multiple-choice, drag-and-drop) that can be used in quizzes and other activities1.6+
Question behavioursqbehaviour/question/behaviourControl how student interact with questions during an attempt2.1+
Question import/export formatsqformat/question/formatImport and export question definitions to/from the question bank1.6+
Text filtersfilter/filterAutomatically convert, highlight, and transmogrify text posted into Moodle.1.4+
Editorseditor/lib/editorAlternative text editors for editing content2.0+
Atto editor pluginsatto/lib/editor/atto/pluginsExtra functionality for the Atto text editor2.7+
TinyMCE editor pluginstinymce/lib/editor/tinymce/pluginsExtra functionality for the TinyMCE text editor.2.4+
Enrolment pluginsenrol/enrolWays to control who is enrolled in courses2.0+
Authentication pluginsauth/authAllows connection to external sources of authentication2.0+
Admin toolstool/admin/toolProvides utility scripts useful for various site administration and maintenance tasks2.2+
Log storeslogstore/admin/tool/log/storeEvent logs storage back-ends2.7+
Availability conditionsavailability/availability/conditionConditions to restrict user access to activities and sections.2.7+
Calendar typescalendartype/calendar/typeDefines how dates are displayed throughout Moodle2.6+
Messaging consumersmessage/message/outputRepresent various targets where messages and notifications can be sent to (email, sms, jabber, ...)2.0+
Course formatsformat/course/formatDifferent ways of laying out the activities and blocks in a course1.3+
Data formatsdataformat/dataformatFormats for data exporting and downloading3.1+
User profile fieldsprofilefield/user/profile/fieldAdd new types of data to user profiles1.9+
Reportsreport/reportProvides useful views of data in a Moodle site for admins and teachers2.2+
Course reportscoursereport/course/reportReports of activity within the courseUp to 2.1 (for 2.2+ see Reports)
Gradebook exportgradeexport/grade/exportExport grades in various formats1.9+
Gradebook importgradeimport/grade/importImport grades in various formats1.9+
Gradebook reportsgradereport/grade/reportDisplay/edit grades in various layouts and reports1.9+
Advanced grading methodsgradingform/grade/grading/formInterfaces for actually performing grading in activity modules (for example Rubrics)2.2+
MNet servicesmnetservice/mnet/serviceAllows to implement remote services for the MNet environment (deprecated, use web services instead)2.0+
Webservice protocolswebservice/webserviceDefine new protocols for web service communication (such as SOAP, XML-RPC, JSON, REST ...)2.0+
Repository pluginsrepository/repositoryConnect to external sources of files to use in Moodle2.0+
Portfolio pluginsportfolio/portfolioConnect external portfolio services as destinations for users to store Moodle content1.9+
Search enginessearch/search/engineSearch engine backends to index Moodle's contents.3.1+
Media playersmedia/media/playerPluggable media players3.2+
Plagiarism pluginsplagiarism/plagiarismDefine external services to process submitted files and content2.0+
Cache storecachestore/cache/storesCache storage back-ends.2.4+
Cache lockscachelock/cache/locksCache lock implementations.2.4+
Themestheme/themeChange the look of Moodle by changing the the HTML and the CSS.2.0+
Local pluginslocal/localGeneric plugins for local customisations2.0+
Content bank content typescontenttype/contentbank/contenttypeContent types to upload, create or edit in the content bank and use all over the Moodle site3.9+
H5P librariesh5plib/h5p/h5plibPlugin type for the particular versions of the H5P integration library.3.9+
Question bank pluginsqbank/question/bankPlugin type for extending question bank functionality.4.0+
Obtaining the list of plugin types known to your Moodle

You can get an exact list of valid plugin types for your Moodle version using the following example:

define('CLI_SCRIPT', true);

$pluginman = core_plugin_manager::instance();

foreach ($pluginman->get_plugin_types() as $type => $dir) {
$dir = substr($dir, strlen($CFG->dirroot));
"%-20s %-50s %s" . PHP_EOL,

See also