Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit



Failed to load latest commit information.
Latest commit message
Commit time
September 14, 2023 09:46
January 27, 2023 16:00
September 30, 2014 19:52
January 27, 2023 16:00
March 15, 2021 19:13
January 27, 2023 16:00

VNOJ: VNOI Online Judge Build Status AGPL License Discord link

As a fork of DMOJ, VNOJ serves as VNOI's official online judge and hosts its programming contests.

See it live at!


Check out its features here.


Refer to the install documentation here. Almost all installation steps remain the same as the docs, but there are several minor differences, including cloning this repo instead of DMOJ's repo.

Additional installation steps

  • You have to define DMOJ_PROBLEM_DATA_ROOT in, which should be the path to the directory that contains your problems' tests.

  • Regarding disabling full-text search, please read this issue for more information.

  • To sync the judge server and the site's cache, change the cache framework (CACHES) to memcached or redis instead of the default (local-memory caching).

  • If you use python3 loaddata demo, the home button in the admin dashboard (/admin) links you to localhost:8081, there are 2 ways to change that:

    1. You can change that in demo.json
    2. You can go to the admin page, scroll down to find the Sites setting and change localhost:8081 to your domain.
  • To support testlib.h, you need to copy testlib.h to g++'s include path in the judge server. To speed up compile time, you can also create a precompiled header for testlib.h.

Contributing PR's Welcome

Take a look at our contribution guideline.

If you find any bug, please feel free to contact us via Discord Discord Chat or open an issue.

Pull requests are welcome as well. Before you submit your PR, please check your code with flake8 and format it if needed. There's also prettier if you need to format JS code (in websocket/).

Translation contributions are also welcome.