Skip to main content

Moodle 3.9

Unsupported Moodle Version
This version of Moodle is no longer supported and will not receive fixes for security risks.
You are encouraged to upgrade to a supported version of Moodle.

Release date: 15 June 2020

Here is the full list of fixed issues in 3.9.0.

See our New features page in the user documentation for an introduction to Moodle 3.9 with screenshots.

If you are upgrading from a previous version, please see Upgrading in the user docs.

Server requirements

These are just the minimum supported versions. We recommend keeping all of your software and operating systems up-to-date.

  • Moodle upgrade: Moodle 3.5 or later
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too. See Moodle and PHP for details.
  • PHP extension mbstring is required (it was previously only recommended)

Database requirements

Moodle supports the following database servers. Again, version numbers are just the minimum supported version. We recommend running the latest stable version of any software.

DatabaseMinimum versionRecommended
PostgreSQL9.5 (increased since Moodle 3.8)Latest
MySQL5.6Latest
MariaDB10.2.29 (increased since Moodle 3.8)Latest
Microsoft SQL Server2012Latest
Oracle Database11.2Latest

Client requirements

Browser support

Moodle is compatible with any standards compliant web browser. We regularly test Moodle with the following browsers:

Desktop:

  • Chrome
  • Firefox
  • Safari
  • Edge
  • Internet Explorer

Note: Moodle 3.9.x (LTS) will be the last version actively supporting Internet Explorer 11. Moodle 3.10 (to be released in November 2020) will NOT support Internet Explorer 11.

Mobile:

  • MobileSafari
  • Google Chrome

For the best experience and optimum security, we recommend that you keep your browser up to date. https://www.whatsmybrowser.org/

Legacy browsers with known compatibility issues with Moodle 3.9:

  • Internet Explorer 10 and below
  • Safari 7 and below

Major features

Activity chooser overhaul

  • MDL-67924 - Move turn editing on button out of the edit menu on boost
  • MDL-67264 - Rework/Redesign the activity chooser
  • MDL-67584 - Front end implementation of indicating favourites with a star
  • MDL-67586 - Update activity chooser to include recommended activities
  • MDL-67262 - Add admin page for recommending activities
  • MDL-67321 - Support categories/tabs in the activity chooser
  • MDL-67263 - Ability to search in the activity chooser
  • MDL-67585 - New API for extending the activity chooser and implementation of favouriting
  • MDL-68662 - Introduce an Activities and Resources tab
  • MDL-67587 - Add searching of the recommended activities admin page

H5P updates and improvements

  • MDL-67814 - H5P editor integration
  • MDL-67734 - Create basic skeleton for a global xAPI library needed for H5P content
  • MDL-67337 - Apply Display H5P filter inside <a> tags
  • MDL-68636 - Render specific icons for different H5P content types in content bank
  • MDL-67701 - New activity icon for H5P
  • MDL-67063 - Add a mechanism to support multi H5P core_api versions
  • MDL-67707 - Create a new H5P activity
  • MDL-67062 - Add Admin UI to delete existing H5P libraries
  • MDL-67788 - Add xAPI statement support to mod_h5p
  • MDL-67060 - Improve admin UI to manage H5P libraries and give information about H5P tools' status
  • MDL-67791 - Create xAPI activity report inside mod_h5p
  • MDL-68271 - H5P editor: support content-type translations
  • MDL-67810 - Integrate content bank and H5P content creator
  • MDL-67713 - Include H5P Activity backup and restore options
  • MDL-68227 - H5P editor: integrate translations with Moodle String API
  • MDL-68379 - Add support for result, attachments, context to core_xapi library
  • MDL-68381 - Add duration, completion and success to H5P activity attempts
  • MDL-68241 - Add xAPI result support on mod_h5pactivity
  • MDL-68826 - Add link to the content bank in the H5P activity

