Updated for 2023 and Moodle 4.x

What do previous participants say about this course ... ?

  • 100% found it useful and interesting
  • 66% rated the course as Excellent
  • 100% thought the content was at the right level
(This feedback is genuine and was provided anonymously)

MoodleBites for Developers Level 2 is one of our technical courses. It is not suitable for beginners, or those with no previous development experience. However, if you are interested in an introductory level course for Moodle development, please review the MoodleBites for Developers Level 1 course.


Because this course is specialist, it runs just twice each year (numbers are limited, so please register in plenty of time):

  • 1st May
  • 1st October

This course is 8 weeks in duration, asynchronous, and completely online. Each week contains approximately 2-4 hours work, although this varies depending on your experience with Moodle and development in general, and how much extension work you wish to complete.

It is an 8 week series of units focused on key areas of Moodle development. Each unit is comprised of tutorials, screencasts, documentation and practical exercises. There are no live classes, but participants are encouraged to participate in forums and to post the results of their practical assignments for the others to see.

MoodleBites for Developers Level 2

OpenBadges logo

Gareth Barnard photo 2022

Your lead-facilitator for this course is Gareth Barnard, well-known in the Moodle community for his outstanding contributions to Moodle including:

  • Co-Moderator of the Moodle.org Themes Forum
  • Co-Moderator of the Moodle.org Courses and Course formats Forum
Current work:
  • Developer of the revolutionary Foundation theme (used on 800+ sites)
  • Current developer of Adaptable theme (used on 19,700+ sites)
  • Co-Developer of Campus Theme (used on 600+ sites)
  • Developer of Collapsed Topics course format plugin (used on 6,000+ sites)
  • Current developer of Grid course format plugin (used on 7,200+ sites)
  • Current developer of Theme Selector Block (great for developers/demo sites)
  • Developer of SynHi, a syntax highlighting filter (great for presenting code on courses)
  • Previous work:
  • Maintainer of the Essential Theme - THE most popular Moodle Theme plugin anywhere – still used on more than 3,600 Moodle sites worldwide
  • Developer of Shoehorn Theme - based on Bootstrap 3
  • Developer of Shoelace Theme
  • Developer of Columns format course format plugin (used on 70 sites)

Previous developers and facilitators of this course include Richard Jones and Justin Hunt.

Richard JonesJustin Hunt


MoodleBites for Developers Level 2 is USD $950 per person at this time we are able to offer a discount to a special rate of USD $799 but places are limited - so book early to avoid disappointment!  If you wish to translate this value to your local currency please visit: http://www.xe.com/ All invoices in US Dollars USD$ (Euro invoices available by special request). You can register for the course using the "Register Now" link on the Front Page.

If you book (and pay) Level 1 and Level 2 at the same time you can have an additional $100 discount.

This is a technical course, designed for people with some background in development. This course is not suitable for people who have no experience in development (please review MoodleBites for Developers Level 1).

Course outline

Course outline Pre-requisites: Participants should have some experience with PHP to get the most from the course. Since this is a course for developers, there will be a lot of code examples and weekly short programming assignments. Participants should have completed MoodleBites for Developers Level 1 or be familiar with the content covered there.

Technical requirements

  • A web server with Moodle 3.4 or greater installed
  • SSH or command line access to the server
  • If you have web server that you rent from bluehost, godaddy or similar services then you can use that for development. Or you can set up a web server on your windows or mac using XAMPP. See: https://www.apachefriends.org/index.html
  • Information on how to install Moodle on your server can be found here: https://docs.moodle.org/en/Installing_Moodle
  • It's OK to use the same server for several Moodle sites, but don’t try to develop on a production Moodle site.

The course follows the general pattern of MoodleBites for Developers level 1 with descriptions of the key APIs followed by relatively short tasks to illustrate them and to test your understanding. Material that was covered in MoodleBites for Developers Level 1 is only briefly recapped. If you want to take this course without having taken the Level 1 course you may have to double the proposed weekly study time.

  • Week 1 - In the first week of the course we set up development environments, set expectations, cover course orientation and download our first plugin template. We discuss automated class loading.
    • Introduction
    • Brief recap of development environments
    • Brief recap of using git for Moodle developers
    • Creating a base plugin from a template
    • Moving code from locallib to local classes
  • Week 2 - The example plugin uses renderers to separate the output from the plugin logic as is good practice in any kind of development. We briefly re-visit the $PAGE and other output components and refactor our code to use simple permissions. We set up a couple of features: styles.css and a local class.
    • Renderers and outputting html
    • Brief recap on language strings
    • Adding simple permissions/capabilities
    • Adding styles and setting up a local class
    • Setting up a local class, namespaces and automated class loading
  • Week 3 - This week covers Moodle forms to an advanced level. We will briefly recap the material from the level 1 course before getting into the complexities associated with saving form data. Finally we save some page data to the table using a form.
    • Re-visiting Moodle forms
    • Updating the database
    • Adding a first content page and editing form
    • Saving editor files
  • Week 4 - In the week 4 we modify the plugin template to cover navigation and editing pages.
    • Re-writing plugin files
    • Multiple page navigation
    • Adding a page manager
  • Week 5 - Admin settings pages. Testing our plugin with multiple instances and roles, re-visiting the database API. User reports and multi-page output. Thinking about security.
    • A page index
    • The admin settings page
    • Sorting and paging
    • Security issues
  • Week 6 - Javascript is an increasingly important component of core Moodle and many plugins. Unfortunately there are two ways of implementing JavaScript in Moodle for historical reasons so we cover both YUI and AMD here.
    • Using YUI in a plugin
    • Using AMD/jQuery in your plugin
    • A toggle button example
    • An ATTO button example
  • Week 7 - Automatic class loading is a system for determining the location of classes from their names. This makes life easier when using APIs and can improve the performance of your plugin as discussed in Week 1. We take another look at this issue via the implementation of events and tasks.
    • Moodle namespaces and automated class loading
    • About Moodle events
    • About Moodle tasks (ad hoc and scheduled)
  • Week 8 - Is a plugin ever finished? In this week we look at ways to develop this plugin further, things we might add to promote user interaction.
    • Additional sections to add to our plugin pages