Meet NextJudge, a self-hosted platform for programming problems, contests, and sandboxed judging.
NextJudge is an open-source competitive programming platform for running coding contests and giving programmers a place to practice. You host the stack, control the problems and contests, and keep the data on your own infrastructure.
The platform combines a focused participant experience with a separate judging pipeline: contestants browse problems, write and run code, submit solutions, and follow contest standings while judge workers compile and evaluate submissions outside the web process.
What you can do
Section titled “What you can do”Practice programming problems
Section titled “Practice programming problems”Browse the shared problem set, search by title, compare difficulty, and open a problem directly in the solving workspace.
Solve and submit in the browser
Section titled “Solve and submit in the browser”The solving workspace places the problem statement, sample test cases, language selector, and Monaco-powered code editor together. Run executes code against custom input; Submit sends it through the formal judging pipeline.
Host timed contests
Section titled “Host timed contests”Contests group problems into a scheduled event with registration, participant counts, problem status, clarifications, and standings. Organizers manage contests and problems through admin-only routes.
How judging works
Section titled “How judging works”Submitting code does not execute it inside the web application.
- The web app sends the submission to the Go data layer.
- The data layer stores it as
PENDINGand publishes a RabbitMQ job. - A Python judge worker compiles and runs the code inside an nsjail sandbox.
- The judge reports the verdict and test results to the data layer.
- The web app polls until the submission reaches a final verdict.

This separation keeps expensive, untrusted code execution away from user-facing requests and lets operators add judge workers when submission volume grows. Read Core components for the service boundaries and Judge service for execution details.
What you deploy
Section titled “What you deploy”| Service | Responsibility |
|---|---|
| Web | Authentication, problem browsing, code editor, contests, and standings |
| Data layer | Go REST API, authorization, persistence, and submission enqueueing |
| Judge | Compilation and sandboxed execution of submitted source code |
| RabbitMQ | Durable work queue between the API and judge workers |
| PostgreSQL | Users, problems, test cases, submissions, and contest data |
The web UI runs on http://localhost:8080 in the standard local setup. The data layer listens on port 5000; Postgres and RabbitMQ remain supporting infrastructure.
Why self-host it
Section titled “Why self-host it”NextJudge is useful when control matters more than a managed service:
- Run private classroom, club, hiring, or internal contests.
- Keep participant data and proprietary problems on your infrastructure.
- Customize the interface, authentication, languages, and integrations.
- Scale judging independently by adding workers to the queue.
- Use the REST API and CLI in your own workflows.
The tradeoff is operational responsibility. You maintain the database, message queue, judge images, backups, monitoring, and network isolation. NextJudge provides the software rather than a managed hosting tier.
Start here
Section titled “Start here”- Getting Started —> launch the stack and verify each service.
- Key terms —> understand problems, test cases, submissions, and verdicts.
- Design decisions —> learn why the system is split into services.
- Development guide —> work on individual components.
- API reference —> integrate with the data layer directly.