Content bank

  • MDL-67786 - Create a new 'contentbank' plugin type and a new H5P plugin in the content bank
  • MDL-68314 - Backup and restore options for course level content bank
  • MDL-67800 - Implement events for content bank
  • MDL-67795 - Add a delete content option to the content bank
  • MDL-67812 - Create a new repository for the content bank
  • MDL-67813 - Implement search functionality for the repository_contentbank
  • MDL-68493 - Create a new view type list in the Content Bank
  • MDL-67797 - Implement search API for the content bank
  • MDL-68483 - Implement search functionality for the content bank

MoodleNet integration

  • MDL-68111 - Core setting to toggle MoodleNet features globally (master)
  • MDL-68698 - Allow links to be imported by tool_moodlenet (all versions)
  • MDL-67884 - Add links to MoodleNet in Moodle (master)

Improved participants page filtering

  • MDL-67917 - Create a single filter for tables and the AMD structure behind this
  • MDL-68348 - Update the participants filter to support filtering with additional logic operators
  • MDL-68246 - Update fetching of participants to support multiple values per filter
  • MDL-68169 - Add additional participants filter types and the ability to add multiple conditions to a filter set
  • MDL-68464 - "Enrol users" should not reload the page
  • MDL-68612 - Remove the previous (unified) filter from the participants page and deprecate relevant code

Course copy

Improved Safe Exam Browser integration

  • MDL-67850 - Add Safe Exam Browser integration to the standard Moodle package (moodle-quizaccess_seb)
  • MDL-68041 - New theme settings for secure layout - display lang menu and display logged-in user

Quiz and questions

  • MDL-58645 - Make drag-and-drop onto image questions responsive and fix the print layout
  • MDL-62487 - Quiz manual grading: chosen options should be remembered as user preferences
  • MDL-68113 - Improve responsive design of drag-drop into text questions (also fixes layout when printed)
  • MDL-68446 - Drag-drop question types: remove the hard-coded maximum size limit on images
  • MDL-68382 - Update drag-drop marker questions to be more responsive (and improve print layout)
  • MDL-68367 - Question: Multi-choice Option to hide system 'Select ...'
  • MDL-68338 - GIFT question import/export format should support tags
  • MDL-67934 - Intelligent default idnumber when duplicating a question in the question bank
  • MDL-67351 - Create an additional admin "Required" setting flag and apply it to quiz require password setting

Badges

  • MDL-66992 - Add support for Open Badges 2.1
  • MDL-68746 - Hide issuer details when creating badges with Open Badges 2.0 and above
  • MDL-68567 - Allow admins to manage available backpacks
  • MDL-66357 - Remove support for Mozilla Backpack

Accessibility audit improvements

  • MDL-68542 - Change the bold plugin to use strong tags instead of b for accessibility
  • MDL-68541 - Limit the image description length and improve the alt text string
  • MDL-68548 - Change the italics plugin to use em tags instead of i for accessibility
  • MDL-68378 - Create an accessible change event
  • MDL-68551 - Change the strikethrough plugin to use del tags instead of strike for accessibility
  • MDL-67874 - Improve the contrast of browser focus outline
  • MDL-68299 - Improve UI accessibility on small view ports

Usability improvements

  • MDL-66301 - Add ability to summarise all forums in a specific course
  • MDL-33671 - Add ability to bulk delete files in "My private files" repository
  • MDL-54554 - Improve error handling for unoconv (Universal Office Converter)
  • MDL-47750 - Make pasting images into the Atto HTML editor work (as much as browsers will let us)
  • MDL-45227 - Add text direction to default ATTO generated markup
  • MDL-58413 - Support internationalized domain names (IDN) in URL resources
  • MDL-68143 - Workshop: should remember collapsed/expanded sections
  • MDL-67613 - Add a new availability completion option - "previous activity with completion"
  • MDL-66463 - Add "Go to top" link when scroll down in boost and classic themes
  • MDL-68163 - Add ability to duplicate grade items in gradebook setup
  • MDL-67165 - Improve the user grade display modal
  • MDL-67160 - Show graded status in forum grading UI
  • MDL-65948 - Use the checkbox-toggleall component for the gradebook setup page
  • MDL-68217 - Reduce the size of titles on the recent activity page
  • MDL-68216 - Improve the recent activity block styling
  • MDL-68497 - Make fonts appear smooth in Firefox on Mac
  • MDL-68248 - My overview block: Add sort by short name
  • MDL-66911 - Display more information such as the URL beside licenses drop down menu in help icon
  • MDL-41958 - Show steps consistently during import
  • MDL-67703 - Make calendar manage subscription form more user friendly
  • MDL-68250 - Make book navigation easier to distinguish from activity navigation
  • MDL-67244 - Avoid HTML5 player video forced scaling for low resolution videos
  • MDL-67467 - Update progress report (Download in Excel-compatible format) dates to a sortable format

