---
title: "Deploy and operate"
description: "Install Interactive Content XBlock with Tutor, manage access, inspect learner data, and set up local development."
source: "https://docs.blend-ed.com/interactive-content-xblock/deployment/"
---

# Deploy and operate

## Supported environment
- Python 3.11 or later
- Django 4.2 or 5.2
- Open edX Redwood or later

The Python distribution is `interactive-content-xblock`; the Advanced Module List entry point is `interactive_content_xblock`.

## Install with Tutor
Add the repository to `OPENEDX_EXTRA_PIP_REQUIREMENTS`:

```
git+https://github.com/blend-ed/interactive-content-xblock.git@master
```
For a repeatable production deployment, replace `master` with a reviewed commit or release tag. Rebuild the image and restart Open edX:

```
tutor images build openedxtutor local restart
```
Enable the XBlock per course from **Settings → Advanced Settings → Advanced Module List**. Add `interactive_content_xblock`.

## Author access and browser security
Treat permission to edit this XBlock as permission to execute browser code in a learner’s authenticated Open edX session. The learner view renders author HTML and CSS and runs author JavaScript in the page context; it is not an iframe sandbox.

- Limit Studio write access to trusted course teams.
- Review custom and AI-generated content before publishing.
- Do not embed credentials, tokens, personal data, or untrusted third-party
scripts.
- Apply an appropriate Content Security Policy and allow-list only required
external origins at the platform level.
- Test alongside the course theme and other XBlocks for CSS and global
JavaScript collisions.

The AI generation endpoint has an additional server-side Studio write-permission check. Standard Studio access control protects the settings save handler.

## Learner data
The XBlock stores these values in per-user state:

| Value | Description |
| --- | --- |
| Latest response | The complete object most recently passed to `submitInteraction()`. |
| Interaction count | Number of saved submissions. |
| Last interaction time | Server-side UTC timestamp for the latest submission. |
| Correctness and score | Latest evaluated result. |
| Feedback | Latest feedback message. |
| View/manual completion | Whether the completion-only event has already been emitted. |

Course staff can use Open edX **View as Specific Learner** to inspect a learner’s rendered state because the block supports read-only masquerade. Use the Open edX instructor dashboard for platform-provided bulk exports.

Enable **Debug Mode** only while troubleshooting. Its panel is visible to staff and includes the block ID, user ID, interaction count, last interaction time, correctness, and score.

## Local development
Install the checkout, add it as an Open edX image mount, and rebuild the development image:

```
cd interactive-content-xblockpip install -e .tutor mounts add /absolute/path/to/interactive-content-xblock
```
Create a local Tutor plugin in the directory printed by `tutor plugins printroot`:

```
from tutor import hooks
hooks.Filters.MOUNTED_DIRECTORIES.add_item(    ("openedx", "interactive_content_xblock"))
```
Then enable the plugin and start the environment:

```
tutor plugins enable mount_interactive_content_xblocktutor images build openedx-devtutor dev start -d
```
Run the upstream test environments from the repository:

```
tox -e py312-django52tox -e py312-django42tox -e quality
```
Source and issue tracker: [blend-ed/interactive-content-xblock](https://github.com/blend-ed/interactive-content-xblock).
