Moodle CodeRunner

Run CodeRunner questions without a Jobe server

CodeRunner, Moodle's question type for programming questions, needs a Jobe server to run students' code. Instead of installing and patching one, point CodeRunner at OnlineCompiler.io: change two settings and your questions run on our sandboxes.

By the OnlineCompiler.io team. Updated .

Why not run your own Jobe

Jobe is open source and works well, but someone has to run it: a Linux server set aside for untrusted code, the compilers and interpreters your courses use, updates for each of them, and enough capacity for the moment a whole class presses Check. If the server falls over during a quiz, students can't submit.

A hosted Jobe-compatible server moves that work off your desk. CodeRunner keeps grading as it does today; only the address its runs go to changes.

Set it up in two settings

  1. Get a free API key at your dashboard.
  2. In Moodle, open Site administration > Plugins > Question types > CodeRunner.
  3. Set Jobe server to https://api.onlinecompiler.io/api, including https://.
  4. Set Jobe API key to your API key and save. Then check an answer in any CodeRunner question.

The full reference, with every endpoint, outcome and difference from Jobe, is on the Jobe-compatible API page.

Languages

CodeRunner's built-in question types use Jobe's language ids, and each one runs on a current compiler:

Jobe languageRuns on
cC (GCC 15)
cppC++ (G++ 15)
javaJava (OpenJDK 25)
nodejsJavaScript (Node.js 24)
octaveOctave (11)
pascalPascal (Free Pascal 3.2)
phpPHP (8.5)
python3Python (3.14)

38 more languages that Jobe doesn't offer are available to custom question types under plain ids, including go, rust, kotlin, csharp, haskell and sqlite. Set one as the question type's sandbox language.

What a run costs, and quiz peaks

Every run CodeRunner sends counts as one run. A Check can be one run or one run per test case, depending on the question's template, and validating a question's sample answer runs code too. The free plan's 100,000 runs a month cover a lot of coursework.

Busy moments are limited by how many runs your account can start each minute and run at once:

PlanRuns a monthRuns a minuteAt once
Free100,000302
Starter150,000604
Pro1,000,0001204
Business4,000,00030016

A run over those limits gets Jobe's overload answer, which CodeRunner shows as a sandbox overload; pressing Check again a moment later works, and nothing is counted. For timed exams with large classes, see pricing or ask us for higher limits.

What's different from Jobe

  • C compiles in GCC 15's default dialect rather than Jobe's -std=c99. Compiler flags set in a question (compileargs, linkargs) are ignored.
  • Compiler warnings land in stderr, which CodeRunner marks as an error, much as Jobe's default -Werror fails them.
  • Command-line arguments (runargs) are refused.
  • Each language runs in its own sandbox, so templates that compile another language from Python, including the built-in multilanguage question type, don't work: the Python sandbox has no C compiler or JDK.
  • The time limit is the question's CPU time, capped at 30 seconds; memory is fixed at 512 MB.

Frequently asked questions

What is Jobe, and why does CodeRunner need it?

Jobe is the server that compiles and runs students' code for CodeRunner, the Moodle question type for programming questions. CodeRunner sends each run to the Jobe server set in its settings and grades the output it gets back.

Can I use CodeRunner without installing Jobe?

Yes. Set CodeRunner's Jobe server to https://api.onlinecompiler.io/api and its Jobe API key to an OnlineCompiler.io API key. CodeRunner then sends its runs to OnlineCompiler.io, which answers in Jobe's format.

Is it free?

The free plan includes 100,000 runs a month, with no credit card. Each run CodeRunner sends counts as one.

Do my existing questions need changes?

Questions using CodeRunner's built-in types (c, cpp, java, nodejs, octave, pascal, php and python3) keep working. The differences that can show up are listed on this page and in the docs: C compiles in GCC 15's default dialect rather than C99, command-line arguments are refused, and the multilanguage question type, which compiles other languages from a Python template, doesn't work.

Is students’ code isolated?

Every run gets a fresh gVisor sandbox with no network access, 512 MB of memory and a 30-second limit, and is thrown away afterwards. See the security page for the details.