Free Moodle plugins & tools

Tools we built for real client work, released free. Maintained against supported Moodle versions — because an abandoned plugin is worse than no plugin.

Sternfast publishes free, GPLv3 Moodle plugins built during real migration and support work, tested against currently supported Moodle versions and written up on the blog. Our latest release is Access Expiry & Enrolment Duration (local_accessexpiry): manage how long learners keep access — by site, category, course, role, enrolment method or cohort — with per-learner extensions and optional reminders. Alongside it, Grade Lookup (report_gradelookup) shows any learner's grades across every course, even after they're unenrolled.

Latest release · free · GPLv3

Access Expiry & Enrolment Duration — how long learners keep access, from one place

Access windows live in a few different places in Moodle — a per-course default, a per-user end date, a cohort with no end-date field of its own. Access Expiry & Enrolment Duration holds all of it in one place: set a window — a number of days or a fixed date — at site, category, course, role, enrolment method or cohort level, with the most specific rule winning. Extend an individual learner in a click, send optional reminders before access ends, and roll it all out safely.

Set the window once — it applies where it fits Site default — e.g. expire 365 days after enrolment, then suspend (grades kept) Category · Course · Role · Enrolment method · Cohort — narrower rules override Per-learner extension — always wins (extend by days, to a date, or unlimited) Direct enrolments get the end date written on; cohorts lapse on schedule; extensions bring a learner straight back.
Rules cascade from a site default to cohort level, and per-learner extensions override everything — you set the policy where it fits, the plugin resolves each learner's window.
  • Rules across scopes — days or a fixed date, by site, category, course, role, enrolment method or cohort.
  • Cohort access windows — give a synced cohort an end date; members lapse on schedule.
  • Per-learner extensions — add days, set a date, or unlimited, with a reason; a suspended learner comes straight back, grades intact.
  • Optional reminders — staged "ending soon" messages with a renew link, through Moodle's notifications.
  • Safe rollout — ships disabled, dry-run preview, protected roles, per-run cap, audit log, and revert.
Componentlocal_accessexpiry (local plugin)
Version1.0.0 · stable
RequiresMoodle 4.5 (LTS) or newer
LicenseGNU GPL v3 or later · free
SafetyShips disabled · dry-run preview · audit log · one-click revert
Sourcegithub.com/Sternfast/moodle-local_accessexpiry
Where to get it. The ZIP below is the official build — download it or view the source on GitHub. A Moodle Marketplace listing for in-Moodle install by name is on the way. The full write-up, with how it works and screenshots, is on the blog: Set how long Moodle learners keep access.

Download the plugin (ZIP) View on GitHub Read the write-up

Also free · GPLv3

Grade Lookup — every grade a learner earned, in one report

Moodle's gradebook is per-course, so there's no core screen that shows one learner's grades across everything they've taken — and unenrolled learners drop out of the gradebook entirely. Grade Lookup is the report that answers the whole question: search any learner by name or email, see their grade in every course with an item-by-item breakdown and certificates, filter to a course or cohort for a summary, and export to Excel. Past and unenrolled learners still appear — their grades are recovered from history.

Grade Lookup Site administration ▸ Reports ▸ Grade Lookup Find learners — name or email… Search Download (Excel) ⬇ Learners 358 Average grade 74% Completion 61% Certificates 212 358 learner(s) found — including learners who have been unenrolled. Jordan Ellis · 6 courses with grades View record ›
The search view — filter to a cohort and the summary tiles recompute; every learner is one click from their full cross-course record.
  • Find any learner — current, past, or unenrolled (grades recovered from history).
  • Filter by course or cohort — by name or ID, multi-select, optional date window.
  • Summary tiles — learners, average grade (median & range), completion, certificates, active time.
  • Per-learner record — grade in every course, item-by-item breakdown, certificates with verification.
  • Export — one-click Excel workbook (summary + learner list); CSV too.
Componentreport_gradelookup (site report)
Version1.4.0 · stable
RequiresMoodle 4.3 or newer (tested through 5.0)
LicenseGNU GPL v3 or later · free
FootprintRead-only · no database tables · no scheduled tasks · Privacy API provider
AccessCapability report/gradelookup:view (manager level)
Where to get it. We're submitting Grade Lookup to the Moodle Marketplace now — once approved you'll install it from within Moodle by name. The ZIP download and Marketplace link land here as soon as the listing is live. In the meantime, the full write-up — how it works, the SQL it replaces, and screenshots — is on the blog: See every grade a Moodle learner earned.

Read the Grade Lookup write-up

Why free

Our tools are how we introduce ourselves

The best LMS shops we know earned their reputations by giving real answers and real tools away — then being easy to hire when the hard version of the problem showed up. That is the model here.

Every plugin on this page came out of actual client work: something we needed mid-migration, a diagnostic we wrote to find lost tracking data, an admin shortcut that saved hours. If it saved us time, it will save you time.

Two releases so far, with more being packaged. Each gets a write-up on the blog covering what it does, how we use it, and — where relevant — the manual method it replaces.

Have a plugin request? If you keep hitting a Moodle problem that deserves a proper tool, tell us about it — the good ideas become releases.

Talk to an engineer