# Installing contributed modules or plugins

<div class="mw-content-ltr mw-parser-output" dir="ltr" id="bkmrk-installation-install" lang="en"><div class="sideblock right" style="width: 16em;"><div class="header">[Installation](/503/en/Installation "Installation")</div><div class="content">

- [Installing Moodle](/503/en/Installing_Moodle "Installing Moodle")
- [Installation quick guide](/503/en/Installation_quick_guide "Installation quick guide")
- [Cron](/503/en/Cron "Cron")
- [Nginx](/503/en/Nginx "Nginx")
- [Apache](/503/en/Apache "Apache")
- [IIS](/503/en/Internet_Information_Services "Internet Information Services")
- [Routing](/503/en/Configuring_the_Router "Configuring the Router")
- <a class="mw-selflink selflink">Installing plugins</a>
- [Installation FAQ](/503/en/Installation_FAQ "Installation FAQ")
- [Upgrading](/503/en/Upgrading "Upgrading")
- [Upgrade overview](/503/en/Upgrade_overview "Upgrade overview")
- [Automatic updates deployment](/503/en/Automatic_updates_deployment "Automatic updates deployment")
- [Git guide](/503/en/Git_for_Administrators "Git for Administrators")
- [Administration via command line](/503/en/Administration_via_command_line "Administration via command line")
- [Upgrading FAQ](/503/en/Upgrading_FAQ "Upgrading FAQ")
- [Moodle migration](/503/en/Moodle_migration "Moodle migration")

</div></div>

