Self-Hosted Submission Server

A full-featured Flask server you run on your own infrastructure.

The PyAutoGrader submission server gives you a complete dashboard for managing student submissions, analyzing grades, detecting plagiarism, and exporting to your LMS. Run it on your own machine or campus server - your data stays on your infrastructure.

Quick Start

3 steps
1

Download

Get the server executable for Windows, macOS, or Linux from the Downloads page.

2

Configure

Edit server_config.json to set your password and API key. Or pass them as CLI flags.

3

Run

Launch the executable. Open http://localhost:5000 and log in. SQLite database created automatically.

Features

Everything You Need to Manage Submissions

📊

Analytics Dashboard

Score distribution charts, submission trends over time, assignment difficulty analysis, student progress tracking, and at-risk student identification. Filter by course, section, or semester. Every chart updates in real time as submissions come in.

🔍

Plagiarism Detection

Pairwise code similarity analysis across all submissions for an assignment. Four metrics: code similarity (comments stripped), comment similarity, combined weighted score, and comment-to-code ratio. Color-coded severity (red 80%+, orange 50-79%, green below 50%) with a side-by-side diff view and syntax highlighting.

🔎

Code Search

Search across all submitted code for specific patterns. Detect AI-generated code, verify required constructs, or investigate academic integrity.

📋

Submission Browser

Browse all submissions filtered by course, assignment, or student. Click into any submission to see full test results and the student's code. View modes: all, latest per student, or highest per student.

👥

Roster Management

Upload CSV rosters, add students manually, sync unmatched submissions. Duplicate detection and late adds. Expose a REST API for the student app to fetch rosters live.

📅

Assignment Deadlines

Set per-assignment cutoff dates with per-student overrides for accommodations. Late submissions flagged with badges. Exports include an option to exclude late work.

📤

Canvas Export

Canvas-compatible CSV with one row per student, one column per assignment. Import grades directly into Canvas Gradebook. Standard CSV export also available.

🏫

Class Organization

Organize by course, section, and semester. Drill into any class for scoped analytics, submissions, roster, assignments, and code search.

🔗

Require Student Submission

Instructors can configure assignments so grading is restricted unless the student is connected to the server. This ensures all results flow through the server for tracking, analytics, and plagiarism detection. Students who are offline cannot complete grading until they connect.

Infrastructure

Hosting and Database

Hosting Options

On-Campus (HTTP)

For private or campus-only networks, run over plain HTTP. No certificate setup needed. Ideal for lab environments and closed university networks.

Recommended for public access

Caddy Reverse Proxy (HTTPS)

Caddy automatically obtains and renews Let's Encrypt TLS certificates. Zero manual certificate management. Just point your domain and run.

Built-in TLS (HTTPS)

Pass your own certificate and key files directly to the server via CLI flags or config. For environments where you manage your own certs.

Database Options

Default - best for most

SQLite

Zero setup, single file. Creates submissions.db automatically. Handles thousands of submissions. Back up by copying one file.

PostgreSQL

For multi-server load balancing, high concurrency during exam spikes, or centralized backups with pg_dump and WAL archiving.

Under the Hood

Rate Limiting 10 submissions per 60 seconds per IP. Protects against flooding.
Webhook Notifications POST on each submission for external integrations and custom workflows.
Duplicate Detection SHA-256 hashing catches identical resubmissions automatically.
REST API Full API for submission, health checks, and roster management.
File Storage Student code organized by course and assignment in a clean folder structure.
3-Layer Config CLI arguments override config file, which overrides defaults. Flexible deployment.

Get the Server

Download the executable, set a password, and run. Full setup instructions in the documentation.

Download Setup Documentation