Skip to content

Design decisions

Constraints that shaped NextJudge, not slogans.

Data in your Postgres. Auth you configure. No required third-party SaaS.

If ops isn’t your problem, hosted platforms win on convenience. NextJudge is for when the data and the judge must stay yours.

Web, API, and judge are separate processes over HTTP + RabbitMQ.

Code execution is slow and hungry. You don’t want compile spikes taking down the login page. The queue absorbs contest submission bursts; you scale judges horizontally without redeploying the API.

Cost: more containers at boot. Postgres and RabbitMQ must be healthy before anything else matters.

nsjail for every compile and run. No network, capped CPU/RAM, restricted filesystem.

That’s practical isolation, not a pentest pass. Patch judge images. Don’t put the judge on the same trust boundary as your payroll DB without network segmentation.

No seat limits. Rebrand it. Strip features. Ship it.

AreaLocationYou change
Languagessrc/judge/languages.toml + Docker imageCompiler, build script, API registration
APIsrc/data-layer/src/*.goRoutes, models, migrations
UIsrc/web/src/app/Pages, components
CLIsrc/cli/Download, local test, submit

We’d rather you touch one service than read all four to fix a bug in one.