Skip to content

Settings Reference

Both app settings and course documents are stored as JSON files and validated on every read and write using Zod schemas. Invalid files are rejected with path-level error messages.

FieldTypeDescription
kind"repo-edu.app-settings.v1"Schema discriminator
schemaVersion1Schema version
activeCourseIdstring | nullCurrently selected course
activeTab"roster" | "groups-assignments"Last active UI tab (default: "roster")
appearance.theme"system" | "light" | "dark"Color theme
appearance.windowChrome"system" | "hiddenInset"Window title bar style
appearance.dateFormat"MDY" | "DMY"Date display format
appearance.timeFormat"12h" | "24h"Time display format
window.widthnumberWindow width in pixels (default: 1180)
window.heightnumberWindow height in pixels (default: 760)
lmsConnections[]ArrayLMS provider connections
lmsConnections[].namestringConnection display name
lmsConnections[].provider"canvas" | "moodle"LMS provider
lmsConnections[].baseUrlstringLMS API base URL
lmsConnections[].tokenstringAPI authentication token
lmsConnections[].userAgentstring?Optional custom user agent
gitConnections[]ArrayGit provider connections
gitConnections[].idstringUnique connection identifier
gitConnections[].provider"github" | "gitlab" | "gitea"Git provider
gitConnections[].baseUrlstringProvider API base URL
gitConnections[].tokenstringPersonal access token
lastOpenedAtstring | nullISO timestamp of last app open
rosterColumnVisibilityRecord<string, boolean>Roster table column visibility
rosterColumnSizingRecord<string, number>Roster table column widths
groupsColumnVisibilityRecord<string, boolean>Groups table column visibility
groupsColumnSizingRecord<string, number>Groups table column widths
FieldTypeDescription
kind"repo-edu.course.v1"Schema discriminator
schemaVersion1Schema version
idstringUnique course identifier
displayNamestringHuman-readable course name
revisionnumberMonotonically increasing save counter for compare-and-swap writes
lmsConnectionNamestring | nullReferences an LMS connection in app settings by name
gitConnectionIdstring | nullReferences a Git connection in app settings by ID
organizationstring | nullGit organization or group for repository operations
lmsCourseIdstring | nullLMS-side course identifier for imports
rosterRosterStudents, staff, groups, group sets, assignments (see below)
repositoryTemplateRepositoryTemplate | nullDefault template for repository creation
repositoryCloneTargetDirectorystring | nullDefault local directory for clone operations
repositoryCloneDirectoryLayout"flat" | "by-team" | "by-task" | nullDefault clone directory layout
updatedAtstringISO timestamp of last save
FieldTypeDescription
connectionRosterConnection | nullHow the roster was populated (see below)
studentsRosterMember[]Student members
staffRosterMember[]Staff members (instructors, TAs)
groupsGroup[]All groups across all group sets
groupSetsGroupSet[]Named collections of groups
assignmentsAssignment[]Course assignments

Discriminated union on kind:

KindFieldsDescription
"canvas"courseId, lastUpdatedImported from Canvas LMS
"moodle"courseId, lastUpdatedImported from Moodle
"import"sourceFilename, lastUpdatedImported from CSV file
FieldTypeDescription
idstringUnique within the roster
namestringDisplay name
emailstringPrimary email
studentNumberstring | nullInstitution student number
gitUsernamestring | nullGit provider username
gitUsernameStatus"unknown" | "valid" | "invalid"Verification result against Git provider
status"active" | "incomplete" | "dropped"Current enrollment status
lmsStatusMemberStatus | nullStatus from LMS (may differ from local)
lmsUserIdstring | nullLMS-side user ID for sync matching
enrollmentTypeEnrollmentType"student", "teacher", "ta", "designer", "observer", "other"
sourcestringOrigin of this member record

Discriminated union on kind:

KindFieldsDescription
"remote"owner, name, visibilityRepository on the Git provider
"local"path, visibilityLocal directory

Visibility: "private", "internal", or "public".