+4981217607887 hallo@panomity.de

We moved 40 Kahoots into our own Moodle. Quizgeist is the plugin that did it.

by | Aug 3, 2026 | EdTech Development

Quizgeist is a live quiz that runs inside your own Moodle: an activity module, GPL v3, free to download and use. A teacher starts a session, the projector shows a six-digit join code and a QR code, students answer against a countdown, and the round ends on a podium. Release 1.2.0-rc.2 is out now. It is a release candidate, and there is a section below listing exactly what that means — the gaps, not the roadmap.

  • Free base plugin, GPL v3, no participant caps, no watermarks, no online activation.
  • Thirteen question types, all thirteen playable in a live session today.
  • A Kahoot importer that we ran on our own account before shipping it: 40 quizzes, 695 questions, 214 media files.
  • Six optional paid addons; a EUR 499 per year school package; a separate managed AI package.
  • Not in the Moodle plugins directory yet; one school’s evidence, no outside references.

Disclosure up front: Quizgeist is developed by Panomity and used in regular lessons at the Montessori Fachoberschule München, where Panomity’s managing director also teaches and is the school’s AI officer. That dual role is why the software fits a school day rather than a demo, and it is also why this post is a vendor writing about its own product. Read it with that in mind.

Why we built it instead of renewing

The renewal email arrives in June, usually. The quiz subscription is up, the per-seat price has moved, and somebody needs a decision by Friday. That part is survivable. The part that hurts comes later, when a colleague asks whether the twelve quizzes she built over three years can come along if the answer is no — and then the question is what exactly comes with you, and how much of the rebuilding lands on her desk.

We already had Moodle on our own hardware, with our own backups. Live quizzing, the part students visibly enjoy most, was the one thing living somewhere else. So we built the missing activity module.

The migration, with real numbers

The honest test of a self-hosted alternative is not whether it can run a quiz, but whether the quizzes you already have survive the move. Anything else is a rewrite disguised as a migration, and that cost is what keeps schools renewing subscriptions they no longer want. So we did the whole thing before shipping. Our Kahoot account held 40 games from several subjects. We exported them, imported them, and counted what arrived: 40 quizzes, 695 questions, 214 media files. Each Kahoot became its own Moodle activity, in the course it belongs to, taking part in the course backup like everything else.

The importer does not pretend everything maps cleanly, because it does not. The two models disagree in small ways: HTML in a question stem, time limits that do not exist on the target side, answer counts, scale ranges. So the import writes a per-question report with three verdicts — taken over, adjusted, skipped — which you read before putting the quiz in front of a class, so you know which handful of questions needs a look. How many that is depends entirely on the quiz; we have not tried to turn it into an average, because an average would be a promise.

Two practical notes from our own run. The pictures arrived in a separate media archive alongside the JSON, so if you hand the importer only the JSON you get questions without images — the report says so rather than silently producing a slideshow of empty frames. And externally hosted videos are not downloaded; the report names those too. The importer stays in the free base permanently: a migration tool behind a paywall is a toll booth on the road out of somebody else’s product.

What live play looks like

\1

On transport, you now have a choice. By default the devices poll the Moodle server over HTTP — roughly once a second during active play, stretched out when things are quiet, backing off on errors. That needs nothing besides Moodle and works on hosted school instances with no server access. Sites that can run a small background service switch the setting to WebSocket. Measured end to end, that dropped the delay between a teacher acting and a learner’s screen following from 436 ms to 76 ms.

What matters is what the relay does not do: it carries no game content. Per session it carries exactly one number, the state counter. The browser learns something changed and then fetches it over the normal, Moodle-authorised path — so enrolments, capabilities, groups and visibility are never rebuilt a second time outside Moodle. Two consequences: if the relay stops, nobody plays worse, because the round continues over the polling cycle (that is part of our acceptance run, not just a promise); and if it is compromised, all it holds is opaque channel keys and integers.

  • Reconnect mid-question. School Wi-Fi drops. A student who loses the connection halfway through a question rejoins into it, not into a shrug and an apology.
  • Fullscreen on both sides. Host view and player view both go fullscreen, and the projected stage keeps a 16:9 frame exactly, measured at 1.7777928 rather than assumed. No letterboxed quiz in the corner of the beamer while the back row squints.
  • Low-stress defaults. The leaderboard shows a learner their own progress by default — that is the value in the database schema, not a suggestion in the manual — and points can be decoupled from answering speed so being right stops competing with being fast. An optional, deliberately unscored thinking moment sits between answer and reveal, where players write a short justification that lands in the session report. You can switch the full ranking on; it is just not what a teacher gets by accident.

Thirteen question types

Thirteen types ship, and all thirteen are playable in a live session today: multiple choice, true/false, short answer, puzzle (ordering), poll, word cloud, scale, slider, pin on an image, image reveal, brainstorm, open answer with teacher review, and content slide.

