# Embedding a simulation in Rise 360

> Paste a simulation's embed snippet into a Rise 360 lesson, then patch the Rise SCORM export so the simulation's result reaches your LMS.

- Plans: All plans
- Canonical: https://docs.devlin.ai/publish-and-embed/rise-360

A simulation goes into an Articulate Rise 360 lesson as an iframe embed snippet that you copy from the simulation editor. Embedding is available on every plan. If the Rise course is exported as a SCORM package, the editor can also patch that package so the simulation reports its score, pass or fail, and completion to the LMS; that reporting works on these plans: Core, Team, Enterprise.

## Before you start

- The simulation must be published. An unpublished simulation does not load from its embed link. See [Publishing a simulation and sharing its link](https://docs.devlin.ai/publish-and-embed/publish-a-simulation).
- Open the simulation, go to the **Publish** stage, and find the **Rise 360** section. The section is switched off on a new simulation and shows "Turn on to configure." until you turn on its switch.
- For LMS reporting you need a Rise course that you can export for an LMS as SCORM 1.2 or SCORM 2004, and the workspace that owns the simulation must be on one of these plans: Core, Team, Enterprise. On other plans the upload button and the manual snippet in the reporting block are locked. You can still follow the steps, but nothing is sent to the LMS until the workspace that owns the simulation is upgraded.

## Steps

### Embed the simulation in a Rise lesson

1. In the **Rise 360** section, set **Height (px)**. It starts at 600, accepts 200 to 2000, and is written into the snippet as the iframe height. The snippet is always full width with no border.
2. Select **Copy Snippet** next to **Embed snippet**. The snippet is an iframe tag that points at the simulation's embedded link (the `?mode=embedded` link).
3. If voice is turned on for the simulation, the section shows two snippets instead: **Text variant** and **Voice variant**. The voice snippet points at the `?mode=voice-embedded` link and includes `allow="microphone"`, which a voice simulation needs. Copy the one you want learners to use.
4. Paste the snippet into your Rise lesson. The section's own instruction is: in Rise, add a **Multimedia** → **Embed** block, then click **Content** → **Change** to paste this code.

### Report results to the LMS from a Rise SCORM export

For the reporting to work, the devlin.ai bridge (a small script) has to be added to the exported Rise course. The **Report Results to the LMS** block in the **Rise 360** section adds it for you.

1. In Rise, click **Publish** in the top right, choose **LMS** with SCORM 1.2 or SCORM 2004, then click **Download**. For tracking, select **Track using course completion**. Do not track using a quiz, because a quiz score would compete with the simulation's score.
2. In the editor, select **Upload Rise LMS export (.zip)** and choose the zip that Rise downloaded. The file picker accepts zip files up to 500 MB; for a larger package, add the bridge line by hand (see below). The button reads "Patching…" while it works.
3. The patched package downloads to your computer. Its name is the original file name with `-devlin.zip` at the end. The editor shows a confirmation that ends "the patched package downloaded and is ready for your LMS."
4. Upload the `-devlin.zip` package to your LMS.

The editor states "Patching happens entirely in your browser; your course never touches our servers."

## Result

Learners see the simulation inside the Rise lesson and interact with it there. With a patched SCORM package running in an LMS, the simulation's result is written to the learner's SCORM session automatically when the simulation finishes, and written again when the learner leaves the course page so that Rise's own completion write does not erase it. You add no triggers.

## What the patch changes

The patcher makes one change to the package: it adds a single script line, the devlin.ai bridge in automatic reporting mode, to `scormcontent/index.html`, right after the opening `<head>` tag. Every other file is copied unchanged.

- The patcher does not look for the simulation block and does not need to know which simulation is in the course. The bridge it adds listens for a result from any devlin.ai simulation embedded in the course.
- If the zip holds the whole export folder instead of its contents (so `imsmanifest.xml` is one folder down instead of at the top), the patcher moves everything up one level. The confirmation then adds "(We also fixed the zip structure: imsmanifest.xml now sits at the root, as LMSs require.)"
- If the package already contains the bridge line, nothing is downloaded and the editor tells you no changes are needed, ending "Upload it to your LMS as is." There is one exception: when the patcher also had to fix the zip structure, the corrected package downloads anyway, because the zip you uploaded would be rejected by an LMS. There is a second exception: if the existing bridge line loads the bridge from a different address than the editor you are using (for example a package patched on another deployment), the patcher points it at the current address and the patched package downloads.
- **Re-apply after every Rise export**. Each new export from Rise is a fresh package without the bridge, so run every new export through the patcher before you upload it to the LMS.

To make the change by hand, open **Prefer to edit the package yourself?**, select **Copy** on the script line, unzip the package, paste the line into `scormcontent/index.html` immediately after the opening `<head>` tag, save, and zip the files inside the export folder again. Zip the contents, not the enclosing folder: `imsmanifest.xml` must sit at the top of the zip or the LMS will reject it.

## What the LMS receives

The **What gets sent** note in the editor lists score, pass/fail, session time and a completion status. In detail:

- In a SCORM 2004 package: the score, a completion status of completed, and a success status of passed or failed when the simulation produced a pass or fail result.
- In a SCORM 1.2 package: the score and a lesson status of passed or failed. When the simulation produced no pass or fail result, the lesson status is completed.
- Session time is sent when it is greater than zero.
- A simulation with evaluation turned off, or a feedback-only evaluation that carries no score and no pass or fail, reports completion only.
- The bridge writes and saves these values. It does not end the SCORM session; Rise's own SCORM code does that.

If the course has several embedded simulations, each one that finishes triggers a new report covering the simulations finished so far in the current course page load. The reported score is their average, rounded to a whole number, the course is reported as passed only when every simulation with a pass or fail result passed, and session time is the total across them. Simulations finished in an earlier visit are not counted: a learner who comes back later and finishes only one more simulation is reported on that one alone.

If the workspace that owns the simulation is not on one of the plans listed above, nothing is written to the LMS.

**Testing outside an LMS**. Rise previews, share links and web exports have no SCORM session, so nothing is reported there, and the browser console shows a note instead. To check reporting end to end, upload the patched package to your LMS or to a SCORM testing service and check the recorded score after finishing the simulation.

## Messages the patcher can show

| Message | What it means |
|---|---|
| "That file couldn't be read as a zip. Upload the .zip exactly as Rise exported it." | The file is not a readable zip. |
| "No imsmanifest.xml found, so this isn't an LMS (SCORM) export. In Rise, click Publish in the top right and choose LMS with SCORM 1.2 or SCORM 2004 (not Web or xAPI)." | The zip has no `imsmanifest.xml` at the top level, and not exactly one copy a single folder down. Web and xAPI exports from Rise produce this. |
| "This SCORM package has no scormcontent/index.html, so it doesn't look like a Rise 360 export. For Storyline courses, use the Storyline setup instead." | The package is SCORM but is not laid out like a Rise export. For Storyline, see [Embedding a simulation in Articulate Storyline](https://docs.devlin.ai/publish-and-embed/storyline-web-object-setup). |
| "This package is too large to patch in the browser (the limit is 500 MB). Add the bridge line by hand with the manual steps below." | The zip is larger than the patcher accepts. Use the manual steps under **Prefer to edit the package yourself?**. |
| "Something went wrong while patching the package. Try re-exporting from Rise and uploading the fresh zip." | Any other failure while patching. |

## What Rise cannot do that Storyline can

- Storyline variables. The bridge writes a simulation's variables into a course only when a Storyline player is present, and the **Rise 360** section has no variable setup step. See [Storyline variables a simulation or coach writes](https://docs.devlin.ai/publish-and-embed/storyline-variables).
- Triggers. In Storyline you decide when results go to the LMS by adding a trigger. In a patched Rise package the report is automatic each time a simulation finishes.
- A link in a Web Object. Rise takes the iframe snippet. Storyline's Web Object takes the embedded link itself.

## Coaches

A coach's **Publish** stage has its own **Rise 360** section with the same **Height (px)** field, a **Copy Snippet** button, and **Text variant** and **Voice variant** snippets when voice is on for the coach. The snippet points at the coach's embedded link. The coach section has no **Report Results to the LMS** block and no patcher.

## With an AI tool

An AI tool connected over MCP can use `get_embed_code` to read a simulation's embedded link and a ready-to-paste iframe snippet at the default height, plus a microphone-enabled voice snippet for a voice simulation, and it is told whether the simulation is published. It only reads; patching a SCORM package happens in your browser in the editor. See [MCP server and AI tool connectors](https://docs.devlin.ai/integrations/mcp-server-and-ai-tool-connectors).

## Related

- [Publishing a simulation and sharing its link](https://docs.devlin.ai/publish-and-embed/publish-a-simulation)
- [Embedding a simulation in Articulate Storyline](https://docs.devlin.ai/publish-and-embed/storyline-web-object-setup)
- [Storyline variables a simulation or coach writes](https://docs.devlin.ai/publish-and-embed/storyline-variables)
- [LMS packages: SCORM and xAPI reporting](https://docs.devlin.ai/publish-and-embed/lms-packages-scorm-and-xapi)
- [Hosting and SCORM Wrap](https://docs.devlin.ai/publish-and-embed/hosting-and-scorm-wrap)
- [MCP server and AI tool connectors](https://docs.devlin.ai/integrations/mcp-server-and-ai-tool-connectors)
