Australian Moodle hosting, development & consulting

Moodle services

Moodle Plugin Development

Custom Moodle plugins built to Moodle coding standards - activity modules, reports, blocks, enrolment and availability plugins that survive the next core upgrade.

Moodle is extensible in a way most learning platforms are not, and that is the main reason to choose it. The catch is that a plugin written carelessly becomes a liability at the next major version – it blocks your upgrade, and eventually somebody has to pay to remove it. We build plugins that do not do that.

How we build

Everything we write follows the official Moodle coding style and uses core APIs rather than working around them. In practice that means:

  • Core APIs, not direct SQL against core tables. The database schema changes between versions; the APIs are the contract that does not.
  • Proper database installation and upgrade steps, so your plugin migrates cleanly instead of needing a manual fix on every site.
  • Capabilities and access checks on every entry point, because “the link is hidden” is not access control.
  • Privacy API implementation, so the plugin declares what personal data it stores and participates in data export and deletion requests.
  • Language strings for all output, never hard-coded English in the code.
  • You get the source. It is your plugin, in your repository, and another developer can pick it up. No black box, no lock-in.

What we have actually built

Rather than list plugin types in the abstract, here is the shape of recent work. Client names are withheld, but these are real builds solving real complaints:

  • Bulk quiz marking. A single page that puts an entire cohort’s short-answer responses side by side so a trainer marks correct/incorrect in one pass, instead of clicking through attempt after attempt. Built because marking a 60-person cohort through the stock interface was taking a full day.
  • Cross-category completion reporting. A report that spans course categories – which core reporting does not do well – with inline editing so a trainer can correct a completion state without leaving the report.
  • Prerequisite course gating. An availability condition that blocks marking in a child course until the parent course is complete, so assessors cannot accidentally sign off out of sequence.
  • Enrolment-relative availability. A condition that opens activities a set number of days after enrolment rather than on a fixed date – the thing you need when learners start on rolling intakes rather than in a term.
  • Canvas to Moodle migration tooling. Courses, users, grades and completion state moved across from Canvas LMS, with reconciliation so nothing lands silently missing.
  • Role-based landing pages. A dashboard that shows a learner, a trainer and an administrator three genuinely different views, instead of one page with most of it hidden.
  • Attempt correction for managers. A controlled way for an authorised manager to fix a quiz attempt’s dates or a wrongly recorded answer, with the change logged rather than done invisibly in the database.
  • Assessment due-date reminders. Scheduled reminder emails for quizzes, matching the behaviour Moodle already has for assignments.

Plugin types we work in

Across those builds and others, the plugin types we work in most: activity modules, blocks, local plugins, report plugins, availability conditions, enrolment and authentication plugins, question types and question behaviours, admin tools, and themes (usually a Boost child theme rather than a from-scratch build, because child themes survive upgrades and from-scratch themes do not).

Before you commission a plugin

The most useful thing we do is sometimes talk you out of one. Three checks we run first:

  1. Does core already do this? Moodle has a lot of features that are switched off or buried. Configuration is free; a plugin is not.
  2. Does a maintained plugin already exist? The Moodle plugins directory has thousands of entries. If a well-maintained one fits, use it – we will help you evaluate whether it is actually maintained.
  3. Will this survive? If a requirement fights the way Moodle works, the plugin will need rewriting at every major version. We would rather redesign the requirement than sell you a recurring problem.

If a custom build is genuinely the answer, you get a written scope with the behaviour, the assumptions and the version compatibility target before anyone writes code.

Upgrades and ownership

Plugins we build are tested against the Moodle versions you actually run, and re-tested ahead of each major upgrade as part of ongoing maintenance. If you host with us, that testing happens on your staging clone before the upgrade reaches production. If you host elsewhere, we will still do it – we just need access to a staging environment.

Where this stops

  • We do not sell or operate a student management system. We integrate Moodle with the one you already run.
  • We do not prepare or lodge compliance reporting. We make sure Moodle holds clean, exportable data for the people who do.
  • We are not a Moodle Partner. We are independent – weigh that as a trade-off rather than assuming either way.
  • We do not write your course content. We build and run the platform it lives on.

Plugin work usually sits alongside broader custom development, integration with your other systems, and managed hosting. If a plugin is slowing your site down rather than a server problem, start with our notes on diagnosing Moodle page load issues.

Questions

Frequently asked questions

Do we own the plugin you build for us?

Yes. You get the source, in your repository, written to Moodle coding standards so another developer can pick it up. We do not build black boxes and there is no licence tied to staying with us.

Will a custom plugin break when we upgrade Moodle?

Not if it is written against core APIs rather than around them. That is the main thing that separates a plugin that survives upgrades from one that blocks them. We test our plugins against each major version and, for maintenance clients, re-test on staging before the upgrade reaches production.

Can you fix or take over a plugin another developer wrote?

Usually. We will review it first and give you an honest read - sometimes the right answer is a rewrite rather than patching, and we will say so with reasons rather than just quoting for the rewrite.

Can you build a plugin for a Moodle you do not host?

Yes. We need access to a staging environment that matches your production version. If you do not have one, setting it up is usually the first thing we recommend regardless of who hosts you.

How do you decide between a plugin and configuration?

We check whether core already does it, then whether a maintained plugin in the Moodle plugins directory already does it, then whether the requirement fights the way Moodle works. A custom build is the last option, not the first.

Keep exploring

Talk to a Moodle specialist

Tell us how you deliver training and what is not working. We will tell you what we would do about it, and whether we are the right people to do it. No charge for that conversation.

Email support@techlearning.com.au Phone +61 3 7067 3365 24/7 for critical incidents; Mon–Fri, 8:30am–5:30pm AEST/AEDT otherwise