Skip to content

Introduction

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.

The NextJudge participant dashboard showing submission statistics, a continue-solving prompt, and a contest spotlight.
The participant dashboard keeps practice activity and contests in one place.

Browse the shared problem set, search by title, compare difficulty, and open a problem directly in the solving workspace.

The NextJudge problem catalog with search, sortable columns, and difficulty labels.
The problem catalog provides a compact entry point into the practice set.

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.

The NextJudge split-screen solver with a problem statement and test cases on the left and the code editor on the right.
Participants can read, test, and submit without leaving the problem workspace.

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.

A completed NextJudge contest showing its schedule, participant count, status, and problem table.
Contest pages combine event context, problems, and competitive progress.

Submitting code does not execute it inside the web application.

  1. The web app sends the submission to the Go data layer.
  2. The data layer stores it as PENDING and publishes a RabbitMQ job.
  3. A Python judge worker compiles and runs the code inside an nsjail sandbox.
  4. The judge reports the verdict and test results to the data layer.
  5. The web app polls until the submission reaches a final verdict.

NextJudge service architecture

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.

ServiceResponsibility
WebAuthentication, problem browsing, code editor, contests, and standings
Data layerGo REST API, authorization, persistence, and submission enqueueing
JudgeCompilation and sandboxed execution of submitted source code
RabbitMQDurable work queue between the API and judge workers
PostgreSQLUsers, 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.

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.

  1. Getting Started —> launch the stack and verify each service.
  2. Key terms —> understand problems, test cases, submissions, and verdicts.
  3. Design decisions —> learn why the system is split into services.
  4. Development guide —> work on individual components.
  5. API reference —> integrate with the data layer directly.