Other highlights

Functional changes

  • MDL-60817 - Notify the user when the original file extension has been removed or modified upon file editing in the filepicker
  • MDL-64310 - Avoid recycle bin locking the user's session during activity deletion or backup/restore (when it is enabled)
  • MDL-58827 - Add core profile fields to user filter
  • MDL-65796 - Include site name and link in contact request notifications
  • MDL-58866 - Modify the calendar events table to allow any component to create action events
  • MDL-46542 - Allow setting a subset of the available units in moodleform duration field
  • MDL-68563 - Enable additional content filters by default on new installs
  • MDL-67363 - Add a Quality of Service layer to the processing of the ad-hoc task queue
  • MDL-66920 - LTI 1.3: Allow tool to use JWKS URI rather than Public Key
  • MDL-67846 - Add name of user to fields included in forum exports
  • MDL-67547 - Render HTML in PDF dataformat export
  • MDL-66732 - Improve detection of non-public sites for registration
  • MDL-67072 - Include client_id and lti_deployment_id in OIDC Login Initiation request
  • MDL-68320 - Add a campaign feature, with a link to a Moodle page, to support sustainability
  • MDL-68409 - Stop using YUI modals in core/notification for alert and confirmation
  • MDL-68076 - Create "Feedback" link in Moodle to permanent survey site
  • MDL-56389 - Mark all as read in notifications menu should not apply to notifications received after the page was loaded
  • MDL-68465 - Subject for messages digest email should include site name
  • MDL-68568 - Move indent button to list group by default
  • MDL-57635 - User Tours: Restrict tours to account creation date, first login date or last login date
  • MDL-67384 - Upgrade jQuery EU Cookie Law popups to latest version
  • MDL-65306 - Prevent LTI Advantage external tool add failing due to uniqueness constraint and tag not persisting
  • MDL-66972 - Files API: Add Streaming file mime type support

For administrators

  • MDL-62815 - Add new capabilities to control adding LTI activities from preconfigured tools
  • MDL-47271 - Add system status report including tasks with cli status script
  • MDL-45184 - Create user interface to add/delete new licenses
  • MDL-66332 - Add "show differences only" into tool_capability
  • MDL-65812 - Increase default session timeout and allow it to be configured in the GUI
  • MDL-64610 - Add support for per-task concurrency limits
  • MDL-66213 - It should be possible to view anonymous events in reports
  • MDL-66135 - Add support for custom course fields to Upload courses
  • MDL-59594 - Allow graceful fast exit of cron.php / adhoc_task.php via SIGTERM or SIGINT
  • MDL-65729 - Ad-hoc task processing for automated backups
  • MDL-29693 - Add filtering to the config changes admin report
  • MDL-66925 - Enable cli/adhoc_task.php to be run as a pseudo daemon with --keep-alive=60
  • MDL-67433 - Update admin/tool/task/cli/adhoc_task.php to respect task_adhoc_concurrency_limit
  • MDL-59487 - Re-run a scheduled task from the web
  • MDL-68261 - CLI changes should be included in the config changes report
  • MDL-67456 - Add more options to Maximum number of backups kept
  • MDL-65229 - Allow cron cli option to remotely stop all crons
  • MDL-68256 - Scheduled tasks admin: usability enhancements
  • MDL-67895 - Scheduled tasks admin: show the defaults in the form where you edit the settings for a task
  • MDL-66752 - Develop an automatic approval tool for delete/export of personal data with a standard completion reply
  • MDL-67990 - Increase the Antivirus default chunk size (ClamAV)

