The 12th Open edX community release will be named Lilac.

Put stuff here that we have to remember when we start packaging up for Lilac.  Especially important is information that system installers or operators will need to know. Please include your name when you add an item, so that we can get back to you with questions.


  • Tracking metrics based on the anonymized session ID will experience a discontinuity or other anomaly at the time of deployment, as the anonymized IDs will change. [PR] This will likely appear as if everyone logged out and back in again, although only from a metrics perspective. In a green-blue deployment scenario, it may briefly appear as if there are twice as many sessions active. (@Tim McCormack)

  • Use of edx-proctoring now requires a setting PROCTORING_USER_OBFUSCATION_KEY – it should be initially set to the same value as SECRET_KEY, in both LMS and Studio. This allows it to be changed independently, although there is not yet a way to rotate it without breaking integration. (@Tim McCormack)

  • Upgraded to mongo 4(point-of-contact: @Cory Lee )

    • No changes were needed for us to move from mongo 3 to mongo 4 , but mongo 4 features may be used by edX developers going forward.

  • Import unqualified packages from lms/djangoapps, cms/djangoapps, or common/djangoapps is no longer supported. Doing so will cause instances of import_shims.warn.DeprecatedEdxPlatformImportError to be raised. See for details and context.

  • LMS/Studio: Changes to edx-organizations (point-of-contact @Kyle McCormick )

    • Uniqueness constraint added to Organization.short_name

      • This was added in edx-organizations 6.0.0. See release notes for details.

      • For instances that did not enable FEATURES['ORGANIZATIONS_APP'], this is a no-op

      • For instances the DID enable FEATURES['ORGANIZATIONS_APP'], any Organizations with conflicting short_names need to be removed (can be done via Django admin), else the migration for edx-organizations 6.0.0 will fail to apply.

    • Organizations feature globally enabled for all LMS and Studio instances.

    • Added ORGANIZATIONS_AUTOCREATE Django setting for Studio.

      • Defaults to True.

      • When True, creating a new course run or content library with an unrecognized org slug (that is, “edX” in course-v1:edX+DemoX+2T2020 will silently auto-create an organization in the background.

      • When False, creating a new course run or content library with an unrecognized org slug will raise an error. This is helpful if you wish to restrict the set of organizations under which course runs and content libraries may be created.

    • The FEATURES['ORGANIZATIONS_APP'] is no longer supported.

      • The Organization and OrganizationCourse model are now available on all instances.

      • If you previously enabled FEATURES['ORGANIZATIONS_APP'], then you should override the Studio setting ORGANIZATIONS_AUTOCREATE to Falsewhen upgrading to Lilac to achieve the same functionality.

    • Added Studio management command: ./ cms backfill_orgs_and_org_courses

      • This back-populates the organizations_organization and organizations_organizationcourse tables, for Open edX instances that did not previously enable FEATURES['ORGANIZATIONS_APP'].

      • It is not critical to run this for the Lilac upgrade, since no features depend on these tables being populated yet.

      • However, future releases may make use of the data in these tables; hence, it is best to run the backfill now.

    • The sysadmin dashboard is no longer supported (point-of-contact @Hamza Farooq).

Feature Changes

  • The Learning MFE is slated to be the default experience courseware experience for Lilac (@Kyle McCormick)

    • Both course-run-level and global opt-out will be available via Waffle flag, falling back to the Legacy courseware frontend.

    • This necessitates that the Learning MFE will work out-of-the-box in Lilac. Need to connect more with BTR on this.

    • We expect all this to be true for the Outlines and Dates pages as well (@Michael Terry , @Jason Myatt )

    • We expect that this is the last named release to support Legacy courseware frontend.

  • Switched from Elasticsearch 1 to Elasticsearch 7 across Open edX. This may require some syntax changes for custom scripts that used search APIs. (@Michael Terry )

    • Please change queries that used __not to __exclude

    • Please properly URL-encode any plus signs in query URLs (like in course run key parameters) to %2b. Our Elasticsearch 7 implementation is more strict in that regard.

    • Please change queries against course-discovery that used pacing to pacing_type

  • Xblock URL token signing can now be migrated to use a new multi-key mechanism rather than being tied to SECRET_KEY. It is recommended that you perform this migration, as it permits easier rotation of SECRET_KEY. (@Tim McCormack)

  • Various bug fixes and updates around course certificate generation (@crice)

    • In an effort to be more inclusive, code referencing the course CertificateWhitelist model is being updated to instead refer to a Certificate Allowlist. The model itself has not yet been renamed.

    • Temporary CourseWaffleFlag added to control access to updated behavior of the CertificateWhitelist (aka Certificate Allowlist)

    • Temporary CourseWaffleFlag added to control access to updated behavior of the course certificates

    • The management command named create_fake_cert has been removed. The Certificate Allowlist should be used in its place.

    • The management command named gen_cert_report has been removed. To view the status of generated course certificates, query the certificates_generatedcertificate database table.

    • A user can no longer be added to both the Certificate Allowlist (meaning the user should be granted certificate) and the Certificate Invalidation list (meaning the user should not be granted a certificate) for the same course run.

    • Removal of the allow_certificate field on the UserProfile model has begun (

  • Added a new export-course-metadata-to-storage feature. In order to use it set COURSE_METADATA_EXPORT_BUCKET and COURSE_METADATA_EXPORT_STORAGE. Useful for external services you might have that want to scrape course data.' (@Matthew Medvedev-Piatetsky)

  • In common.djangoapps.student.models, the save parameter is deprecated for functions anonymous_id_for_user and unique_id_for_user, and these functions will always save generated IDs to the database. This allows future decoupling of ID generation from SECRET_KEY. Including the parameter will result in a DeprecationWarning; after Lilac we plan to remove the parameter (which will be a separate breaking change – DEPR-148). (@Tim McCormack)