Open-source project
hydro-dev/Hydro avatar
hydro-dev/Hydro

Hydro: Scalable Online Judge Platform with Multi-Domain Support

Hydro - Next generation high performance online-judge platform - 新一代高效强大的信息学在线测评系统 (a.k.a. vj5)

7,033 stars482 forksTypeScriptAGPL-3.0

At a glance

What is it?
A TypeScript-based programming contest platform supporting multiple problem types and contest formats. Scales to thousands of users with a stateless architecture and runs on Raspberry Pi to enterprise servers.
Who is it for?
Hydro is for educators and competitive programming communities who want to run a contest platform without vendor lock-in or significant ops burden. Smaller schools and clubs starting with a single instance will see immediate value in multi-domain support and cross-domain problem copying.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 26, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Stateless architecture and automatic test data caching

Hydro is an online judge built to host programming contests and assignments. It runs contests in multiple formats: ACM/ICPC (with optional leaderboard freezing), OI, IOI, and a Codeforces-style Lejude format, plus homework assignments. What separates it from single-institution systems is its stateless architecture, which means you can add or remove judging servers as load changes without stopping the system. Unlike some older platforms, Hydro manages test data caching across judging servers automatically, so a new judging machine comes online ready to grade without manual data synchronization. A school running dozens of contests a year can do so on commodity hardware, and a coaching organization can set up separate spaces for each division without running multiple systems. The last push was on 2026-09-25, indicating active maintenance. The system itself is written in TypeScript.

One-click installation and multi-space organization

Hydro installs via a single shell command. According to the README, paste the installation command into the console and it sets up the entire system. After installation, you register the first user and they automatically become the super admin. The README confirms support for major Linux distributions, ARM64 devices (Raspberry Pi, Apple M1/M2), and recommends Debian 12. Run the following command to install:

sh
LANG=zh . <(curl https://hydro.ac/setup.sh)

Once installed, Hydro lets you create separate domains (spaces) for different classes, schools or competition tiers. Spaces isolate data by default except for administrators and users, and each space gets its own admin assigned. Problems can be copied across domains without duplicating storage; the system tracks a single copy internally. This architecture lets a coaching network run one Hydro instance serving many groups without a complex permissions model. For those unfamiliar with Linux administration, the project also provides a hosted version at hydro.ac that requires no setup.

Problem types and the breadth of supported contest formats

Hydro accepts all standard problem types: traditional I/O, Special Judge, file input/output, answer submission, interactive (judge queries the program), function submission (judge calls your code directly), and multiple-choice/fill-in-the-blank. The README notes that with the right runtime environments, Hydro can even invoke turtle graphics and compare output to reference images, or invoke GPUs for machine learning evaluation. A rich problem library comes with Hydro through an import system. You can import problems from HUSTOJ (FPS/XML format), QDUOJ (compressed archive), or through VJudge, which acts as a bridge to external platforms: Codeforces, Luogu (with paid authorization), UOJ, HDU Online Judge, CSGOJ (Guangdong and Hunan provincial contest platform), SPOJ, POJ, YACS (Shanghai Computer Society platform), and others. The README also documents two Chinese textbook problem libraries: Yibengtong (Programming Enlightenment) and Shengru Qianche (Getting Started with Competitive Programming). A free Hydro problem bank exists for immediate use.

Contest formats and flexible participation

Hydro supports multiple contest formats beyond ACM/ICPC. In OI (Olympiad Informatics) and IOI (International Olympiad Informatics) formats, students can submit solutions after the contest ends for a score that appears on the leaderboard next to their in-contest results. In OI and IOI formats, Hydro also supports flexible time functionality, allowing students to choose when they start participating within a set window. For example, a contest could run from 9 AM to 5 PM, but each student chooses their own five-hour window within that time frame. The Lejude format mimics Codeforces styling. Homework assignments get their own interface separate from contest modes.

Granular permissions and configurable languages

Hydro tracks permissions at fine grain: you assign access by contest or assignment, or create user groups (student divisions) and assign to groups. According to the README, permission nodes control what each group can do. Language support is not hardcoded. Hydro reads programming language configuration from files; if you can express the compile and run commands, Hydro will judge in that language. This means adding Python, Rust, Go or a custom DSL is configuration, not code. The README explicitly notes that language settings use configuration files, making it trivial for system administrators to add new languages without modifying the source code.

Backup, restore and upgrade path

Data backup and restore use Hydro's command-line tools. Run `hydrooj backup` to back up all system data, and `hydrooj restore <filename>` to import it. According to the README, the process is automated with no manual intervention. Hydro publishes all historical versions as upgradeable (the README states every version can smoothly upgrade to the latest), so you can deploy an old version, run it for years, then upgrade without rebuilding from scratch. Incremental backup is also supported using restic.

Modular architecture and hot-swappable features

Hydro uses a modular plugin system to extend functionality. According to the README, you can modify features via plugins while keeping the system upgradeable. All plugins and development follow the documentation in the TypeScript development guide. This decoupling means you can add custom contest logic, scoring rules, notification integrations, or specialized scoreboard displays without forking the main codebase. The plugin system decouples development, allowing the core system to upgrade while custom extensions coexist. The repository structure includes framework/, packages/, and plugins/ directories that enable this modularity.

AGPL-3.0 license and its implications

Hydro is licensed under AGPL-3.0, not MIT or Apache. AGPL requires that if you modify Hydro and offer it as a service over the network, you must provide source code to users. This is stricter than typical open-source licenses; it affects any institution that runs a customized Hydro instance and lets students access it. Organizations comfortable publishing their modifications can use Hydro freely. Organizations that need to keep contest logic proprietary should avoid it. The license also means that all historical versions can be upgraded to the latest, supporting long-term deployments without vendor lock-in.

Editorial conclusion

Hydro is for educators and competitive programming communities who want to run a contest platform without vendor lock-in or significant ops burden. Smaller schools and clubs starting with a single instance will see immediate value in multi-domain support and cross-domain problem copying. Choose a different system if you need to run proprietary closed-source plugins, or if you cannot commit to the AGPL-3.0 license. Verify compatibility with your chosen Linux distribution and test the one-click installer on a non-production machine before rolling out to students.

Frequently asked questions

How do I install Hydro?

According to the README, paste the installation command into a console: LANG=zh . <(curl https://hydro.ac/setup.sh). It supports Debian 12 and other mainstream Linux distributions, as well as ARM64 devices. The first user registered after installation automatically becomes the super admin. For users unfamiliar with Linux, a hosted version is available at hydro.ac.

Can I run Hydro on a Raspberry Pi?

Yes. According to the README, Hydro runs on ARM64 devices including Raspberry Pi and Apple M1/M2 machines. Installation is the same one-click process as on x86_64.

What problem types does Hydro support?

Hydro supports traditional I/O, Special Judge, file I/O, answer submission, interactive problems, function submission, and multiple-choice questions. The README notes that with additional runtimes, it can invoke GPU-based machine learning evaluation and turtle graphics.

Can I import problems from other online judges?

Yes. Hydro imports from HUSTOJ, QDUOJ, and via VJudge, which bridges Codeforces, Luogu, UOJ, HDU Online Judge, CSGOJ, SPOJ, POJ, YACS, and others. You can also use a free Hydro problem library.

What contest formats does Hydro support?

Hydro supports ACM/ICPC (with optional leaderboard freezing), OI, IOI, Lejude (Codeforces-style), and homework assignments. In OI and IOI formats, students can resubmit problems after the contest for a score that appears on the leaderboard. Flexible time functionality allows students to choose their participation window within the contest period.

How do I add a programming language to Hydro?

Language configuration in Hydro is file-based, not hardcoded. To add a language, specify the compile and run commands in the configuration file. The README explicitly notes this approach makes adding custom languages a configuration task, not a code modification.

Official sources

  1. hydro-dev/Hydro on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/hydro-dev-hydro.svg)](https://hysenlabs.com/projects/hydro-dev-hydro)