Skip to main content

Moodle 4.0

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: 19 April 2022

Here is the full list of fixed issues in 4.0.0.

See our New features page in the user documentation for an introduction to Moodle 4.0 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.6 or later
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x and 8.0.x are supported too. See PHP for details.
  • PHP extension sodium is recommended. It will be required in Moodle 4.2. For further details, see Environment - PHP extension sodium.
  • PHP extension exif is recommended.
  • PHP setting max_input_vars is recommended to be >= 5000 for PHP 7.x installations. It's a requirement for PHP 8.x installations. For further details, see Environment - max input vars.

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
PostgreSQL10 (increased since Moodle 3.11)Latest
Microsoft SQL Server2017 (increased since Moodle 3.10)Latest
Oracle Database11.2Latest

Client requirements

Browser support

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


  • Chrome
  • Firefox
  • Safari
  • Edge Note: Moodle 4.0 does NOT support Internet Explorer 11.

Safari 7 and below has known compatibility issues with Moodle 4.0.


  • MobileSafari
  • Google Chrome For the best experience and optimum security, we recommend that you keep your browser up to date.

Major UX improvements

  • MDL-70208 - Implement frontend functionality for primary navigation
  • MDL-70207 - Implement backend functionality for primary navigation
  • MDL-70202 - Implement frontend functionality for secondary navigation
  • MDL-70198 - Implement backend functionality for secondary navigation
  • MDL-70196 - Create a module based navigation bar
  • MDL-72352 - Ensure that secondary navigation is backwards compatible
  • MDL-73462 - Course and category management secondary and tertiary navigation
  • MDL-71977 - Define the secondary navigation nodes that should be always displayed in the more menu in the module context
  • MDL-71901 - Allow plugins to define their own secondary nav ordering
  • MDL-70844 - Update the secondary navigation view to send site administration information in tab form
  • MDL-72396 - Allow easy setting of the active tab for navigation views
  • MDL-71912 - Implement tertiary navigation for plugins (also see MDL-71913, MDL-71914 and MDL-71914)
  • MDL-73863 - Tertiary navigation in course completion
  • MDL-72875 - Add tertiary navigation to the participants page
  • MDL-72904 - Add tertiary navigation to the badges pages
  • MDL-72873 - Add tertiary navigation to the gradebook
  • MDL-72094 - Update the course reports page styling and functionality
  • MDL-71083 - Move the user menu in the top bar into the primary navigation menu in the mobile view
  • MDL-73393 - Ensure that existing third party themes still work with latest navigation changes
  • MDL-71943 - Dynamic (AJAX) tabs in Moodle LMS
  • MDL-72090 - Convert course admin pages from link farms to dropdowns
  • MDL-72413 - Move the activity modules title, description, and activity completion into a standard module API
  • MDL-72736 - Remove section navigation on one section per page
  • MDL-72834 - Move the calendar link into the user menu
  • MDL-72450 - Remove the next and previous activity links from all activity modules in Boost
  • MDL-71148 - Combine both the custom menu & primary navigation renderers
  • MDL-71683 - Update language menu to move from the top navigation into the user menu when logged in
  • MDL-72005 - Update the context_header in Boost to move the breadcrumb to the top

Course index

  • MDL-71209 - Create the new course index list
  • MDL-72660 - Add activity completion indicators to the course index
  • MDL-71228 - Implement drag and drop option for sections and activities in the course index
  • MDL-71211 - Keep the status of the course index collapsed and expanded sections per user and course
  • MDL-71795 - Course index on activity view page
  • MDL-71828 - Implement section links' behaviour in course index
  • MDL-71664 - Enable drag & drop from course index to course content and vice versa
  • MDL-72463 - Add 'highlighted' label to course index
  • MDL-71727 - Sync course index and course content when an element is dragged
  • MDL-72897 - Mark the current section in the course index
  • MDL-73340 - Open course index by default first time a user access the course
  • MDL-73310 - Show the course index on all pages within a course