- [<span class="tocnumber">1</span> <span class="toctext">Why install additional plugins?</span>](#bkmrk-why-install-addition-1)
- [<span class="tocnumber">2</span> <span class="toctext">Choosing the best plugins for your site</span>](#bkmrk-choosing-the-best-pl-1)
    - [<span class="tocnumber">2.1</span> <span class="toctext">Plugins for school teaching</span>](#bkmrk-plugins-for-school-t-1)
    - [<span class="tocnumber">2.2</span> <span class="toctext">Plugins for university teaching</span>](#bkmrk-plugins-for-universi-1)
- [<span class="tocnumber">3</span> <span class="toctext">Considerations for production sites (skip if you're just moodling)</span>](#bkmrk-considerations-for-p-1)
- [<span class="tocnumber">4</span> <span class="toctext">Installing a plugin</span>](#bkmrk-installing-a-plugin)
    - [<span class="tocnumber">4.1</span> <span class="toctext">Installing plugins with Composer (Packagist)</span>](#bkmrk-installing-plugins-w-1)
        - [<span class="tocnumber">4.1.1</span> <span class="toctext">Before you start</span>](#bkmrk-before-you-start)
        - [<span class="tocnumber">4.1.2</span> <span class="toctext">Install a plugin</span>](#bkmrk-install-a-plugin)
        - [<span class="tocnumber">4.1.3</span> <span class="toctext">Update a plugin</span>](#bkmrk-update-a-plugin)
        - [<span class="tocnumber">4.1.4</span> <span class="toctext">Remove a plugin</span>](#bkmrk-remove-a-plugin)
        - [<span class="tocnumber">4.1.5</span> <span class="toctext">Good practice for Composer-managed sites</span>](#bkmrk-good-practice-for-co-1)
        - [<span class="tocnumber">4.1.6</span> <span class="toctext">Notes</span>](#bkmrk-notes)
    - [<span class="tocnumber">4.2</span> <span class="toctext">Installing via uploaded ZIP file</span>](#bkmrk-installing-via-uploa-1)
    - [<span class="tocnumber">4.3</span> <span class="toctext">Installing manually at the server</span>](#bkmrk-installing-manually--1)
- [<span class="tocnumber">5</span> <span class="toctext">Troubleshooting</span>](#bkmrk-troubleshooting)
    - [<span class="tocnumber">5.1</span> <span class="toctext">Errors</span>](#bkmrk-errors)
    - [<span class="tocnumber">5.2</span> <span class="toctext">A file permissions error has occurred</span>](#bkmrk-a-file-permissions-e-1)
    - [<span class="tocnumber">5.3</span> <span class="toctext">Default exception handler: Error writing to database Debug: Duplicate entry 'en\_us-...</span>](#bkmrk-default-exception-ha-1)
    - [<span class="tocnumber">5.4</span> <span class="toctext">When installing manually</span>](#bkmrk-when-installing-manu-1)
    - [<span class="tocnumber">5.5</span> <span class="toctext">Obtaining help</span>](#bkmrk-obtaining-help)
- [<span class="tocnumber">6</span> <span class="toctext">Uninstalling a plugin</span>](#bkmrk-uninstalling-a-plugi-1)
- [<span class="tocnumber">7</span> <span class="toctext">Plugins overview</span>](#bkmrk-plugins-overview)
    - [<span class="tocnumber">7.1</span> <span class="toctext">Plugin updating from within Moodle</span>](#bkmrk-plugin-updating-from-1)
- [<span class="tocnumber">8</span> <span class="toctext">Preventing installing plugins from within Moodle</span>](#bkmrk-preventing-installin-1)
- [<span class="tocnumber">9</span> <span class="toctext">See also</span>](#bkmrk-see-also)

</div>## <span class="mw-headline" id="bkmrk-why-install-addition-1">Why install additional plugins?</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

Plugins enable you to add additional features and functionality to Moodle, such as new activities, new quiz question types, new reports, integrations with other systems and many more.

Note: Certain hosting solutions, such as [MoodleCloud](https://moodle.com/cloud/), prevent plugins being installed from within Moodle.

## <span class="mw-headline" id="bkmrk-choosing-the-best-pl-1">Choosing the best plugins for your site</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

Install and test plugins in a non-production environment before using them on a production site.

When choosing a plugin in [Moodle Marketplace](https://marketplace.moodle.com):

- check that it supports your Moodle version
- review its description, documentation and installation requirements
- check when it was last updated and whether it appears to be actively maintained
- review its support information
- check whether it requires an external service, license or additional payment
- review any awards shown on the plugin page, such as the Privacy friendly or Mobile app award

### <span class="mw-headline" id="bkmrk-plugins-for-school-t-1">Plugins for school teaching</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

For the various school environments (ages 4 - 18 ) consider the following:

- [Attendance](https://marketplace.moodle.com/plugins/mod_attendance)
- [Checklist](https://marketplace.moodle.com/plugins/mod_checklist)
- [Chemistry editor](https://marketplace.moodle.com/plugins/atto_chemistry)
- [Group choice](https://marketplace.moodle.com/plugins/mod_choicegroup)
- [Level up!](https://marketplace.moodle.com/plugins/block_xp)
- [Quizventure](https://marketplace.moodle.com/plugins/mod_quizgame)
- [Word count](https://marketplace.moodle.com/plugins/tinymce_wordcount)

### <span class="mw-headline" id="bkmrk-plugins-for-universi-1">Plugins for university teaching</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

For universities, there is a [list of plugins by/for Universities](https://docs.moodle.org/en/Tertiary_education#Moodle_plugins_by.2Ffor_Universities), and a [link to discipline-specific plugins](https://docs.moodle.org/en/Tertiary_education#Discipline-specific_plugins), which might be worth considering.

## <span class="mw-headline" id="bkmrk-considerations-for-p-1">Considerations for production sites (skip if you're just moodling)</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

**VERY IMPORTANT!**

**Some plugins in the directory have not been reviewed for quality or suitability for your Moodle site, so please use discretion when installing them because a plugin may not behave as expected, and in rare cases could introduce security issues. This is improving as the Moodle Marketplace evolves.**

- If you have a large site for production purposes consider if you **really** need the plugin? More functionality means more things to support, more things to (potentially) go wrong and more things to worry about at upgrade time.
- Is the plugin supported and maintained? If something goes wrong can you get support? Will bugs be fixed?
- If the plugin does not work in a future version of Moodle, what will you do about it?
- Be cautious of any plugin whose installation instructions ask you to manually modify or replace core Moodle files. This isn't standard practice, and isn't guaranteed to survive a future Moodle upgrade, since it bypasses Moodle's normal plugin structure.
- Look at [this](https://moodle.org/mod/forum/discuss.php?d=340821#p1373707) forum thread and [also this](https://moodle.org/mod/forum/discuss.php?d=346296) forum thread since both discuss examples of users worried about installing a plugin.

## <span class="mw-headline" id="bkmrk-installing-a-plugin">Installing a plugin</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

<figure class="embedvideo" id="bkmrk-load-video-youtube-y" style="width:640px"><div class="embedvideo-wrapper" style="height:360px"><div class="embedvideo-consent"><div class="embedvideo-overlay"><div class="embedvideo-loader" role="button"><div class="embedvideo-loader__fakeButton">Load video</div><div class="embedvideo-loader__footer"><div class="embedvideo-loader__service">YouTube</div> </div> </div><div class="embedvideo-privacyNotice hidden"><div class="embedvideo-privacyNotice__content">YouTube might collect personal data. [Privacy Policy](https://www.youtube.com/howyoutubeworks/user-settings/privacy/)</div><div class="embedvideo-privacyNotice__buttons"> <button class="embedvideo-privacyNotice__continue">Continue</button> <button class="embedvideo-privacyNotice__dismiss">Dismiss</button>

 </div> </div> </div></div></div><figcaption>Installing plugins from admin interface</figcaption></figure>To install a plugin, its source code must be put (deployed) into the appropriate location inside the Moodle installation directory and the main administration page *Site administration &gt; Notifications* must be visited. You can deploy a plugin by:

- uploading a plugin ZIP file through the Moodle administration interface
- installing a compatible plugin with Composer, if your Moodle site is Composer-managed
- copying the plugin files to the server manually

To upload a ZIP file through the administration interface, the web server process must have write access to the relevant plugin-type directory.

<div class="alert alert-info" id="bkmrk-note%3A-whenever-you-i">**Note:** Whenever you install or download a plugin from the Moodle plugins directory, it is extremely important that you have correctly chosen your [Moodle version](/503/en/Moodle_version "Moodle version"). If you mistakenly download and install the wrong version of a plugin for your Moodle server, this may lead to some serious problems, even freezing of the Moodle site.</div>### <span class="mw-headline" id="bkmrk-installing-plugins-w-1">Installing plugins with Composer (Packagist)</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

If your Moodle site is Composer-managed, you can install compatible plugins directly from Packagist.

#### <span class="mw-headline" id="bkmrk-before-you-start">Before you start</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- Confirm your site is Composer-managed.
- Confirm your project requires &#96;moodle/composer-installer&#96; in production dependencies.
- Confirm the target plugin is available on Packagist and declares correct Moodle Composer metadata.

#### <span class="mw-headline" id="bkmrk-install-a-plugin">Install a plugin</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

From your project root:

<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr" id="bkmrk-composerrequireabgre">

```
composerrequireabgreeve/moodle-block_stash
```

</div>Then complete the Moodle upgrade process if prompted.

#### <span class="mw-headline" id="bkmrk-update-a-plugin">Update a plugin</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr" id="bkmrk-composerupdateabgree">

```
composerupdateabgreeve/moodle-block_stash
```

</div>#### <span class="mw-headline" id="bkmrk-remove-a-plugin">Remove a plugin</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr" id="bkmrk-composerremoveabgree">

```
composerremoveabgreeve/moodle-block_stash
```

</div>After removal, complete the Moodle uninstall or upgrade flow as needed.

#### <span class="mw-headline" id="bkmrk-good-practice-for-co-1">Good practice for Composer-managed sites</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- Commit changes to &#96;composer.json&#96; and &#96;composer.lock&#96; together.
- Test plugin changes in a non-production environment first.
- Use one installation method per plugin to avoid drift.

#### <span class="mw-headline" id="bkmrk-notes">Notes</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- This method does not apply to non-Composer Moodle sites.
- If a plugin is not in Packagist or is not Composer-compatible, use the standard installation methods described elsewhere on this page.

### <span class="mw-headline" id="bkmrk-installing-via-uploa-1">Installing via uploaded ZIP file</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

1. Go to the Moodle Marketplace, Sign in, select your current [Moodle version](/503/en/Moodle_version "Moodle version") and download the appropriate plugin version as a ZIP file.
2. Login to your Moodle site as an admin and go to *Site administration &gt; Plugins &gt; Install plugins*. (a) There are two options you can choose when you get to this page. One of them is the **"Install plugins from the Moodle plugins directory"** button. This used to install a plugin directly; that direct-install flow ended with the launch of Moodle Marketplace, so the button now takes you to a temporary page with a link through to Moodle Marketplace instead. Click through, log in to Marketplace, find the plugin you want, and download the ZIP file. (b) The second option on this page (if you haven't clicked the above mentioned button) allows you to upload a previously downloaded zip file.

1. Upload the ZIP file. You should only be prompted to add extra details (in the Show more section) if the location where your plugin will install is not automatically detected.
2. If your target directory is not writeable, you will see a warning message.
3. Check the plugin validation report.

<table id="bkmrk-install-plugins-plug"><tbody><tr><td><figure class="mw-default-size" typeof="mw:File/Thumb">[![](https://docs.moodle.org/503/en/images_en/thumb/c/c7/plugin1.png/300px-plugin1.png)](/503/en/File:plugin1.png)<figcaption>Install plugins</figcaption></figure></td><td><figure class="mw-default-size" typeof="mw:File/Thumb">[![](https://docs.moodle.org/503/en/images_en/thumb/4/4d/add-on_package_validation.png/300px-add-on_package_validation.png)](/503/en/File:add-on_package_validation.png)<figcaption>Plugin package validation</figcaption></figure></td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-installing-manually--1">Installing manually at the server</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

If you can't deploy the plugin code via the administration web interface, you have to copy it to the server file system manually (e.g. if the web server process does not have write access to the Moodle installation tree to do this for you).

First, establish the correct place in the Moodle code tree for the plugin type. Common locations are:

- /path/to/moodle/theme/ - themes
- /path/to/moodle/mod/ - activity modules and resources
- /path/to/moodle/blocks/ - sidebar blocks
- /path/to/moodle/question/type/ - question types
- /path/to/moodle/question/behaviour/ - question behaviours
- /path/to/moodle/course/format/ - course formats
- /path/to/moodle/admin/report/ - admin reports

See [dev:Plugin types](http://docs.moodle.org/dev/Plugin_types "dev:Plugin types") for the full list of all plugin types and their locations within the Moodle tree.

1. Go to the [Moodle plugins directory](https://moodle.org/plugins); select your current [Moodle version](/503/en/Moodle_version "Moodle version"), then choose a plugin with a Download button and download the ZIP file.
2. Upload or copy it to your Moodle server.
3. Unzip it in the right place for the plugin type (or follow the plugin instructions).
4. In your Moodle site (as admin) go to *Site administration &gt; Notifications* (you should, for most plugin types, get a message saying the plugin is installed).

Note: The plugin may contain language files. They'll be found by your Moodle automatically. These language strings can be customized using the standard *Site administration &gt; Language* editing interface. If you get a "Database error" when you try to edit your language files, there is a strong chance that the language files included within the downloaded ZIP file of this plugin have a coding problem. If you delete the *plugin\_name/lang/other\_language\_different\_to\_English/* folder with the new language strings and the database error disappears, this is indeed the case. Please notify the plugin maintainer, so that it can be fixed in future releases.

## <span class="mw-headline" id="bkmrk-troubleshooting">Troubleshooting</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

### <span class="mw-headline" id="bkmrk-errors">Errors</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

If you obtain an error, please [turn debugging on](/503/en/Debugging "Debugging") to obtain additional information about the cause of the error.

<dl id="bkmrk-database-error-while"><dt>Database error while doing a language customization</dt><dd>May not be related to the [Language customization](/503/en/Language_customisation#Database_error "Language customisation"), but rather a problem with a recently installed plugin.</dd></dl><dl id="bkmrk-tool_installaddon%2Fer"><dt>tool\_installaddon/err\_curl\_exec - cURL error 60</dt><dd>This suggests problems with the validation of the SSL certificate of the remote (moodle.org) site. This is also a known problem in Moodle Windows 7 servers running the Moodle package for Windows. See [SSL certificate for moodle.org](/503/en/SSL_certificate_for_moodle.org "SSL certificate for moodle.org") for more info and possible solutions.</dd></dl>### <span class="mw-headline" id="bkmrk-a-file-permissions-e-1">A file permissions error has occurred</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

On certain 3.0.x versions, when installing plugins via the administration interface, Moodle uses the configuration settings <tt>$CFG-&gt;directorypermissions</tt> and <tt>$CFG-&gt;filepermissions</tt>. If these are not defined explicitly in your config.php, the default value is set automatically to 777 (rwxrwxrwx) for directories and 666 (rw-rw-rw-) for files (see lib/setup.php).

If this default behaviour does not fit your needs and hosting environment, you may wish to specify more strict setting such as

```
$CFG->directorypermissions = 02750;
```

A common error after installing plugins is that when you create an instance of the module and then save and display it, it reports the error, "A file permissions error has occurred. Please check the permissions on the script and the directory it is in and try again." If you get this, the file permissions of the package are most likely set to 711 preventing them from running correctly. With your preferred FTP client or via your web hosts control panel, set the file permissions of all the files and directories in the installed module, e.g. /moodle/mod/\[myplugin\]/ to 755 and then see if you can successfully view the module instance.

### <span class="mw-headline" id="bkmrk-default-exception-ha-1">Default exception handler: Error writing to database Debug: Duplicate entry 'en\_us-...</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- These errors are usually caused by a third party plugin.
- To find the involved plugin, go to [http://lang.moodle.org](http://lang.moodle.org) and use the AMOS tool to find all the strings with the given string identifier.
- Remove the suspected plugin and check if the error has disappeared. If so, please contact the plugin maintainer and report this issue.
- Please see [this forum thread](https://moodle.org/mod/forum/discuss.php?d=219504) for known causes and fixes.

### <span class="mw-headline" id="bkmrk-when-installing-manu-1">When installing manually</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- Check the file permissions. The web server needs to be able to read the plugin files. If the rest of Moodle works then try to make the plugin permissions and ownership match.
- Did you **definitely** unzip or install the plugin in the correct place?
- Because Moodle scans plugin folders for new plugins you cannot have any other files or folders there. Make sure you delete the zip file and don't try to rename (for example) an old version of the plugin to some other name - it will break.
- Make sure the directory name for the plugin is correct. All the names **have** to match. If you change the name, then it won't work.

### <span class="mw-headline" id="bkmrk-obtaining-help">Obtaining help</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

Ask in a forum in [Moodle in English](http://moodle.org/course/view.php?id=5). Make sure you describe your system (including versions of MySQL, PHP etc.), what you tried and what happened. Copy and paste error messages exactly. Provide the link to the version of the plugin you downloaded (some have very similar names).

## <span class="mw-headline" id="bkmrk-uninstalling-a-plugi-1">Uninstalling a plugin</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

To uninstall a plugin

1. Go to *Site Administration &gt; Plugins &gt; Plugins overview* and click the Uninstall link opposite the plugin you wish to remove
2. Use a file manager to remove/delete the actual plugin directory as instructed, otherwise Moodle will reinstall it next time you access the site administration

## <span class="mw-headline" id="bkmrk-plugins-overview">Plugins overview</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

<figure class="mw-halign-center" id="bkmrk-plugins-overview-hig" typeof="mw:File/Thumb">[![](https://docs.moodle.org/503/en/images_en/thumb/1/10/plugins_overview.png/400px-plugins_overview.png)](/503/en/File:plugins_overview.png)<figcaption>Plugins overview highlighting available check button</figcaption></figure>The Plugins overview page in *Site Administration &gt; Plugins &gt; Plugins overview* lists all installed plugins, together with the version number,release, availability (enabled or disabled) and settings link (if applicable).

A 'Check for available updates' button enables admins to quickly check for any updates available for plugins installed on the site (from [Moodle Marketplace](https://marketplace.moodle.com/)). Any updates available are highlighted, with further information and a download link in the notes column opposite the plugin.

### <span class="mw-headline" id="bkmrk-plugin-updating-from-1">Plugin updating from within Moodle</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

An administrator can enable updates deployment in *Site Administration &gt; Server &gt; Update notifications*. Then when updates are available, 'Install this update' buttons are shown on the Plugins overview page. See [Automatic updates deployment](/503/en/Automatic_updates_deployment "Automatic updates deployment") for more details.

## <span class="mw-headline" id="bkmrk-preventing-installin-1">Preventing installing plugins from within Moodle</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

If required, installing and updating from within Moodle can be prevented by copying the following lines of code from config-dist.php and pasting them in config.php.

<div class="mw-highlight mw-highlight-lang-php mw-content-ltr" dir="ltr" id="bkmrk-%2F%2F-use-the-following">

```
<span class="c1">// Use the following flag to completely disable the installation of plugins</span>
<span class="c1">// (new plugins, available updates and missing dependencies) and related</span>
<span class="c1">// features (such as cancelling the plugin installation or upgrade) via the</span>
<span class="c1">// server administration web interface.</span>
<span class="nv">$CFG</span><span class="o">-></span><span class="na">disableupdateautodeploy</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
```

</div>## <span class="mw-headline" id="bkmrk-see-also">See also</span><span class="mw-editsection-divider"> \| </span><span class="mw-editsection-bracket">\]</span>

- [Notifications](/503/en/Notifications "Notifications") for further details of update notifications
- [Plugin Review Criteria](/503/en/Plugin_Review_Criteria "Plugin Review Criteria")
- [Plugins FAQ](/503/en/Plugins_FAQ "Plugins FAQ")
- Moodle in English [General plugins forum](http://moodle.org/mod/forum/view.php?id=44)
- [Installing a contributed extension from its Git repository](/503/en/Installing_Moodle_from_Git_repository#Installing_a_contributed_extension_from_its_Git_repository "Installing Moodle from Git repository")

For developers:

- [Plugins developer documentation](http://docs.moodle.org/dev/Category:Plugins "dev:Category:Plugins")
- [dev:Plugin validation](http://docs.moodle.org/dev/Plugin_validation "dev:Plugin validation")
- [dev:On-click add-on installation](http://docs.moodle.org/dev/On-click_add-on_installation "dev:On-click add-on installation")

---

<small>Source: [docs.moodle.org/503/en/Installing contributed modules or plugins](https://docs.moodle.org/503/en/Installing%20contributed%20modules%20or%20plugins) — MoodleDocs (GPL) · Imported 2026-11-10.</small>