Performance-oriented contest management system for IOI like contest
Important
🚧 work in progress, please wait until first release
- 🪶Lightweight: Only 50MB for the binary(
plugin is very large) - ⚡Lighting fast: Using
Rust
+Grpc-Web
and correct implementation/algorithm - 🚀Easy to use: By using docker compose, you can setup the system in minutes
- ⏱️Accurate: Directly use cgroupv2(no docker in judger), Report time deviation to frontend
- 🔒Secure: Using nsjail to sandbox user submitted code
Tip
Because we use grpc-web(server-side stream), HTTP2 is recommended, otherwise users won't be able to see realtime submit update(it's still very usable)
- 🐳Scalable: When deployed in cluster, you can scale the system to satisfy reasonable request.
- 🗄️Extensible: You can add any programing language by placing a
*.lang
file inplugins
folder - 🔭 Powerful
metrics
/tracing
usingOpen-Telemetry
Copy docker/quickstart
file to your server and run docker compose up -d
, then open https://localhost in your browser.
login as admin@admin
and start play arounds.
- Copy
docker/production
from source code to your folder - run migration by running
docker compose up migration
- generate config for judger by starting the judger once, and edit config
- generate config for backend by starting the backend once
- download and extract plugin(language support) of your choice to
./plugins
If you prefer to use default config, you can skip step 3 and 4.
See wiki for more details.
- install following package:
- From system package manager:
protobuf-devel
,gcc
- From rustup:
rustup
,cargo
,just
- From their website:
docker
,docker-compose
Then start reading documents in subfolder of your interest.
you may need to run
just prepare
injudger
,backend
subfolder.
Tip
Set CONFIG_PATH
to change the path to config file, default value is config.toml
See wiki for more detail
MDOJ contain three service:
- Frontend: Render first time html, serve wasm.
- Backend: Serve both frontend and web client(chrome...)
- judger: run user-submitted code and return resource usage(and output)
Tip
See DEV.md
to understand how to get started.
See /backend/README.md
, judger/README.md
, frontend/README.md
for more detail.