Skip to main content

Moodle 3.11

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: 17 May 2021

Here is the full list of fixed issues in 3.11.0.

See our New features page in the user documentation for an introduction to Moodle 3.11 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 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
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 3.10 and above do NOT support Internet Explorer 11.

Safari 7 and below has known compatibility issues with Moodle 3.10 and above.


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


  • If you have a site running on MariaDB / MySQL with many users, you may experience database issues after the upgrade step 2021042100. The upgrade attempts to drop several columns from the user table ("icq", "skype" and others) once they were converted to new user profile fields (MDL-28452). These ALTER TABLE queries typically require copying all the rows into a new tablespace and rebuilding all indexes. Which may eventually lead to time-outs and "MySQL server has gone away" errors. It should be enough and safe to simply wait for the query to finish on the DB server (you may need to monitor currently running queries there) and then re-run the upgrade until the upgrade step 2021042100.01 finishes successfully.

Major features

Improve student activity completion

  • MDL-71189 - Define sort ordering for completion conditions
  • MDL-70821 - Update the course homepage to display the activity information
  • MDL-70818 - Implement the activity dates functionality for each activity and output them in view.php
  • MDL-70815 - Create a base class for fetching a user's activity completion details
  • MDL-70816 - Create a base class for fetching an activity's dates that are relevant for a given user
  • MDL-70820 - Implement the completion details functionality for each activity plugins output them in view.php - Part 1
  • MDL-70935 - Implement the completion details functionality for each activity plugins output them in view.php - Part 2
  • MDL-71235 - Review and update existing web services to return the new fields and exported information from activities
  • MDL-71288 - Activity completion fallback for third party plugins
  • MDL-71163 - Remove duplicate activity dates
  • MDL-71144 - Deprecate the *_get_completion_state() callbacks
  • MDL-71234 - Create user tours for the activity information output component

Brickfield accessibility toolkit

  • MDL-69863 - Brickfield Education Labs accessibility toolkit core integration


  • MDL-71117 - Make Moodle OBv2.1 implementation compliant
  • MDL-70689 - Add new "IMS OBv2.1" OAuth 2 service
  • MDL-70911 - Remove "Backpack settings" site administration page and improve UI
  • MDL-63961 - Improve resolution of badge image sent to external backpacks and used when duplicating badges

Content bank and H5P

  • MDL-69331 - Add ability to disable specified H5P content types
  • MDL-66769 - Create a task to clean up unused H5P content
  • MDL-70429 - Set the default returntype to reference in repository_contentbank
  • MDL-67999 - Update content bank upload button to open file picker in a popup instead of new page
  • MDL-69762 - Option to make a content bank item unlisted
  • MDL-70408 - Open H5P file from H5P activity when it was added as a reference
  • MDL-70438 - Content bank should provide info on the number of places where content is used and warn you when deleting


  • MDL-52420 - Assignment comments should be also saved when clicking 'save changes' in the assignment grader page
  • MDL-68533 - Allow mod_assign download all assignments to be streamed
  • MDL-67702 - Assignment name filter preference should only affect current assignment's view
  • MDL-70038 - Implement Poppler pdftoppm compatibility for faster assignment submission PDF to PNG conversion
  • MDL-69631 - Add 'Draft' filter to assignment grading table

Quiz and questions

  • MDL-32226 - Add Plagiarism support to essay questions
  • MDL-70895 - Questions: Default options when creating a question
  • MDL-71262 - Add default options for essay question type
  • MDL-71225 - Add default options for ddimageortext, ddmarker and match question types
  • MDL-71181 - Display pass grade on quiz front page
  • MDL-68597 - Add optional min/max word count limits to Essay question type
  • MDL-69735 - Read-only view of quiz settings overrides
  • MDL-70134 - Improve manual grading of quiz essay answers - web page format
  • MDL-66600 - Manual grading of automatically graded questions: show computer grading
  • MDL-71205 - Add default options for numerical question type using user-preferences
  • MDL-70562 - In a newly created quiz, prevent "Edit quiz" and "Back to the course" buttons sticking together
  • MDL-70266 - Quiz override screens should show user identity fields
  • MDL-71030 - Quiz review: name the person who made each change in the question response history (if not the student)