Course experience

  • MDL-71037 - Sections are now collapsible for Topics and Weekly course formats
  • MDL-71691 - Created a new activity UI component
  • MDL-71689 - Improvements to add activity and add section design
  • MDL-71663 - Created a new "move" option in the sections and activity cog menu in the course editor
  • MDL-71779 - Made 'Add a new topic/week' option client side on Topics and Weekly formats
  • MDL-72311 - Proceed straight to course content when creating a new course
  • MDL-71863 - Created core_courseformat subsystem
  • MDL-72578 - Moved activity UI component to output classes and templates
  • MDL-73343 - New quick access to create a new course from My courses page when there is no course available

My Courses page and overview block

  • MDL-70801 - Implement "My courses" page
  • MDL-58579 - Allow searching / filtering of courses in myoverview
  • MDL-73231 - Provide option of having My courses as defaulthomepage

Timeline block

  • MDL-72276 - Update timeline block dropdowns to display current selection
  • MDL-72277 - Improve the layout and usability of the items in the timeline block
  • MDL-73068 - Only display courses in the timeline block if they contain events
  • MDL-72295 - Add text search to the timeline block
  • MDL-72594 - Improve displaying of overdue items in the timeline block
  • MDL-72603 - Replace timeline block pagination with "show more" lazy loading
  • MDL-72543 - Change the display of the event names of the items on the timeline block

Calendar usability

  • MDL-71817 - Render the calendar in the calendar block in month view
  • MDL-72237 - Limit number of events shown per day in calendar month view
  • MDL-71810 - Add a current date indicator and make calendar block responsive when switching between small and large views
  • MDL-71808 - Move the import calendar form to its own page
  • MDL-72045 - Improve help information provided on the calendar export page
  • MDL-71790 - Revamp the manage subscriptions page
  • MDL-71788 - Make it easier to copy the export URL
  • MDL-71775 - Add footer links to the calendar block
  • MDL-72810 - Remove 3-month calendar view


  • MDL-72092 - Arrange blocks between My courses & My dashboard
  • MDL-73114 - Display a title in the dashboard page
  • MDL-71964 - Welcome message for users
  • MDL-73233 - Provide option to disable the Dashboard
  • MDL-72116 - Remove some of the default blocks from the Dashboard

User tours

  • MDL-61674 - Allow user tours to be created using the Atto text editor
  • MDL-72385 - Improve and simplify design of user tours
  • MDL-71938 - Display number of steps in a user tour
  • MDL-72783 - Add new user tours
  • MDL-72781 - Remove previous user tours
  • MDL-72557 - Implement customisable confirmation button for single step user tours
  • MDL-71931 - Update user tours to emit events

Other usability and user experience improvements

  • MDL-69371 - Redesign the Moodle login page (also see MDL-72928)
  • MDL-71457 - Update the Moodle activity icons
  • MDL-71963 - Turn confirmation page into modals
  • MDL-71965 - New footer
  • MDL-71456 - Create page drawers for the block and course index areas
  • MDL-72095 - Set a main container width of Boost pages
  • MDL-71610 - Move the turn editing on button into the navbar
  • MDL-72305 - Show user initials as a placeholder for the user profile picture
  • MDL-72278 - Fake blocks now in drawer are made visible on first visit
  • MDL-72454 - Removal of back to top link
  • MDL-72088 - Update styling across top level pages
  • MDL-70888 - Update the layouts in Boost theme
  • MDL-71292 - Update the page header and include course image / activity icon
  • MDL-73608 - Provide a contact form which sends to the site support email and replace mailto link in footer
  • MDL-73935 - Improved flexibility of site support form and consistency of site support info provided in Moodle
  • MDL-61564 - Allow multiple cohort selection in cohort enrolment
  • MDL-66539 - Better handling of link names and URLs with Atto
  • MDL-73797 - Dialogues now have the action button on the right
  • MDL-60917 - Add highest ranked results section to global search
  • MDL-73917 - Notification preferences page improvements
  • MDL-72500 - Easier to find a specific component in event list report
  • MDL-32103 - Course completion is instant for activity based completion criteria (single user completions only)

