Choose a grading tool for your course before the quarter starts: nbgrader runs
inside Datahub, while Otter-Grader and the Gradescope autograder run on
Gradescope. If you choose nbgrader, grade in JupyterLab, the supported
interface.
nbgrader
nbgrader is the in-platform tool. Assignments are created, distributed,
collected, autograded, and manually graded inside Datahub, through the
Formgrader interface. Students complete and submit their work without leaving
the platform. Notebook Grading Workflow
describes the workflow.
Otter-Grader
Otter-Grader runs on the Gradescope autograder and grades Jupyter notebooks
submitted through Gradescope. It generates the notebook tests and produces PDFs
for manual grading.
Gradescope Autograder
The Gradescope autograder, used without Otter-Grader, is the general-purpose
option. It has native support for languages beyond Python, including C, C#,
Java, and MySQL. Neither nbgrader nor Otter-Grader offers this.
IT Services supports nbgrader. Questions about Gradescope or Otter-Grader
behavior go to Gradescope or the Otter community, not to IT Services, even for
a course hosted on Datahub. For a course using any of the three tools, IT
Services can help with the Datahub side: the image, the data, and the
environment students work in.
The tools differ mainly in where the work happens: on Datahub or on Gradescope.
|
Gradescope autograder |
Otter-Grader on Gradescope |
nbgrader |
| Supported by |
Gradescope |
Gradescope / community |
IT Services |
| Assignments created in |
Gradescope |
Gradescope |
Datahub |
| Students work |
Anywhere, usually locally |
Anywhere, locally or on Datahub |
On Datahub |
| Students submit |
A code artifact, via Gradescope |
A notebook, via Gradescope |
A notebook, via Datahub |
| Tests run on |
Gradescope's infrastructure |
Gradescope's infrastructure |
The Datahub cluster |
| Notebook unit tests |
No |
Yes, generated by Otter |
Yes |
| Other languages |
Yes, natively |
No |
No |
| Manual grading |
As a separate assignment |
Yes, from generated PDFs |
Yes, in the grading interface |
| Grades reach Canvas |
Through Gradescope |
Through Gradescope |
By manual CSV upload |
Selection Criteria
| Course requirement |
Effect on the choice |
| Work depends on the course image, its datasets, or its GPUs |
nbgrader keeps the work and the grading on Datahub |
| Students mostly work locally |
A Gradescope route is the better fit |
| Notebook assignments |
The Gradescope autograder on its own does not unit-test notebooks |
| A language other than Python |
Only the Gradescope autograder on its own supports other languages natively |
| Grades delivered to Canvas |
The Gradescope routes carry grades to Canvas. nbgrader does not, and course staff upload a CSV |
Exporting the Grades
describes the nbgrader export and CSV upload.
IT Services can advise on the choice and put course staff in touch with
instructors who have used each tool.
Getting Help lists contact routes.
Timing of the Choice
Assignment structure, test authoring, and student instructions all differ
between the tools, so changing tools mid-term is costly. Settle the choice
before the quarter starts, during the setup window. Course setup dates are on
When Access Starts & Ends.
nbgrader on Datahub
nbgrader runs entirely in the Jupyter interface, so the interface a grader or
student uses determines whether its controls are available.
Interface Support for nbgrader lists support
by interface.
Shared Grader Account
Each Datahub course is issued one shared grader account. nbgrader works only
from that account, not from an instructor's or a TA's own account, and everyone
who grades shares it. Formgrader appears only for the shared grader account,
whichever interface is in use.
Managing a Group describes the account.
Student Feedback
Before submitting, students can run Validate against the visible test
cells. After grades are released, students see a score breakdown for those
cells and any feedback that course staff generate.
Grades and Academic Records
Students' grades and academic records are protected information. The
platform's data rules in Policy apply to them as to
any other data.
Interface Support for nbgrader
| Interface |
nbgrader |
Notes |
| JupyterLab |
Yes |
The default since the 2024.4 images, and the interface to use for grading |
| Notebook 7 |
Yes |
Most of JupyterLab's features in a Notebook-style layout |
| NBClassic |
No |
Extensions such as nbgrader are not supported, and long-term support for the view itself is not guaranteed |
| RStudio |
No |
A separate IDE, opened from the JupyterLab launcher. Grading takes place in a Jupyter interface |
JupyterLab is the default interface and the supported interface for grading.
Experimental Interfaces
Notebook 7 and NBClassic are experimental. If either misbehaves, switch back to
JupyterLab and report the problem to
parasol@ucsd.edu. See
Moving Between Interfaces.
Interface Choice per Person
The interface is chosen per person, not per course. A student who has switched
to another interface does not see what a course handout describes.
nbgrader Controls in JupyterLab
| Task |
Location |
| Opening the grading interface (graders) |
Nbgrader → Formgrader |
| Marking up cells while editing an assignment notebook |
Nbgrader → Create Assignment, or the panel on the right-hand side of the notebook |
| Fetching and submitting assignments (students) |
Nbgrader → Assignment List |
Nbgrader → Create Assignment and the right-hand panel open the same
per-cell grading controls. See
Marking Up Cells.
The Assignment List is nearly identical to the one in the classic interface,
so instructions written for Notebook 6 still describe it correctly.
Moving Between Interfaces
From a notebook, the Open In dropdown offers Notebook 7 and NBClassic.
From the URL, /lab opens JupyterLab and /tree opens the Notebook-style tree
view:
https://datahub.ucsd.edu/user/<username>/lab
https://datahub.ucsd.edu/user/<username>/tree
Switching interfaces does not restart anything or lose work. When a grading
control is missing, switching interfaces is a safe first step.
Older Screenshots
Upstream nbgrader documentation shows Formgrader running in JupyterLab, which
matches the current interface. Older IT Services material, and any course
handout written before the 2024.4 images, shows Notebook 6: the classic
interface, without the JupyterLab panel on the left-hand side. The buttons and
the workflow are the same in both.
Report a problem with this page