opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

a modern online judge that scales to national olympiads
GitHub RepoImpressions3

Project Description

View on GitHub

The Online Judge That Powers National Olympiads—and You Can Run It Too

If you've ever tried to build a coding competition platform from scratch, you know it's a rabbit hole. You need a sandboxed execution environment, a way to handle submissions in dozens of languages, a contest system that supports different scoring formats, and a frontend that doesn't fall apart when hundreds of contestants hit refresh at once. It's a project that could eat months of your life. The DMOJ online judge is what happens when a team decides to solve that problem properly—and then open-sources the whole thing.

What It Does

DMOJ is a full-featured online judge and contest platform. At its core, it's the software that runs dmoj.ca, a site that has hosted thousands of competitions, including national olympiads. The repository contains the web application—the site itself—while a companion project called judge-server handles the actual code execution.

The judging system is where DMOJ really flexes. It supports over 60 language runtimes, from mainstream choices like Python and C++ to more niche options. It handles interactive tasks (where your program communicates with a judge in real time), signature-graded tasks, custom output validators, and runtime data generators. You can set resource limits per language, which matters when you want to give Python submissions more time than C++ ones. And it scales horizontally—you can connect hundreds of judging servers to a single site if your competition is big enough.

The contest system is equally serious. It ships with ICPC, IOI, AtCoder, and ECOO formats out of the box, and you can add custom formats with your own code. There's support for system testing, hidden scoreboards, and virtual participation—letting people compete after a contest ends, just not for real standings. The rating system uses an Elo-MMR approach, and there's built-in plagiarism detection via Stanford MOSS.

Why It's Cool

The thing that stands out about DMOJ isn't any single feature—it's the sheer completeness of the package. This isn't a weekend project or a proof of concept. It's battle-tested software that has run actual national olympiads. That pedigree shows in the details.

The judging is genuinely robust. Interactive tasks and signature grading are hard to get right. Most hobby judges I've seen handle the simple "compile and run, compare output" case and call it a day. DMOJ handles the edge cases that matter for serious competitions. The per-language resource limits are a particularly nice touch—it's a fair way to handle languages with different performance characteristics.

The contest system is flexible without being a mess. Supporting four different contest formats out of the box is impressive, but the real win is that it's extensible. You can write a custom format if you need something specific. The hidden scoreboard and virtual participation features are things that organizers actually need, not just nice-to-haves.

The problem statement support is better than you'd expect. LaTeX math, diagrams, syntax highlighting, and automatic PDF generation—that's a lot of polish for something that's often an afterthought. If you've ever tried to distribute problem statements to contestants, you know the PDF generation alone is worth a lot.

It's a real community project. The README shows active build status, a Discord server, and documentation at docs.dmoj.ca. This isn't abandoned software—it's a living project with people who will answer your questions.

How to Try It

The best way to see DMOJ in action is to visit dmoj.ca and poke around. You can browse problems, look at the submission interface, and get a feel for the UX before you commit to installing anything.

If you want to run your own instance, the installation docs live at docs.dmoj.ca. The setup involves two main pieces: the site itself (this repository) and the judge server, which does the actual code execution. The README points you to the Discord server if you hit any snags—and with a system this complex, you probably will.

The project is open source under a license you can check in the LICENSE.md file. The repository is at github.com/dmoj/online-judge, and the judge server has its own repository linked from the README.

Final Thoughts

DMOJ is not a lightweight solution. If you just want to run a small coding challenge for your local meetup, this is probably overkill—you'd be better served by something simpler. But if you're organizing a serious competition, running a programming club, or building an educational platform, this is the kind of infrastructure you'd otherwise spend months building yourself. It's free, it's proven, and it's actively maintained. That's a pretty good deal.

Follow @githubprojects for more developer tools and open source projects.

Back to Projects
Project ID: eb030a80-f7a5-4b3e-bb1b-7068ec300e1bLast updated: September 1, 2026 at 02:48 AM