Mobile

  • MDL-68537 - Update the tool_mobile_disabledfeatures setting with H5P and new blocks supported on the app
  • MDL-68294 - Add a new "Mobile app subscription plan" section in the Moodle app settings
  • MDL-65547 - Enable logging into the mobile app via QR code in the web user profile
  • MDL-67752 - Add new "activeusers" field containing last month active users in registration data
  • MDL-67753 - Enable "Mobile Notifications" when a site is registered
  • MDL-67907 - Site admins should see a warning asking them to enable the Mobile notifications plugin after registering for an Airnotifier key

Performance

  • MDL-19711 - Read/Write splitting of DB operations to support primary/replica database configurations
  • MDL-58018 - Reduce session lock contention with opt-in READ_ONLY_SESSION
  • MDL-39571 - Improve loading performance of filepicker when loading Recent Files
  • MDL-67689 - Improve theme designer mode performance
  • MDL-67681 - Improve course category tree cache performance by storing against single key instead of multiple
  • MDL-67040 - Improve the performance of the Analytics ML layer when using small datasets
  • MDL-68524 - Add Template and string prefetching
  • MDL-67635 - Speed up file system \core\task\file_trash_cleanup_task
  • MDL-66253 - Reduce the number of full table scans on the event table
  • MDL-68185 - Convert performance report to Check API
  • MDL-67075 - Extra session lock debugging for redis session handler
  • MDL-68577 - Tune the redis session handler to reduce blocking wait time

Security improvements and new features

  • MDL-67309 - Have options to call check_password_policy on every login
  • MDL-64075 - Antivirus: Support remote scanning using TCP sockets.
  • MDL-67504 - Allow virus checks to be retried if they returned an error state
  • MDL-67362 - Add logging for admin setting changes to antivirus to config log
  • MDL-67545 - New config option for ClamAV scanning errors to prompt user to try again later
  • MDL-63734 - If passwordunmask field is hardcoded in config.php, do not show the value

For developers

  • MDL-59562 - Allow plugins to declare which major stable versions of moodle are supported
  • MDL-38511 - Plugins should be able to define new bulk user actions
  • MDL-67052 - Implement a Lock API factory using Mysql / MariaDB
  • MDL-67818 - Create a Check API
  • MDL-68329 - Improve the cache performance footer info even more
  • MDL-67432 - Allow quizaccess plugins to be able to set up external admin pages
  • MDL-67548 - Allow plugins to hook into course category deletion form
  • MDL-67386 - Upgrade boost to use Bootstrap v4.5.0
  • MDL-68386 - Charts API: support for Area Chart fill values from Chart.js
  • MDL-68477 - Charts API: support for legend options for Chart.js
  • MDL-68233 - Code in renderers should not refer to global $PAGE or global $OUTPUT
  • MDL-62757 - Validate boost presets before allowing to pick and use them
  • MDL-68177 - Course renderer UI elements split into different methods
  • MDL-67373 - Upgrade PHPMailer to latest version
  • MDL-67372 - Upgrade HTML Purifier to latest version
  • MDL-67385 - Upgrade MongoDB PHP Library to latest version
  • MDL-67383 - Upgrade VideoJS to latest version
  • MDL-67382 - Upgrade phpCAS to latest version
  • MDL-67378 - Upgrade mustache.js to latest version
  • MDL-67376 - Upgrade loglevel.js to latest version
  • MDL-52846 - Deprecation of legacy cron
  • MDL-65835 - Deprecate plagiarism_get_form_elements()
  • MDL-63580 - Deprecate dupe cron_run_single_task() function
  • MDL-67845 - Deprecate 'enrol_database_admin_setting_category' class
  • MDL-67872 - Deprecate and fix plagiarismlib use of config vars
  • MDL-68495 - Allow flexible_table to update dynamically

Component API upgrades

Translations