Accessibility improvements

  • MDL-69474 - Improve accessibility of profile images
  • MDL-71089 - Make it possible to style toast notifications

Usability improvements

  • MDL-70817 - Create an output component that displays an activity's information for a user
  • MDL-48594 - More filtering options on Activity Completion Report
  • MDL-65856 - UX Review of session expired timeout modal
  • MDL-65135 - Add year to messaging conversation date headings, if not the current year
  • MDL-51287 - Show confirmation when profile changes are saved
  • MDL-70565 - Add ability to search country field on Participants page
  • MDL-69145 - Default the participants page filtering to "ALL"
  • MDL-57831 - Improve notification preferences on/off buttons so they fit better with non-English strings
  • MDL-71254 - OAuth2: Display login errors on the login page
  • MDL-67028 - LTI: Support Course dates substitution parameters
  • MDL-70753 - Create landing page for the reports link in the secondary navigation
  • MDL-71403 - Update message preferences of a user as admin to use consistent toggle icons
  • MDL-71064 - Add support for keyboard hotkeys in VideoJS
  • MDL-69878 - Always show the close button on the message drawer

Other highlights

Functional changes

  • MDL-28452 - Convert user profile fields for messaging/networking into custom profile fields
  • MDL-58673 - Enable playbackrates for videojs
  • MDL-45242 - Allow user profile fields to be specified as user identity fields - New code is backwards-compatible, but report code should be updated.
  • MDL-66431 - Remove "Enable activity chooser" user preference
  • MDL-61768 - Update Google Drive repository to allow Shared drive files
  • MDL-63381 - Option to not include permissions overrides when importing or restoring a backup
  • MDL-71190 - Backup and Restore lastaccess to course
  • MDL-48269 - Remove option to hide a group picture
  • MDL-71118 - Differentiate between grade as a noun and grade as a verb in the UI texts
  • MDL-71186 - Add custom user field support to group management screens
  • MDL-69773 - Add an option to display section names in Section link block

For administrators

  • MDL-70722 - Move Microsoft, Facebook and NextCloud OAuth2 services to new, reorganised architecture
  • MDL-42382 - Add a "Replace filter" option on the admin browse users page
  • MDL-65843 - Ability to force cron scheduled task definitions in config.php (schedule and disabled)
  • MDL-70536 - Create a CLI script to reset user dashboards
  • MDL-67748 - Improve the web services tokens management to allow searching and filtering
  • MDL-69460 - Check for removed files before CLI upgrade
  • MDL-70828 - Add ability to switch off session lock debugging
  • MDL-70583 - Implement a renderer for progress_bar in cli output
  • MDL-68010 - Allow disabled tasks to be run from the GUI
  • MDL-71017 - Add the ability to configure OAuth2 services for login only; add login display name
  • MDL-70269 - Update the ClamAV default behaviour when an error occurs
  • MDL-70500 - Use Dynamic Registration to allow Tools to update to LTI Advantage
  • MDL-70287 - Payment service consumers should be able to specify url after payment
  • MDL-70158 - Make it easier to find a specific component in template library
  • MDL-70632 - Allow searching of available language packs
  • MDL-70362 - Add showdebugging and showsql options to admin/cli/uninstall_plugins.php
  • MDL-69898 - Config change event should link to config change report
  • MDL-70159 - Sort capabilities in capability overview tool


  • MDL-71273 - Add a new option in Moodle app "Disabled features" for preventing the new LTI launch in the app
  • MDL-65983 - Include option for testing Push notifications in a site


  • MDL-68481 - mod/folder/download_folder.php should be a streaming zip download
  • MDL-70444 - Make my_reset_page_for_all_users for dashboards more robust
  • MDL-68052 - Implement cleanup of analytics_indicator_calc stores table
  • MDL-71044 - Extend the 'backup_cleanup_task' scheduled task to remove old files
  • MDL-66667 - Cache course image in the course_summary_exporter
  • MDL-69121 - Allow redis session store to use zip or zStd for compression like redis MUC
  • MDL-70107 - Running a scheduled task in the GUI should unlock the session
  • MDL-27193 - Eliminate DB queries in mod/glossary/settings.php
  • MDL-70608 - Update language pack installs / updates to run asynchronously to avoid timeouts when multiple are used

