itouOJ
Self-hosted online judge (OJ) for programming contests with Next.js frontend and sandbox-runner judging engine.
Ficha actualizada 23 sept 2026, 3:30 · upstream 23 sept 2026, 3:23 · release app-v1.2.0
Qué es itouOJ
Descripción editorial construida a partir del repositorio, su documentación y sus señales de mantenimiento.
itouOJ is a self-hosted online judge (OJ) built with Next.js, designed to host competitive programming problems. The system features a custom Linux sandbox runner that executes C/C++, Python, and JavaScript submissions within isolated namespaces using cgroup v2 and seccomp-bpf for security. Java submissions continue to run on Piston. The platform supports contest management, problem submission and review, recognition practice with APCS past papers, live judging with real-time scoring, and a Windows offline client.
- Hosting competitive programming contests (ICPC regional, IOI training) with full self-hosted control
- Providing an online judge for students to submit and receive feedback on C/C++, Python, and JavaScript problems
- Running recognition practice exercises (識讀) using APCS past exam papers without requiring a paid cloud platform
- Hosting offline contest rooms where participants can submit code locally before joining a live judging session
- Providing an educational resource for students to solve programming problems with immediate feedback and explanations
- Deploying a lightweight, self-contained judge that runs entirely on local hardware without external dependencies
- Self-hosted sandbox runner with Linux namespace isolation, cgroup v2 resource limits, and seccomp-bpf syscall filtering for C/C++/Python/JavaScript
- Recognition practice feature (識讀) includes APCS past exam papers plus the C/Python 125-question bank totaling 391 questions across 15 clusters with instant answer checking
- Live judging with per-test-case time and memory display, AC/WA/TLE/MLE/RE/CE scoring modes, and per-contest leaderboard freeze functionality
- Support for both live web judging and Windows offline client (itouOJ-Submit.exe) that handles batch uploads, local test runs, and clock calibration
- Android native app built with Capacitor 8 with a fixed dark theme layout distinct from the web interface
- Full admin panel for problem management, proposal review, contest organization, course creation, recognition cluster management, tag assignment, user role control, and announcements
- The sandbox runner requires manual configuration of cgroup v2 parameters and seccomp-bpf rules; no out-of-the-box ready-to-use binary
- Java submissions still rely on the external Piston Docker container rather than a self-hosted judge
- Recognition practice questions are limited to APCS past papers plus the C/Python 125-question bank, with no support for other problem sources
- The Windows offline client has no built-in test runner or code execution environment; it only handles batch submission and clock calibration
- No automatic test case generation is available — all sample tests must be manually provided by the administrator
- Memory multipliers (3x for Python, 2x for JavaScript) are applied to problem limits but do not increase the actual memory limit of the sandbox
Perfil de infraestructura
Estimación inicial derivada del repositorio y de los servicios detectados.
Despliegue detectado
Qué señales reales de instalación hemos encontrado.
Deploy Next.js on a Linux server with Node.js runtime. Install and configure the sandbox-runner binary at /usr/local/bin/sandbox-runner (or equivalent path). Configure environment variables: DATABASE_URL for SQLite, AUTH_SECRET for JWT signing, PISTON_URL for Java container access, SANDBOX_URL for the C/C++/Python/JS judge endpoint, JUDGE_WORKER_SECRET for worker isolation. Use a reverse proxy (nginx) to serve Next.js on port 3000 and expose sandbox-runner on 8090. For production, use HTTPS with Cloudflare or similar. The Android app requires a Capacitor build configured with the live site URL as its App URL.
Stack y dependencias
Componentes inferidos a partir de manifests, configuración y documentación.
Puede sustituir a
Relaciones detectadas por el análisis del repositorio y su categoría.
Experiencia real de la comunidad
Ayuda a contrastar la estimación automática con instalaciones reales.