Other major features

Report builder integration (from Moodle Workplace)

  • MDL-70795 - Implement functionality for creating custom reports
  • MDL-70794 - Implement functionality for creating system reports
  • MDL-72588 - Implement custom report audiences
  • MDL-72598 - Implement custom report schedules
  • MDL-73598 - Allow Custom Reports to be disabled by site admin
  • MDL-72280 - Create "Courses" custom report source
  • MDL-73069 - Report condition to limit returned data to current user
  • MDL-73180 - Improve definitions of previous/next relative date filters
  • MDL-72662 - Implement relative date options in the Reportbuilder date filter
  • MDL-72172 - Create "Cohort members" custom report source
  • MDL-72962 - Format editable report elements (column, filters, etc)
  • MDL-72826 - Custom report option to display unique row values
  • MDL-71153 - Convert task logs report to a system report
  • MDL-71070 - Convert configuration changes report to a system report

BigBlueButton integration

  • MDL-70658 - Integrate the BigBlueButton plugin into Moodle LMS

Quiz and Questions

  • MDL-71516 - Create new plugin type - Qbank (for the full list of qbank plugins added to core, see MDL-70329)
  • MDL-71679 - Update mod_quiz for new question bank
  • MDL-71636 - Add a columnsortorder settings page
  • MDL-71696 - Add question versions
  • MDL-72076 - Question bank bulk action UI
  • MDL-72553 - Add custom fields to questions
  • MDL-52206 - Move "Require passing grade" completion option to core
  • MDL-52456 - Add notification message for students after questions have been manually graded
  • MDL-71984 - Add logging to quiz auto-save, process_attempt and redo_question
  • MDL-73337 - Log editing quizzes in detail
  • MDL-73699 - Question status UI/UX update
  • MDL-72448 - Add qbank_history to core
  • MDL-71614 - Add qbank_previewquestion to core

Update LTI tool provider feature to support 1.3

  • MDL-69543 - Update tool to support 1.3 OAuth2/OIDC launch flow
  • MDL-71371 - Provide upgrade path for 1.1 preconfigured tools
  • MDL-72745 - Provide account provisioning options for LTI Advantage launches
  • MDL-69547 - Update tool enrolment code so that a user is automatically created and enrolled when launching via 1.3
  • MDL-69545 - Update user sync task to support 1.3 messages
  • MDL-69544 - Update grade sync task to support 1.3 messages
  • MDL-72288 - Update library and model code to support issuer and clientid uniqueness on registrations
  • MDL-69862 - Add dynamic registration support to the tool
  • MDL-70354 - Return line item information during content selection


  • MDL-68913 - Per attempt timing now available in assignments

Admin configuration presets

  • MDL-72112 - Integrate admin_presets third-party plugin in Moodle LMS
  • MDL-73145 - Add a $CFG setting to define the preset to be installed
  • MDL-72114 - Include pre-installed admin presets
  • MDL-72113 - Add feature to import/export plugins visibility from Admin presets tool
  • MDL-73394 - Store the latest site admin preset applied

Content bank and H5P

  • MDL-68394 - Integrate mod_h5pactivity with recent activity plugins
  • MDL-72099 - Add navigation by contexts in the content bank
  • MDL-71885 - Inline editing H5P content for mod_h5pactivity
  • MDL-71956 - Inline editing H5P content anywhere


  • MDL-72141 - Simplifying the external badge page

Accessibility improvements

  • MDL-67853 - Remove online-offline options on notifications
  • MDL-72078 - Give users an indication that they encountered an editor
  • MDL-71604 - Move the screen reader helper button to the first row
  • MDL-72896 - Make html_tables responsive by default

Other Highlights

