The competitive programming platform and command-line interfaceβfor everyone.
NextJudge is a suite of services, tools, and applications for creating programming platforms (framework), facilitating programming contests (cli tool), and showcasing programming prowess (platform). Our primary product is the nextjudge.org platform, built with competitive programming in mind.
The NextJudge toolchain comprises a secure code-execution engine, an API gateway, a web application, a CLI tool, and a data layer, all of which are 100% self-hostable.
As avid programmers, we were tired of competitive programming platforms, interview-prep sites, and educational learning tools providing seemingly everything, except the core experience of what we want to do. Programming, that is.
If you want to prepare for your Jane Street interview, you have to head over to leetcode.com, if you want to practice typescript exercises, you have to head to typehero.dev, and finally, if you want to participate in competitive programming competitions, you have to head to codeforces.com.
We're building NextJudge to be a platform, tool, and experience for everyone. Want to host a mock compeition for ICPC practice? It's no problem with NextJudge. Don't like our UI? You can host your own instance for your own use cases. And finally, want to add new features? We're 100% open source, of course. No matter what your use case is, NextJudge has something for everyone.
NextJudge is a monorepo with the following structure:
.
βββ src
β βββ cli - command-line interface for interacting with the platform
β βββ data-layer - HTTP wrapper over underlying database
β βββ judge - runs and judges code submissions
β βββ web - web application for the platform
βββ deploy.sh - script to deploy all services using Docker compose
βββ build-frontend.sh - script to build the frontend application
βββ dev-deploy.sh - script to deploy all services using Docker compose with hot reload
βββ fully-reset.sh - script to flush the database and remove all volumes
βββ docker-compose.yml - Docker compose file for running all services
βββ docker-compose.dev.yml - Docker compose file for running all services with hot reload
βββ CONTRIBUTING.md - guidelines for contributing to the project
βββ LICENSE - MIT License
βββ CODE_OF_CONDUCT.md - guidelines for community behavior
Tip
You can run the .sh scripts in the root directory with ./name-of-script.sh.
The top-level ./deploy.sh will instantiate all modules using Docker compose internally.
./deploy.shTo run the services locally while developing, you can use Docker with hot reload.
The source code is mounted, and a process is set up to detect changes and restart the service when you save files.
You can run the following script to start the services:
./dev-deploy.shTo flush the database and remove all volumes (completely refreshing the Docker environments), run the following script:
./fully-reset.shClone the repo:
git clone https://github.com/NextJudge/NextJudge.gitCurrently, while we are in primary stages of development, we are not accepting contributions.
However, we will be opening up the project for contributions in the near future. Community contributions are what made us decide to open-source the project in the first place. We're excited to make this project a community-driven project.
Until then, please read CONTRIBUTING.md for our code of conduct and the process for submitting both pull requests and issues to the project.