AlgoJudge documentation
Self-hosted software for programming contests and courses, with automatic evaluation of submitted solutions.
AlgoJudge is open-source, self-hosted software for programming contests and courses, with automatic evaluation of submitted solutions.
You run it yourself. Nobody else holds your participants' accounts, your problems or your results.
Where to start
For a participant
Enter an activity, read a problem, send a solution, and find out what happened to it.
For a manager
Build activities and rounds, keep the problem library, answer questions, decide who may do what.
Install and operate
Stand an installation up on a machine you own, keep it running, and get it back.
Server
The domain model, the permission model, and the REST reference generated from the API itself.
Runner
The machines that evaluate submissions: what one needs, how it is isolated, and which work it is given.
Protocol
The contract between a Server and a Runner, for somebody writing a Runner of their own.
How the parts fit together
Three programs, and each one refuses to do the others' work:
- The Client is what people look at. It draws activities, problems, forms and results.
- The Server holds everything durable — accounts, problems, submissions, results — and decides who may do what. It never compiles or runs a submitted solution, and it does not understand what any particular kind of problem means.
- A Runner does the running. It takes a job, evaluates it in isolation, and reports back. A Runner always opens the connection, so it can sit behind a domestic router with no address of its own.
The consequence worth knowing early: adding a new kind of problem does not require a change to the Server. The Client learns to draw it and a Runner learns to judge it.
Which version this is
AlgoJudge 0.1.0 is released, and these pages describe it: five repositories
carry the tag and the eight images are public. This site cut its first version
directory on the same day, so the line under the name reads 0.1 and the
address carries it: /en/install/v0.1/backup. Without the number you get the
newest, which is what /en/install/ redirects to.
Each section is versioned by its own source. /install/ moves when
AlgoJudge-Ops releases, /server/ when the Server does, /protocol/ when the
contract changes. There is no single version of this site, because the products
do not release together — which is why the version sits inside the section
rather than in front of it.
Granularity is minor. A patch release updates its directory in place, and if that would change documented behaviour it was not a patch.
AlgoJudge is 0.x, and a 0.x release carries no promise of backward
compatibility. Every minor release comes with a note saying what broke and
what to do about it. Documentation for older versions is never deleted, and
never written after the fact: it is cut on release day or not at all. For an
installation that has not upgraded, the old page is the only one that works.