We parse these for a living. Here is what a real Canvas export actually contains, folder by folder, and which parts tend to go missing on the way into a new platform.
An .imscc file is a ZIP archive in the IMS Common Cartridge layout. Rename it to .zip, unzip it, and everything is readable: XML for structure, HTML for content, and your original uploads sitting in a folder. Nothing is encrypted, and nothing is proprietary.
That openness is the whole point. A course you built over years is not locked to the platform you built it on, provided the destination bothers to read the format properly. The catch is that "properly" covers a wide range, and the difference shows up in the parts of your course you care most about.
The walkthrough below is based on real cartridges rather than the specification. The figures come from a genuine full-course export of a Digital Logic Design course: 107 files, about 5 MB, 18 assignments, 4 quizzes, 18 pages and 13 uploaded files.
Every cartridge has one, at the root. It does two jobs. The <organizations> section holds your module tree: modules in order, the items inside each one, their order, and their indentation level. The <resources> section maps every item to the file that holds its payload, tagged with a resource type.
Those types are how an importer knows what it is looking at:
| Resource type | What it is |
|---|---|
webcontent | An HTML page, or an uploaded file under web_resources/ |
imswl_xmlv1p1 | An external web link with its title and URL in a small XML file |
imsdt_xmlv1p1 | A discussion topic, with its body as HTML |
imsqti_xmlv1p2 | A quiz, as QTI 1.2 question XML |
associatedcontent/... | Canvas-specific metadata attached to another resource, most importantly quiz settings |
This folder is Canvas-specific and is where the interesting detail lives. An importer that reads only the manifest gets a structurally correct but noticeably flatter course.
course_settings.xml: course name, code and syllabus.module_meta.xml: richer than the manifest. It carries each module's published/unpublished state and the authoritative item ordering. If your imported course arrives with everything published that should have been draft, this file was ignored.assignment_groups.xml: your assignment groups and their weights. Lose this and every category weighting in your grading scheme has to be rebuilt by hand.files_meta.xml: metadata about the uploads.late_policy.xml: your late-submission rules.syllabus.html: the syllabus with its formatting.Each quiz gets its own hash-named folder holding two things: the QTI XML with the questions, and an assessment_meta.xml with the Canvas settings. That second file is easy to overlook and carries a lot:
time_limit, allowed_attempts and shuffle_answerspoints_possible and the quiz typescoring_policy: keep_highest, keep_latest or keep_average. This is the rule that decides which attempt counts, and rebuilding it by hand across a dozen quizzes is exactly the kind of tedium a migration is supposed to avoid.Question types are where QTI's age shows. multiple_choice_question, true_false_question and multiple_answers_question map cleanly and are the overwhelming majority of real quizzes. Essay, matching and dropdown types are less consistent, and some newer Canvas question types have no faithful QTI representation at all. A good importer skips those individually and tells you; a bad one drops them without a word. Always compare question counts after an import.
One more detail worth knowing: equations written in the Canvas equation editor are stored as images, not as maths. Unless the importer converts them back to LaTeX or MathML, your formulas arrive as pictures that cannot be edited, searched or resized.
Rubrics live in a single XML file, with criteria, rating levels and point values, plus the association back to the assignment each was attached to. In the cartridge we test against it is 38 KB of genuinely structured data.
The association is the fragile part. Canvas can record the link from either side, assignment-to-rubric or rubric-to-assignment, and an importer that handles only one direction leaves you with a correct pile of rubrics attached to nothing. If you have ever imported a course and found your rubrics present but unlinked, this is why.
Learning outcomes carry their title, description and mastery threshold. Whether they mean anything after the move depends on whether the destination has an equivalent concept. Plenty of platforms simply have nowhere to put them, so they are the most commonly discarded part of a cartridge. This matters greatly if you are running an outcome-based programme and that mapping represents accreditation evidence.
Your uploads, with the original folder structure preserved, including the slightly untidy folders Canvas creates on your behalf: Uploaded Media/, unfiled/, course_image/.
The subtlety here is links. Inside your pages, references to these files are not normal URLs. Canvas writes placeholder tokens: $IMS-CC-FILEBASE$ for an uploaded file, $WIKI_REFERENCE$ for another page, and $CANVAS_OBJECT_REFERENCE$ for other objects. An importer has to rewrite each one to point at the imported copy. Skip that step and your pages import looking perfect while every internal link is quietly broken, the kind of failure you discover in week three from a student.
No student submissions, no gradebook, no enrolments. This is not an omission to work around; it is the correct boundary. Your course package is your intellectual work, while student records belong to the institution that collected them and should not travel in a file you email to yourself.
If you are evaluating where to take your course, these five questions separate a real implementation from a checkbox:
module_meta.xml?)That last one matters most. Every cartridge contains something the destination cannot represent. A trustworthy import tells you what was dropped; a bad one does not.
ProfDesk shows you every module, page, file, quiz, assignment, rubric and outcome it found in your cartridge before it writes anything, then reports exactly what it could not map.
Rename the extension to .zip and unzip it with any standard tool. There is no encryption or proprietary container. It is an ordinary ZIP archive with an agreed internal layout.
No. SCORM packages a self-contained learning object designed to run inside a player and report progress back. Common Cartridge describes a whole course, including its structure, pages, files, quizzes, and links, for another platform to import as editable content. For moving a course between platforms, Common Cartridge is the relevant standard.
Canvas exports quizzes as QTI 1.2, which covers common question types cleanly but has no standard representation for some newer Canvas question types. A careful importer reports what it skipped instead of failing; a careless one drops questions silently. Always check the count after importing.
They are in the file. Rubrics include their criteria and rating levels, while outcomes include titles, descriptions, and mastery thresholds. Whether they survive depends entirely on whether the destination platform has an equivalent concept and bothers to map it. This is the most commonly dropped part of a cartridge.
You can, since it is just XML and HTML in a ZIP. It is rarely worth it. If you want to leave content behind, it is far safer to deselect it on the destination platform's import review screen than to hand-edit a manifest and risk breaking the resource references.