Functional changes

  • MDL-70456 - Add custom user field support to all places that display user identity (0,Minor) Improvement
  • MDL-73342 - Disable some blocks by default (such as feedback, RSS and self-completion)
  • MDL-70905 - Updated media default width/height to use 16:9
  • MDL-72118 - Rename "HTML block" to the more easily understood "Text block"
  • MDL-72706 - Change default value of "Hidden sections" course format setting
  • MDL-72115 - Rename "Miscellaneous" category to "Category 1"
  • MDL-72119 - Make "Enable xxxxx" features consistent (hide menus for disabled features)

For administrators

  • MDL-71347 - Add a filter to "browse list of users" for date of user account creation
  • MDL-72031 - Separate out max_time for audio and video files in Atto/RecordRTC
  • MDL-71515 - Improve the test outgoing mail configuration admin page
  • MDL-67686 - Add more filters to task log (/admin/tasklogs.php)
  • MDL-72984 - Ensure support email address is mandatory
  • MDL-73592 - MoodleNet integration now enabled by default
  • MDL-71621 - Parent role cannot edit custom fields in child profile
  • MDL-73918 - Allow admins to change the page width using custom SCSS
  • MDL-71927 - Logs and question attempt history now show time to the second, to help investigate issues
  • MDL-71466 - Custom user field support: Admin role screens (check permissions, assign)
  • MDL-72619 - Provide admin page to view cache size estimates
  • MDL-67822 - New check_database_schema performance check
  • MDL-70271 - Dropbox token and Permission Updates
  • MDL-58395 - LDAP auth sync now skip and report problematic user accounts
  • MDL-72251 - Tasks admin UI now shows time to nearest second


  • MDL-67807 - Return concurrent sessions information to apply concurrent login limit in the mobile app
  • MDL-69555 - Make duration of QR login and auto-login time between requests configurable
  • MDL-73794 - Update the footer in the mobile view


  • MDL-72596 - Caching: Track cache I/O size in perfdebug
  • MDL-69088 - Make file cache store purges instant with a safe and async purge
  • MDL-68164 - Additional caching of pg_field_type postgres field metadata
  • MDL-63983 - Improve the performance of non-contact searches in messaging when site-wide messaging is disabled (default)
  • MDL-71014 - Cache the siteidentifier and site contextid in local cache
  • MDL-72328 - Add TTL support for Redis caches
  • MDL-72837 - Cache API should support versioned data

Security improvements

  • MDL-56873 - Set more secure defaults for the cURL allow/deny lists
  • MDL-66776 - Send notifications when new devices are used to log in into the site
  • MDL-71627 - Add check API for anti virus and optionally remove admin notifications
  • MDL-71806 - Improved the UX of the Moodle security report
  • MDL-71176 - New password and change forms should have autocomplete="new-password"

For developers

  • MDL-61460 - Introduce the UI components library
  • MDL-74229 - Add navigation node keys to allow themers to hide navigation tabs
  • MDL-74235 - Rename the icons for activities to allow support of multiple icons for multiple versions
  • MDL-74033 - Allow full customisation of the primary navigation
  • MDL-72779 - Set more than one value on a persistent at the same time
  • MDL-70862 - Implement a new callback to extend gradebook plugininfo
  • MDL-72289 - Allow callers to customise the rendered icon of inplace editable elements
  • MDL-73347 - Allow themes to define un-addable blocks
  • MDL-46778 - Allow use a separate DB configuration (not just prefix) for Behat similar to PHPUnit
  • MDL-73270 - Warn where XMLRPC is currently in use
  • MDL-67228 - Tool_replace maturity set

Web service additions and updates

  • MDL-71135 - Create core_course_get_state web service
  • MDL-71165 - Create core_course_update_course web service

