Why is MinIO not the default in Tutor?

It would be nice to be able to assume some S3 features (like time-limited, signed static asset URLs) while developing features, instead of always relying on the lowest common denominator that is the Django Storages API. The MinIO console is also pretty nifty for browsing. I know that there’s a plugin for MinIO today, but I’m curious why it isn’t the default. Was it discussed somewhere? Is it a philosophical stance, or was there just not enough interest/time?


From my understanding, the philosophy is to keep the core as lean as possible even if it doesn’t provide a functional experience. For example, all the MFE stuff is handled with the tutor-mfe instead of having it in the core and you can disable that plugin thus locking you out from viewing a course without the learning MFE. That is why that plugin is enabled by default in Tutor.

I remember some discussion about extracting the LMS and CMS from Tutor into their own plugins. But I don’t know what the current stance is.

So that would be my guess as to why isn’t included by default.

That’s a good question. Moisés’ comment is part of the answer:

(The second part is incorrect though: “… even if it doesn’t provide a functional experience” :sweat_smile: We do want to provide a functional experience out of the box! And that’s why the MFE plugin is enabled by default.)

Similar to the MFE plugin, we could enable the MinIO plugin by default. There are multiple reasons why we don’t. None of them is super important, but taken as a whole I feel like they provide a strong enough argument to not do it.

  1. Historically, the native installation did not require an object-storage solution out of the box. S3 support was optional.
  2. Object storage introduces extra complexity in the form of containers and configuration.
  3. MinIO configuration is super tricky to get just right. At least, that was the case with boto. The situation might have improved now that edx-platform has made the switch to boto3 (as I just learned thanks to your PR).
  4. Most people run Open edX with docker-compose and for them it makes zero sense to run an object storage container.
  5. Recent versions of MinIO break the tutor-minio plugin by removing the gateway implementation: Deprecation of the MinIO gateway We don’t have a replacement for MinIO just yet. Thus we are for now sticking with a version from 2022.
  6. To make MinIO the default we would have to migrate existing data from the local storage to MinIO.
  7. A local file hierarchy is slightly simpler to manage than exploring from a web interface.
  8. Serving static assets from a different host name breaks iframes, as we discovered in the Scorm XBlock (see this PR)
1 Like