Being able to leave a course and return later without losing progress is one of the most user friendly features of modern e learning. In SCORM 1.2, this capability is not complex. It is built on two simple fields that work together. One stores the state. The other tells the LMS what to do with it. This minimal design gives content developers full control without creating LMS dependencies or vendor specific behaviors.
🧠Why Bookmarking Matters
Learners often complete training in multiple sessions. They pause during long modules, switch devices, or revisit content later. Without bookmarking, every interruption would feel frustrating. SCORM 1.2 solves this by allowing content to restore the last known position and state.
The solution is not automatic. It is intentional and entirely driven by the SCO. This design keeps the LMS implementation simple while giving developers maximum flexibility.
💾 suspend_data: The Storage Space for State
The most important field for bookmarking is cmi.suspend_data.
This field is a blank space that the SCO can fill with anything it needs to restore the session.
Common uses include:
the ID of the last visited page
the user’s selected answers
the current step in a multi part activity
scroll position or progress inside a module
serialized JSON with custom state
The LMS does not interpret suspend_data. It simply stores whatever the SCO writes and returns it on the next launch. This neutrality avoids conflicts and makes the behavior consistent across platforms.
Because suspend_data has limited size in SCORM 1.2, developers often use compact formats or small markers rather than large JSON structures.
🚪 cmi.core.exit: Telling the LMS What Should Happen Next
🔄 The Resume Flow on the Next Launch
When the learner returns, the SCO can read suspend_data and rebuild the session.
A simple example:
var api = findAPI(window);
api.LMSInitialize("");
var savedState = api.LMSGetValue("cmi.suspend_data");
if (savedState) {
restoreProgress(savedState);
}The LMS does not take part in this logic.
The SCO makes all decisions.
This separation prevents variation across platforms and keeps bookmarking entirely deterministic.
🧩 A Simple Mechanism With Powerful Results
The combination of suspend_data and cmi.core.exit creates a lightweight but robust resume system.
It works because:
the SCO controls the state
the LMS simply stores the value
the rules are minimal and predictable
nothing in the LMS interprets or modifies the data
This avoids vendor specific behavior and ensures that bookmarking works the same way on any SCORM compliant platform.
💡 Developer Reflection
Bookmarking works best when the rules are simple and the responsibility is clear. SCORM shows that a small piece of state, used intentionally, can create a smooth and predictable user experience.
🔢 10 of 12 | SCORM 1.2: The Web Era of Learning Standards