Security improvements

  • MDL-65818 - Provide admin setting type for secure data (passwords/tokens)
  • MDL-64865 - Add logging when auth config is automatically changed due to config/filesystem mismatch
  • MDL-69333 - Reduce ability to fingerprint a server with a htaccess-dist / nginx file / docs
  • MDL-69522 - Allow antivirus scanners to specify the message to the user
  • MDL-67882 - Log changes to the message notifications settings
  • MDL-70649 - Allow plugins to augment the cURL security helper via callback
  • MDL-70735 - Reduce information disclosure from TCPDF version
  • MDL-70766 - Log changes to auth plugin settings in config log
  • MDL-70439 - Display user email address visibility settings on their own profile

For developers

The PHPUnit upgrade will almost certainly break your tests. See Writing PHPUnit tests#Upgrading unit tests to work with Moodle 3.11 and up .28PHPUnit 9.5.29

  • MDL-52817 - New sql_group_concat db method
  • MDL-64554 - Add module for displaying moodleform in a modal window
  • MDL-71036 - Upgrade PHPUnit to 9.5.x
  • MDL-68608 - Improve the readonly session debugging message
  • MDL-71012 - HTTP 503 Service Not Available is returned by exceptions and should be 500 instead
  • MDL-70311 - Upgrade boost to use Bootstrap latest version
  • MDL-69202 - Restore backup: add getter method for oldmoduleid
  • MDL-70055 - Support large number of SQL-IN parameters in Postgres
  • MDL-70142 - Preserve form data when purging individual caches
  • MDL-71099 - Move user_fields from core to core_user

Web service additions and updates

  • MDL-69869 - Add ability for "get enrolled users" web service to be filtered by suspended users
  • MDL-70128 - Create a new endpoint (script) to retrieve draft files from web services
  • MDL-68853 - Create web service to trigger report_viewed event for H5P activities
  • MDL-69259 - Create H5P activity web service to get the list of students that attempted an activity
  • MDL-70387 - New web service core_files_get_unused_draft_itemid
  • MDL-71492 - Return quiz pass grade via web services
  • MDL-70037 - Update mod_forum_get_discussion_posts web service to return the last_modified attribute
  • MDL-71031 - Batch create API for grade categories
  • MDL-71169 - All new external functions implementation classes should use execute as the method name, in which case the methodname property should not be specified in db/services.php file


  • MDL-69792 - Deprecate unused backpack js functions
  • MDL-66138 - Deprecate get_forum_discussions_paginated webservice
  • MDL-65319 - Phase 2 of deprecation of functions in lib/deprecatedlib.php initially deprecated in 3.7
  • MDL-65284 - Final deprecation for analytics methods deprecated in MDL-64783
  • MDL-65215 - Final deprecation of i_dock_block()
  • MDL-65186 - Final deprecation of \core_analytics\manager::add_builtin_models()
  • MDL-65086 - get_enabled_time_splitting_methods final deprecation
  • MDL-64982 - Final deprecation of behat_base::TIMEOUT and related constants
  • MDL-64866 - Remove message/defaultoutputs.php and final deprecation of admin_page_manageqbehaviours class
  • MDL-64776 - Final deprecation of booktool_print_get_toc()
  • MDL-63266 - Final deprecation of enrol/database/cli/sync.php

Component API updates