Core plugins removed

  • MDL-71473 - Jabber removed as a standard notification plugin
  • MDL-58939 - Picasa repository and portfolio removed from core
  • MDL-72335 - Tool_health removed from core
  • MDL-72615 - Boxnet plugins removed from core
  • MDL-72616 - Quiz results block removed from core
  • MDL-72348 - Microsoft OneDrive (legacy) repository (repository_skydrive) removed from core
  • MDL-72347 - Word censorship filter (filter_censor) removed from core
  • MDL-72407 - VideoJS Flash plugin removed from core
  • MDL-72042 - Flash animation media player removed from core
  • MDL-72041 - WebCT question import format removed from core
  • MDL-72517 - Examview question import format removed from core


  • MDL-53544 - Typo3 library removed
  • MDL-72004 - Quiz 4.0 Class renaming and deprecation
  • MDL-73756 - Deprecate $modinfo param to completion_info::get_data()
  • MDL-65799 - Phase 2 of deprecation of functions in lib/deprecatedlib.php initially deprecated in 3.8
  • MDL-71175 - Deprecate some plagiarism functions that are not used, or have replacements
  • MDL-66266 - Remove deprecated functions in messages/classes/api.php
  • MDL-72098 - deprecate grade_grade::insert method that just calls its parent
  • MDL-72433 - Final deprecation of get_grades() in lib/classes/grades_external.php
  • MDL-71476 - Remove mysql_engine.php
  • MDL-65252 - Final deprecations of forum_count_replies and get_forum_discussion_posts
  • MDL-67412 - Remove deprecated functions in lib/setuplib.php
  • MDL-65801 - Remove strings deprecated in 3.8

Component API updates

  • admin/tool/generator/upgrade.txt
  • admin/tool/log/upgrade.txt
  • admin/tool/mobile/upgrade.txt
  • admin/tool/upgrade.txt
  • admin/tool/usertours/upgrade.txt
  • admin/upgrade.txt
  • analytics/upgrade.txt
  • auth/shibboleth/upgrade.txt
  • availability/upgrade.txt
  • backup/upgrade.txt
  • badges/upgrade.txt
  • blocks/section_links/upgrade.txt
  • blocks/tag_youtube/upgrade.txt
  • blocks/timeline/upgrade.txt
  • blocks/upgrade.txt
  • cache/upgrade.txt
  • calendar/upgrade.txt
  • completion/upgrade.txt
  • contentbank/upgrade.txt
  • course/format/upgrade.txt
  • course/upgrade.txt
  • customfield/upgrade.txt
  • dataformat/upgrade.txt
  • enrol/database/upgrade.txt
  • enrol/upgrade.txt
  • filter/upgrade.txt
  • grade/grading/form/upgrade.txt
  • grade/upgrade.txt
  • group/upgrade.txt
  • h5p/upgrade.txt
  • lib/upgrade.txt
  • media/upgrade.txt
  • message/upgrade.txt
  • mod/assign/upgrade.txt
  • mod/book/upgrade.txt
  • mod/feedback/upgrade.txt
  • mod/forum/upgrade.txt
  • mod/glossary/upgrade.txt
  • mod/h5pactivity/upgrade.txt
  • mod/lesson/upgrade.txt
  • mod/lti/upgrade.txt
  • mod/page/upgrade.txt
  • mod/quiz/upgrade.txt
  • mod/resource/upgrade.txt
  • mod/scorm/upgrade.txt
  • mod/upgrade.txt
  • mod/url/upgrade.txt
  • mod/wiki/upgrade.txt
  • mod/workshop/upgrade.txt
  • my/upgrade.txt
  • payment/upgrade.txt
  • plagiarism/upgrade.txt
  • portfolio/upgrade.txt
  • question/bank/upgrade.txt
  • question/behaviour/upgrade.txt
  • question/engine/upgrade.txt
  • question/format/upgrade.txt
  • question/type/multichoice/upgrade.txt
  • question/type/upgrade.txt
  • question/upgrade.txt
  • report/eventlist/upgrade.txt
  • report/upgrade.txt
  • repository/upgrade.txt
  • search/upgrade.txt
  • theme/upgrade.txt
  • user/upgrade.txt
  • webservice/upgrade.txt