The content slide is not filler: it lets the quiz carry a short teaching moment instead of a switch back to the presentation. The open answer collects free text, shows it to the teacher, and does not try to grade prose automatically. Six of the thirteen sit in the free base; the other seven belong to a paid addon.

Free base, paid addons, and why the base is not crippled

Quizgeist is GPL v3. That is not a badge, it is the licence Moodle plugins are under, with a consequence we accept openly: what you buy is access to the addon packages, updates and support, never permission to run code. Take the base plugin, pay us nothing, run it for every class in the school for as long as you like — that is the deal working as intended.

The free base holds the whole loop of authoring, playing live and reading results: six question types, join code and QR, countdown, answer bars, podium, reconnect, session report, a learner’s own view, the full Kahoot importer, and real Moodle integration — gradebook, completion, groups, backup and restore, privacy provider, course reset. The interface ships in English and German.

What it does not hold: participant caps, question caps, watermarks, time limits. Neither the code nor the licence file sets a number. That is a statement about what we gate, not a performance claim — see the release-candidate section for what we have and have not run.

The paid functionality lives in six addons, each a real Moodle subplugin under mod/quizgeist/addon/, installed or not like any other plugin:

  • Question Types Plus — the remaining seven types: puzzle, slider, scale, pin/heatmap, image reveal, brainstorm, open answer.
  • Game Modes & Motivation — team mode wired to Moodle groups, accuracy mode, a low-pressure safety mode, seasonal themes.
  • Self-study & Practice — assignments with deadlines and reminders, flashcards with SM-2 spaced repetition, interleaved review, weekly goals.
  • Reports Pro — combined and course-level reports, xlsx export, difficulty analysis, moderation trail, competence report by tag.
  • Stage check — presentation feedback with body-language analysis. By design, and as stated in the addon’s own privacy notice, that analysis runs entirely in the browser: the camera picture never leaves the device and is never stored, and only the computed metrics reach the server. This is a design property of the addon, not a measurement from our acceptance run. It is also the one addon we would think hardest about before switching on: a camera in a classroom is a decision for the school, not for a plugin, and Stage check is optional — you can simply not install it.
  • AI Workshop — topic to quiz, import from PDF and PPTX, read-aloud mode. Sold only together with a managed AI server, for reasons in the pricing section.

