---
title: "Dart Scorm"
description: "A small Dart package that lets a Flutter or Dart web application talk to the LMS that launched it. ScormAPI.findApi() walks the window hierarchy and then the opener hierarchy looking for an API object — preferring SCORM 2004's API_1484_11 and falling back to 1.2's API — after which initialize, getValue, setValue, commit, finish and terminate pass calls straight through to JavaScript."
canonical_url: "https://scorm-tools.com/tools/dart-scorm"
last_updated: "2026-10-31T10:22:02.331Z"
---

A small Dart package that lets a Flutter or Dart web application talk to the LMS that launched it. `ScormAPI.findApi()` walks the window hierarchy and then the `opener` hierarchy looking for an API object — preferring SCORM 2004's `API_1484_11` and falling back to 1.2's `API` — after which `initialize`, `getValue`, `setValue`, `commit`, `finish` and `terminate` pass calls straight through to JavaScript.

That is the whole surface, and for the problem it addresses that is the right size. Flutter web output is a canvas inside an iframe; finding the API adapter across frames is fiddly, and this package removes the fiddliness in a few lines. The example project is genuinely useful — it shows the iframe wrapper, the manifest and the zip layout that make a Flutter build launchable as a SCO.

What it will not do: validate anything. There is no CMI data model, no type or vocabulary checking, no packaging step, and no help with completion or scoring semantics — write the wrong element and the LMS, not the library, tells you.

For someone deciding today: this is a single-maintainer package with a handful of stars, last released in August 2023 to add Dart 3 and null safety, and untouched since. Because it is a thin binding over an API that has not changed since 2009, staleness costs less here than it would in a runtime. The real risk is Flutter's own web renderer moving underneath it, not SCORM.
