Skip to main content

What is Wecode?

Wecode is a free and open source online judge platform designed specifically for programming courses. It provides a complete solution for instructors to create programming assignments, automatically grade student submissions, and manage course assessments. Wecode employs Docker to contain and execute user-submitted code in a secure sandboxed environment. The web interface is built with Laravel (PHP framework) while the judging backend is implemented in BASH.
Wecode is a complete rewrite of Wecode Judge, bringing modern features and improved architecture.

Key Features

Wecode provides a comprehensive set of features for managing programming courses:

User Management

  • Multiple user roles: Admin, head instructor, instructor, and student roles with appropriate permissions
  • Bulk user creation: Add multiple users at once
  • Fine-grained access control: Different permissions for different course roles

Secure Code Execution

  • Docker sandboxing: All submitted code runs in isolated Docker containers
  • Resource limits: Precise time and memory limits using Perl
  • Output size limits: Prevents excessive output from submitted code

Assignment Features

  • Multiple grading methods:
    • Output Comparison: Compare program output against expected results
    • Tester Code: Use custom test code to validate submissions
  • Problem descriptions: Support for PDF, Markdown, and HTML formats
  • Code templates: Create “fill in the blank” assignments with starter code
  • Late submission handling: Custom rules for grading late submissions
  • Submission queue: Manage and process submissions efficiently

Academic Integrity

  • Moss integration: Cheat detection using Stanford’s Moss (Measure of Software Similarity)
  • Similar code detection: Identify potential plagiarism across submissions

Results & Analytics

  • Scoreboard: Real-time leaderboard for competitive assignments
  • Excel export: Download results in spreadsheet format
  • Code download: Get all submitted codes in a zip file
  • Rejudge capability: Re-evaluate submissions with updated test cases

Notifications

  • Built-in notification system to keep students and instructors informed
  • Alerts for new submissions, grading completion, and important updates

Use Cases

Wecode is ideal for:

Academic Programming Courses

  • Automate grading for introductory programming classes
  • Manage assignments for data structures and algorithms courses
  • Support multiple programming languages in a single course

Competitive Programming

  • Host coding competitions with real-time scoreboards
  • Create practice problems for programming contests
  • Train students for ACM ICPC and similar competitions

Coding Practice

  • Provide students with a platform to practice programming
  • Offer instant feedback on code correctness
  • Track student progress over time

Architecture Overview

Wecode is built on a modern, scalable architecture:
┌─────────────────┐
│   Web Browser   │
└────────┬────────┘
         │ HTTPS

┌─────────────────┐
│ Laravel Backend │ (PHP 8.0.2+)
│   (Web Server)  │
└────────┬────────┘

    ┌────┴────┐
    ▼         ▼
┌────────┐ ┌──────────────┐
│Database│ │ Judge Engine │ (BASH)
│MySQL/  │ └──────┬───────┘
│Postgres│        │
└────────┘        ▼
           ┌──────────────┐
           │Docker Engine │
           │  (Sandboxed  │
           │  Execution)  │
           └──────────────┘

Core Components

Laravel Backend (/home/daytona/workspace/source/)
  • Built with Laravel 12.0+ framework
  • Handles user authentication, assignment management, and web interface
  • Manages submission queue and results storage
  • Uses PHP 8.0.2 or higher
Database Layer
  • Supports both MySQL and PostgreSQL
  • Stores users, assignments, submissions, and results
  • Configured via .env file
Judge Engine
  • BASH-based judging system
  • Communicates with Docker daemon via shell_exec()
  • Enforces time, memory, and output limits
  • Compares output or runs tester code
Docker Execution Environment
  • Isolated containers for each submission
  • Prevents malicious code from affecting the host system
  • Supports multiple programming languages

Security Model

The assignments and tester folders contain sensitive data including student submissions and test cases. These must be moved outside the public web directory after installation.
  • All code execution happens in Docker containers
  • PHP has controlled access to shell commands via shell_exec()
  • File system isolation prevents unauthorized access
  • User roles ensure proper access control

Supported Languages

Wecode supports multiple programming languages through Docker containers, including:
  • C/C++
  • Java
  • Python
  • And more (extensible through Docker images)

License

Wecode is released under the GPL v3 license, making it free to use, modify, and distribute.

Next Steps

Quickstart

Get Wecode up and running in minutes

Installation

Detailed installation and configuration guide

Build docs developers (and LLMs) love