Plugins implement QuestionPlugin from @assessment-os/core (validateConfig, grade, optional React Builder / Renderer / Reviewer).
Multiple choice; single or multi-select. Option labels support rich text (TipTap). Graded by exact option-id match.
Two modes:
unit— pytest / Jest / PHPUnit / JUnit / GoogleTest (preferred for callable APIs)io— stdin/stdout cases
Also supports multi-file workspaces (starterFiles + entryFile), time/memory limits, proportional scoring, and optional Python I/O checkerCode. Details: [[Coding-Runner]].
SQLite only. Config: schemaSql, seedSql, visible/hidden tests with expectedRows. Candidates submit a SELECT; hidden sets grade on submit. Hidden tests are stripped for candidates.
gradingMode: exact | contains_any | contains_all | manual. Manual always needs recruiter review.
Candidate records via webcam (MediaRecorder) and/or uploads a video file (configurable). Stored as an asset-backed answer (assetId). Graded as manual review (auto score 0 + needsReview). While the attempt is in progress, candidates can retake/replace; after question submit, the answer is locked like other types. Playback on session review.
Config: maxDurationSeconds (default 120), maxBytes (default 50MB), allowUpload (default true). Answer: { assetId, contentType, filename?, durationMs?, byteSize? }.
design and file packages remain stubs for a later plugin track (see [[Roadmap]]).