One point people usually find on their own, so we may as well say it: the addons are GPL v3 as well — check addon/*/version.php. The signed licence file gates our distribution, updates and support. It does not gate your right to run, study, modify or pass on the code. We think that is the correct trade for software a school builds its lessons on.

Licensing without a phone-home

Addon entitlements arrive as an Ed25519-signed licence file bound to your Moodle site address, verified against a bundled public key, locally, offline. The plugin never calls our servers to ask whether you may run a lesson: restrictive school networks are a fact of life here, and an activation check that fails at 08:05 on a Monday is worse than no check at all.

The other half of that promise is expiry. Existing premium content stays playable, visible and exportable; only the creation of new premium content is blocked. A school that feels locked in warns ten others, and rightly so.

One caveat left. Quizgeist is not yet submitted to the Moodle plugins directory, so installing it today means the ZIP or a clone of the public repository. The licence server itself is running: licences are issued automatically after you order, not by hand.

What an administrator needs to know before installing

  • Moodle 5.2 or newer (version.php requires 2026042000). PHP needs the DOM, Fileinfo and Zip extensions; participants need JavaScript in the browser.
  • No extra service required. By default, live play runs over the ordinary Moodle request path — a plain AJAX endpoint in the plugin. No WebSocket daemon, no Node process, no Redis to operate. If your Moodle serves pages, it serves Quizgeist. Sites that can run a small background service may opt into the signal relay described below; it is a choice, never a requirement.
  • No Moodle mobile app support. The plugin ships no app component; students play in the browser. Worth knowing if your school standardises on the official app.
  • For large Kahoot imports, upload_max_filesize, post_max_size, the web server limit and Moodle’s own file limits have to allow the archive. The importer accepts at most 128 MB compressed, 160 MB unpacked, 64 MB of Kahoot JSON, 150 questions per game and 25 MB per media file.
  • Installation order matters: base plugin first, then addons into mod/quizgeist/addon/, all from the same release family. Never update the base after the addons.

What it costs

PackagePrice
Quizgeist baseFree, permanently, GPL v3
School packageEUR 499 per year, incl. 19% German VAT
AI package (managed server)EUR 590 per month or EUR 5,900 per year, plus EUR 490 one-off setup

The school package is a site licence covering the addons other than the AI Workshop, with support and onboarding. The figure includes German VAT because that is what a German school actually pays: most cannot reclaim input tax. No per-seat charge, no per-session charge, no bill that grows because your school did.

An honest note on buying from abroad: self-service checkout is currently open to schools invoiced in Germany. The ordering flow is live and works, but built around German invoicing and VAT. If your school is billed elsewhere, use the contact route: we would rather quote you correctly for your jurisdiction than sell you an invoice your finance office cannot process.

The AI package is a different kind of product and deliberately not self-service anywhere. It is a managed GPU server we set up, run and update, with the AI Workshop on top; the setup fee covers installation, models, Moodle integration and a walkthrough. We do not sell the AI Workshop as a standalone “bring your own backend” addon, because the difference between AI features that demo well and AI features that survive three classes starting at once is entirely in the infrastructure underneath. If you already run your own, Moodle’s built-in AI settings are the open standard path and perfectly legitimate — just not something we can support.

Release candidate means release candidate

Here is the list of what we have not established. Better here than in a lesson.

  • No manual screen-reader test. Accessibility is a project standard and the interfaces are kept clean against automated checks. That is the floor, not the ceiling.
  • The load test ran over polling, not over the socket. 27 devices at once, 21 ms median server response, zero errors. The equivalent measurement over WebSockets is still outstanding: we expect less background load, but we have not measured it.
  • Accessibility: clean automated axe runs, and that is all we can claim. Automated checking is not accessibility. There has been no screen reader testing and no keyboard-only pass — and since we never opened Safari, no VoiceOver either.
  • The fullscreen button is not signed off in its visible state on the live system. It appears only from the lobby onwards, and that check is still open on our acceptance list.
  • One school’s evidence, no outside references. Quizgeist runs at Montessori-Fachoberschule München. That is our only defensible reference — no awards, no press, no install count to quote.
  • No user numbers, no reference customers besides our own school. No awards, no press, no case studies. One school runs this in regular lessons: ours. That is the entire evidence base, and inflating it would be the fastest way to lose credibility.
  • Not in the Moodle plugins directory yet. Submission is ahead of us, not behind us.

What is established: thirteen types playable live, the 40-game migration counted question by question, the 16:9 stage measured rather than assumed (in Chromium), clean automated accessibility runs, and the addon architecture plus licence binding taken through a six-stage acceptance run on a live system. The gap between those two lists is why the version says rc.1.

Who this is not for

Quizgeist is a Moodle activity module: not a website, not an app, not a hosted service you can sign up for. If your school does not run its own Moodle, there is nothing here to install. It is also no replacement for Moodle’s core quiz, which remains the right tool for summative assessment. Quizgeist is the other half of the job, the noisy formative one with a projector and a countdown.

And it will not save you time in the first term. A migration is work: import reports to read, a few questions per quiz to fix, a rehearsal before the session with thirty students. What you get in return is that the next renewal decision is yours to make on your own schedule.

Self-hosting, and where the data goes

The data-protection argument is made loudly in Germany and quietly elsewhere, so here is the version that holds everywhere: quiz data does not leave your Moodle instance. Sessions, answers, scores and reports live in your database, under your backups and retention rules, and the plugin ships a Moodle privacy provider, so what it holds is discoverable, exportable and deletable the way your administrator expects. That is a statement about where bytes are stored, not a legal opinion: we are not lawyers, the plugin carries no certification, and compliance is a property of your processing as a whole.

Nothing in the base plugin, and nothing in any addon except the AI Workshop, sends content to us or to a third party. The AI Workshop is the deliberate exception: it talks to the managed AI server described above, which we set up, operate and monitor, and the material you feed it — a topic, a PDF, a set of slides — is processed there. That is the whole point of selling the two together rather than pretending an AI feature is local when it is not.

The vendor-independence argument is the more durable one anyway. Self-hosting means the upgrade path is yours to schedule, the export is a course backup rather than a support ticket, and the software cannot be discontinued out from under a department that built three years of material on it. Under GPL v3 the licence gives you those rights over the code; a public repository is the next step so that the rights are practical as well as legal. Institutions outlive suppliers routinely.

How to try it

  1. Download the base plugin and install it on a test instance: mod_quizgeist-aktuell.zip. Free, GPL v3, no account, no form. The full source is in the ZIP.
  2. Import one existing Kahoot and read the per-question report. Ten minutes, and it says more about whether a migration is realistic than any feature table can.
  3. Run one real lesson on the devices your students actually bring — especially if those are Apple ones, given the gap above.
  4. Then decide whether the addons are worth EUR 499 to you.

The English product page is panomity.com/software/quizgeist, the German one panomity.de/software/quizgeist. The school package can be ordered at support.panomity.com/cart/quizgeist if your school is invoiced in Germany. For anything else — invoicing abroad, the AI package, or a question the documentation does not answer — use the contact form and a human will reply.

Bug reports from outside our own school are the most useful thing anyone can send us, and there is now a public address for them: the issue tracker on GitHub, where you can also read what others report and what we do about it. One school’s evidence and a release candidate: tell us what breaks.

Related reading

Contact

Don’t wait and write us!

GO

Newsletter

Sign up for our newsletter to stay up to date

Newsletter

About Us

Follow Us

Related articles

Comments

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *