Group Assignments & Student Schedules
Attach an assignment to a Canvas group set, give batches of students their own due dates, and let the editor fill in the settings block for you.
New to CanvasManager? Start with Getting Started.
Overview
This release adds two things you could not express in a course file before, plus a set of editor helpers that make the frontmatter block faster to write.
Canvas stays the source of truth for who is enrolled and how groups are arranged. CanvasManager reads that information when a course is first opened after the server starts, keeps it in memory, and never writes it to disk. Course files only ever contain Canvas ids, so nothing identifying a student lands in your repo.
Group assignments
Canvas organizes student groups into group sets (People › Groups in Canvas; the API calls them group categories). An assignment is attached to a set, not to one group, and every group in that set works on it. That is exactly the model the file uses.
The Groups section
Course settings has a new read-only Groups section. One tab per group set, one column per group, and a dashed Not in a group column for anyone unassigned. It is there so you can see who is where without leaving the app; creating and editing groups stays in Canvas, and the Manage Groups in Canvas button takes you straight to that page.
Sync Groups from Canvas re-reads sets, groups and memberships. Use it after you change groups in Canvas or when a student joins late.
GroupSet in the file
Two new lines go in the settings block above the ---. AssignmentGroupName still means the grading category (Assignments, Quizzes, Final Project); GroupSet is the student group set.
UnlockAt:
LockAt: 12/16/2026 23:59:00
DueAt: 12/16/2026 23:59:00
AssignmentGroupName: Final Project
GroupSet: Project Teams
GradeIndividually: false
SubmissionTypes:
- online_upload
GroupSetis the set's name as it appears in Canvas (case does not matter).GradeIndividually: falsegives the whole group one grade.truelets you grade each member separately. Leave it out and it defaults to false.- Files without these lines are written exactly as before, so nothing changes for existing assignments.
Put the cursor after GroupSet: and the sets from Canvas appear, with group and student counts to tell them apart. GradeIndividually offers true and false the same way.
The preview panel gains a Group Set row that spells out the grading choice.
What Canvas gets
Add to canvas and Update in Canvas send the group category and the grade-individually flag along with everything else. Removing GroupSet from a file and updating clears the group setting in Canvas. The calendar's sync check compares both values, so an assignment whose file and Canvas disagree shows the red out-of-sync border with a message saying which one differs.
Canvas refuses to change an assignment's group set once it has submissions. If you see that error on Update, the fix is in Canvas, not in the file.
Quizzes are not group assignments in Canvas, so GroupSet is assignment-only.
Per-student schedules
Some assignments are the same for everyone but happen on different days for different people: a lightning talk, a demo slot, a presentation rotation. A Schedule block lists which students are due on which date. Everyone not listed keeps the assignment's normal DueAt.
The Students section
Course settings also has a new Students section: the Canvas roster with name, email and Canvas id. It loads the first time the course is opened after the server starts, and Sync Students from Canvas reloads it. The Schedule autocomplete reads from this list.
The Classroom 50 section's own Sync Roster with Canvas button is unchanged; it does a different job (matching GitHub classroom members to Canvas by email).
The Schedule block
DueAt: 12/11/2026 23:59:00
AssignmentGroupName: Assignments
Schedule:
09/18/2026:
- 100202
- 100203
- 100208
10/09/2026:
- 100211
- 100214
- Each date is indented two spaces and ends with a colon. Dates are
MM/DD/YYYY; a single-digit month or day is accepted and normalized. - Each student is a Canvas id on a
-line under a date. The id is the only thing stored; the editor shows the name beside it while you work. - A date with no students is fine while you are filling the schedule in, and a student may appear under only one date.
- Older files that used
Last, FirstorLast, First (id)still read correctly, but the picker always inserts ids from now on.
Storing ids instead of names keeps student names out of version control. Someone with the repo but without Canvas access to the course cannot tell who is enrolled from these files.
Building a schedule in the editor
You rarely type any of this by hand. In the editor the grey names after each id are inlay hints drawn from the roster; they are not in the file.
Adding a date. On a blank line indented two spaces under Schedule:, a date-only picker opens. Pick a day and the editor writes the date key, drops you onto a new student line, and opens the student list.
Adding students. Under any date, press Enter after the last student (or type - ) and the list appears. It only shows students who are not yet scheduled anywhere in this file, so it shrinks as you fill the semester. Type part of a name or an id to filter. Choosing a student inserts their id.
Editing a date. Put the cursor on an existing date line and the picker reopens on that month.
Mistakes are flagged. An id that is not a student in the course gets a red squiggle with an explanation, and a student listed twice gets a yellow one. The file still saves, but publishing stops with the same message so nothing half-right reaches Canvas.
On the calendar
A scheduled assignment shows up on its normal due date as usual, and once more on each schedule date as a pill with a dashed border and a count. Hover to see who is due that day. Dragging a dashed pill to another day moves just that batch; dragging the solid pill moves the assignment's own dates as before.
What Canvas gets
- Each date becomes one Canvas assignment override for those students, due on that date at the assignment's usual time of day.
- If the assignment has a
LockAt, each override locks the same distance after its due date that the assignment's own lock sits afterDueAt.UnlockAtis carried over unchanged. - Students not in the schedule keep the assignment's
DueAt, so the assignment is still visible to everyone. - Updating replaces the assignment's per-student overrides with what the file says. Section-level overrides you made in Canvas are left alone.
- The calendar's sync check now compares overrides too. A batch whose override is missing or on a different date shows the red border, and the hover card says why.
Editor helpers
These work in every file type that has a settings block: assignments, quizzes and pages.
Date and time picker
Put the cursor on a DueAt, LockAt, UnlockAt or DueDateForOrdering line and the picker opens beside it. Every click writes the line immediately; there is no OK button. Escape or close hides it until the cursor leaves the line.
- The month grid opens on the current value, or on the semester start when the field is empty.
- Hour, minute and AM/PM selects write on change. default time snaps to the course's default due time.
- −1 week, +1 week and next class day shift the date and keep the time. next class day skips holidays.
- clear empties the field, which is how you remove an unlock or lock date.
Key and value suggestions
Suggestions open on their own when the cursor lands somewhere they apply, and Ctrl+Space reopens them anywhere on the line.
| Where | What you get |
|---|---|
A blank line above the --- | Keys this file type accepts but does not have yet. Picking one inserts Key: and, where it makes sense, opens the value list. |
AssignmentGroupName: / AssignmentGroup: | The course's grading categories. |
GroupSet: | Group sets from Canvas, with counts. |
GradeIndividually:, ShuffleAnswers:, ShowCorrectAnswers:, OneQuestionAtATime: | true / false |
- under SubmissionTypes: | The Canvas submission types. |
- under AllowedFileUploadExtensions: | The course's default upload types first, then common ones. |
- under a Schedule date | Students not yet scheduled in this file. |
The help panel (the ? button at the bottom left of the editor) documents the new keys and lists the course’s group sets. Search it for group or schedule to jump straight to these topics.
Things to know
- The roster lives in server memory. Restarting the container reloads it on first use. If someone enrolls mid-semester, press Sync Students in course settings and their name shows up in the picker.
- No group sets, no list. If a course has no group sets in Canvas yet, the
GroupSetline simply offers nothing. The Groups section explains and links to Canvas. - Ids need the app. A schedule file is not readable on its own; the names come from Canvas at display time. That is the trade for keeping names out of the repo.
- First publish, check once. After the first time you publish a scheduled or group assignment, open it in Canvas and glance at the Assign to section.
- Word completions are off. The editor no longer suggests words from the document while you type the body; only the frontmatter suggestions remain.
Cheat sheet
UnlockAt:
LockAt: 12/11/2026 23:59:00
DueAt: 12/11/2026 23:59:00
AssignmentGroupName: Assignments # grading category
GroupSet: Project Teams # Canvas group set (optional)
GradeIndividually: false # true = each member graded separately
Schedule: # per-student due dates (optional)
09/18/2026:
- 100202 # Canvas ids; the editor shows names
- 100203
10/09/2026:
- 100211
Classroom50Slug:
SubmissionTypes:
- online_text_entry
AllowedFileUploadExtensions:
---
Description in markdown.
## Rubric
- 5pts: Clear explanation of what failed and why