28 March - 8 April 2023

After an unforgettable Open edX 2022 conference and co-working retreat last year in Lisbon, Portugal, we were eager to see what our 2023 trip had in store!

As our team is 100% remote, these two weeks of the year are a great way to connect, catch-up, and meet new team members. Sadly, not everyone was able to join in the fun, but we still had representatives from Australia, Europe, Asia, North America, South America, and Africa. Here’s the lowdown on the two weeks we spent together.

Week 1: Open edX Conference 2023

This year, Open edX went back to its roots and hosted its annual conference at MIT, the birthplace of the Open edX project. In fact, the conference was held in the very same building in which the first lines of code were written for the platform. Sitting there 12 years later, you couldn't help but think how much the platform has grown and how far we've come as a community over the years. 

MIT Dome

As some of Open edX's biggest fans and most active contributors, the OpenCraft team makes an effort to attend the conference whenever we can. It's a wonderful opportunity for us to reunite with the people we work with during the year - both within our own team and the community at large. Also, because our team members are often selected as speakers at the conference, we get the opportunity to show off what we've been working on and share our ideas with the community. In turn, we get the chance to learn about what others have been working on. We often leave a lecture hall feeling inspired by the efforts of other community members and brimming with new ideas! 

This year's conference branding was created by our UX and UI designers

Four OpenCraft team members presented a talk this year. Xavier Antoviaque spoke about "Building Collaborative Courses" by involving learners in the course creation process. Braden MacDonald joined other members of the Product Development team to introduce the Modular Learning Initiative to the community and discuss how community input helps shape product development. Jillian Vogel joined Brian Mesick to share the progress of the OARS (Open Analytics Reference System) project: an ambitious effort to improve the analytics of the Open edX platform. Lastly, Piotr Surowiec discussed the work that went into migrating a comprehensive theme from a legacy frontend to the MFE. He outlined the key differences between the theming options in the comprehensive theme and the MFE.

Every year, the welcome address and keynote talks are some of the main highlights of the conference. For those of you who couldn’t make it to Boston this year, we’ve linked to the videos of these talks below:

When not presenting talks, participating in workshops, or meeting with our clients, the OpenCraft team managed to sneak in some good old-fashioned fun! We beat the cold by visiting the Cambridge Brewing Company (who, by the way, serve delicious fried Brussel sprouts that even devout haters of the vegetable would enjoy!). We embarked on a self-guided tour through the MIT grounds where we marveled at the Biomimetic Robotics lab, got chased out of the library, and walked the campus grounds alongside a group of Canadian geese. On Wednesday night, we attended the conference reception where we wined and dined within the walls of the MIT Museum. And on the last day, just to throw in a little bit of culture, we visited the Isabella Stewart Gardner Museum where we found each display to be more interesting and opulent than the last. 

The conference went by in a flash, but we certainly managed to make the most of our time! Not only were we able to interact with the community in a way that remote collaboration doesn't always allow, but we also got the chance to strengthen our bond as a team - something money just can't buy! Once the 2023 conference had drawn to a close, we headed back to our Airbnbs to prepare for our next adventure: an OpenCraft co-working week in Bogotá, Colombia!

Week 2: Co-working week!

We arrived around the 1st of April, ready to have fun in the vibrant city of Bogotá. The Colombian capital is a whopping 2,625 meters (8,660 feet) above sea-level. We were warned that the city’s dizzying heights can give you a touch of soroche, or altitude sickness. So we made sure to take it easy the first few days after we’d landed.

Some OpenCrafters exploring the gardens of Bogotá

One week is definitely not enough to catch all the sights of Bogotá. The city sprawls as far as the eyes can see, cradled between the chilly peaks of the Andes mountains. We experienced four seasons in one day. Sun, rain, wind, hail - you name it. We never knew what to expect. Thank goodness for our cozy co-working space at CO+LABORA in Usaquén. The area oozes cool. Trendy restaurants and bars adorn cobblestone streets, while storefronts are painted with bright patterns and colors. 

When we travel as a team, you never go hungry. Everyone is eager to try everything! This time it was arepas, empanadas, pescado frito, ceviche, bunuelos, arequipe, and, of course, coffee! 

While we do work a bit and the face-to-face interactions are invaluable, we also play a lot. Our team has an amazing adventurous spirit. But there’s also no pressure if a proposed activity is not your jam. For example, only a few of us decided to tackle the mountain of Monserrate. It sits 3,152 m (10,341 feet) above sea level, and it dominates the center of Bogotá. At the top of the mountain rests a church with a shrine, devoted to El Señor Caído. We set out, and it was testing. But in the words of our intrepid leader, Xavier Antoviaque, “This mountain isn’t going to hike itself!” And it didn’t. We used every muscle and every breath to make it to the top. The steep rise in altitude is what makes the hike a beast. The route is scenic and peppered with colorful vendors and their canine friends.

Hike up Monserrate

We stopped multiple times, not just to take in the majestic views, but to also catch our breath. But, we did it in the end! And it was worth it. Magnificent gardens lie at the foot of the church. The views are so good that no picture can really do them justice. 

Views from the top of Monserrate
Fearless OpenCraft hikers

Other highlights of the trip included visiting and working at the awesome EduNext offices. We’re so lucky to have such wonderful friends and colleagues like you!

OpenCraft and EduNext team working together!

We also visited the beating heart of Bogotá, La Candelaria. The neighborhood‘s narrow streets are adorned with out-of-this-world graffiti, shops selling emeralds, handcrafts, religious artifacts, crystals, and sacred herbs for smudging. This melting pot of culture leads to hotspots like the Gold Museum and Museo Botero. Both showcase absolutely amazing collections. Not to be missed!

Now back to food. Every year we end our week with a special team dinner. Our team dinner this year was nothing short of spectacular. We were treated to course after course at Humo Negro. The chef presented us with his preferred menu. He was full of passion and it just added to the beauty of the experience. The dishes were beyond original, and praised local ingredients. Think “salad” that comes in the form of a ball that pops in your mouth, grilled oysters with burnt cream and seaweed, sea urchin mousse, crispy sea snail with pumpkin seed puree and pickled guatila, chawanmushi with pirarucu, scallops and spirulina, and arracacha with grilled wild berries and yogurt. I would never have been so daring if the food hadn’t been set down in front of me. And man, it’ll remain one of the best memories of food I’ll ever have. Our team laughed and bonded over these strange, surreal dishes. Well done, Humo Negro. Well done, OpenCraft!

On the last night, we had a festive night in. We sat around the fireplace at Xavier, Jill, and Piotr’s Airbnb. Kshitj cooked us a delicious curry and we tried a variety of native Colombian fruits. Some were more palatable than others 😂. Watching everyone pull a variety of faces was priceless.

I can’t believe another conference and co-working week has come and gone. I’ll forever be grateful to be part of this kind, wonderful team and community.  

Until next year…

This year, the Open edX Conference will be held from March 28 – 31 in Cambridge, Massachusetts. The conference schedule is jam-packed with awesome tutorials, talks, and workshops.

You will hear from three of our coding wizards. Check out their talks below:

Building Collaborative Classes - Borrowing From Open Source Practices

by Xavier Antoviaque 

Would you like to involve your learners in contributing, building, and improving your courses? 

Xavier is presenting recognized best-practices that have made open source communities successful. With decades of field-tested approaches in building collaborative online projects, open-source communities can provide a useful perspective to educators looking to develop a different kind of engagement with their students.

Xavier will be speaking on March 29, 2023.

About Xavier

Xavier is an Open edX Technical Oversight Committee member and contributor. He’s also active in several community working groups. And he was one the very first outside contributors to the Open edX codebase!

Xavier founded OpenCraft when he noticed there was a huge demand for instance customization and feature development on edX. To take on this challenge, he rounded up some of the best developers in the world!

OpenCraft is now one of the largest contributors to the Open edX code base (outside of edX, of course). We provide design, development, and hosting services for clients like Harvard, MIT, edX/2U, and Esme.

Xavier loves all things open source and has been a tenured contributor of free software communities; he co-created the free software game Card Stories, initiated the Ryzom.org campaign, and is a former board member of April, the primary free software advocacy organization in France.

Xavier is really active on the Open edX discussion forum. So reach out to him there!

Product Development in the Open: From Visibility to Collaboration

by Braden MacDonald, and tCRIL’s Jenna Makowski and Dave Ormsbee

tCRIL and OpenCraft led Product Discovery work on the Modular Learning Initiative. This initiative makes authoring more flexible by ensuring all parts of the course are independent, composable, and reusable. The teams adopted an “open first” philosophy, making product development a transparent process. Braden, Jenna, and Dave will discuss how community input shaped the project’s direction. They’ll also discuss what they learned, how they can improve community input channels, and ways for those that are interested to stay in the loop.

Braden will be speaking on March 29, 2023.

About Braden

Braden MacDonald is the CTO of OpenCraft, a Core Contributor to the Open edX project, and an active full stack developer. Braden has led the development of several major features of the Open edX platform, as well as many projects in the broader community ecosystem. He is the official maintainer of projects like Blockstore and Tutor’s ARM64 plugin, as well as several open-source projects outside of Open edX. When he’s not coding, Braden enjoys answering questions on the community forums.

Navigate your Data Lake with OARS

by Jillian Vogel, and tCRIL’s Brian Mesick

What are your wildest dreams for data analytics on the Open edX platform? Jill and Brian want to make those dreams come true.

In this talk, find out how far the Open Analytics Reference System (OARS) for the Open edX platform has come, and help guide where it's going. Jill and Brian want to hear from educators, administrators, operators, developers, and anyone else who wants to know more about how people are interacting with educational content.

Jill will be speaking on March 30, 2023.

About Jill

Jillian Vogel is a senior open-source developer and DevOps at OpenCraft. She’s an Open edX core contributor, and started contributing to the platform and analytics system in 2016. Jill loves working at OpenCraft because of our values, openness, quality, commitment, and empathy. She’s a firm believer in learning to code. She finds that even if someone doesn’t stay in tech, code is a tool that can be applied to any field, be it science, engineering, arts, or politics.

Catch Jill’s recent interview with LabXchange here.

What is the Open edX Conference?

The Open edX Conference is an annual 4-day event where the Open edX community and experts in ed-tech meet to discuss the latest industry research, technologies to enhance teaching and learning, and any technical advances in the Open edX platform.

We love delivering top-notch learning management solutions.

We’re an elite team of designers and developers, who love creating quality learning management solutions. Let’s chat about your latest project.

Photo credits: Unsplash

[Conference Preview] Get a sneak peek of the 2023 Open edX Conference with tCRIL's series of "Conference Preview" blog posts. The articles focus on the less-publicized but equally exciting Tuesday and Friday schedules, in addition to the two main days of the conference. Mark your calendars for March 28-31, and stay tuned, as session proposals are currently under evaluation. We know that this year's program promises to be amazing!

-> Tuesday preview blog post
-> Wednesday-Thursday preview blog post
-> Friday preview blog post

[Olive Feature Updates] Sarina Canelake and Jenna Makowski of tCRIL present three captivating blog posts showcasing the latest enhancements and additions in Olive, the newest release of Open edX. The first blog post provides a comprehensive look into the improved authoring experience of the Text Component (previously known as the HTML component), which now supports emoticons, visual tables, and more. The remaining two posts showcase significant and highly-anticipated improvements to the discussion forums, including a refined search function, ability to mark posts as answers, and neat new tools for forum moderators.

-> Improved Studio Editing in Olive
-> New and Improved Discussion Forums
-> Moderation & Authoring Tools for the New Discussions Features

[Olive Release Notes] Looking for what has changed in the Olive release? Find the release notes here

[Core Contributor Retros] Did you know that Core Contributors work in bi-weekly sprints and share their progress at the end of each sprint using Listaflow, an open-source checklist tool developed by OpenCraft? Their reports, accessible on Discuss, provide insights into what tasks require assistance, in case you're interested in lending a hand. Keep up-to-date on the latest sprint reports!

[Meetup Recording] The recording of the January online Community meetup can be watched here. This meetup featured the following presentations:

___

Open source and free, a gift from above,
The Open edX platform brings knowledge, so that we can grow.
An endless stream of learning, for one and all,
Its power immense, shall answer our call.

With endless possibility, for young and old,
To explore and grow, with stories untold.
So gather ye students, from near and far,
And let the Open edX platform, be thy guiding star.

- Courtesy of ChatGPT

[Olive Released 🫒The fifteenth Open edX community release, called Olive, is now out! The release was coordinated by the Open edX community via the Build / Test / Release working group, and brings improvements to the Discussions Micro-frontend (MFE) and HTML component editors, but also novelties like the brand-new Authentication MFE.

You can also learn more about Olive at the upcoming Open edX Community Meetup, scheduled for 1/26/2023 at 10 AM (EDT). A registration link to this free virtual event will soon be posted on the Open edX blog.

-> Release notes for Olive

[Listaflow — Remote Collaboration] In addition to Open edX development, OpenCraft has been working on the development of Listaflow, an open source workflow tool for remote team collaboration and reporting. In the blog post highlight below, our UX designer Ali Hugo presents the product, and explains how the early release is already being put to good use by the Open edX community. Scroll down to learn more!

[2023 Conference CFP] The Call For Proposals for the 2023 Open edX Conference is open until January 23rd, 2023. All community members are welcome to participate and submit their ideas! To learn about the types of presentations the Community is seeking, and how you can submit a presentation proposal, please visit Sessionize. Early bird rates for conference tickets are up until early January, so be quick and buy your tickets!

[December Meetup Recap] The recording of the December Open edX Community Meetup can be watched online. Here's a recap of the program:

[Easy Tomato Sauce] I love cooking, and I love sharing recipes. Here’s one for a simple, yet very tasty marinara sauce. It's great on everything. It's one of my secret weapons. All you need is 3-4 ingredients and a few hours' time. Share this red deliciousness with friends and family, and appreciate the small, great things in life.

🍅 -> Tomato sauce recipe

This article was written by Ali Hugo, UX and UI Designer at OpenCraft.

Listaflow is a new open source tool being built by our team here at OpenCraft. Although it is still in its early stages, Listaflow is already being put to good use by the Open edX community. 

In this post, I’ll give a brief overview of:

-

The Story Behind Listaflow

OpenCraft is a remote company, with team members based all over the world – from Adelaide, to Vancouver. Needless to say, real-time meetings are not an option for us. We need to make sure our team members are on the same page, even though they’re on different continents.

Enter Listaflow, the open source workflow tool for remote team collaboration, and reporting. 

-

-

Now, I know what you’re thinking…

Another workflow tool?! But, why? Process Street and monday.com already do everything I need.”

Well, it really depends on what's important to your organization. At OpenCraft, we are passionate about open source (in fact, we contribute the majority of the code we write to the public version of the Open edX® learning platform). So, although tools like monday.com are fantastic, many of them are closed source, and whenever presented with the option of closed vs open source software, open source wins every time! 

Additionally, many of the products on offer didn’t have the features we were looking for. Not only did we need an asynchronous way to plan our development sprints, but we also wanted to give the whole team an overview of how everyone else’s sprint was going (without needing to contact them and potentially interrupt their focus). Very few services checked all the boxes, and the few that did, were all proprietary. We soon realized that, if we wanted an open source tool with everything we need to manage our remote team, we would have to build it ourselves. 

And so the idea of Listaflow was born. We were thrilled! By building our own tool, we are no longer subject to decisions made by external teams. We can also guide the direction of Listaflow, and adjust our efforts based on actual user feedback. By following a “user first” approach, we aim to create a first-class user experience for our users. 

-

Listaflow’s Current Feature List

Listaflow is still in its early stages and we expect its feature list to evolve over time. We want to keep things agile, and allow the tool to evolve alongside the needs of our users. For now though, here is a quick summary of the features we are working on:  

-

-

How Listaflow is being used by the Open edX community

OpenCraft started contributing to the Open edX platform all the way back in 2013. Over the years, we’ve made thousands of code contributions, and have become an important part of the Open edX community. 

One of the many Open edX projects we are involved in, is the Core Contributor Program. The idea behind the program is to entrust specific members of the Open edX Community with advancing the development and adoption of the platform. 

When Friday (the tool that the Core Contributors were using for their asynchronous sprint check-ins), announced that they were closing shop, we knew we needed a reliable alternative. Listaflow was the obvious choice - not only was it already in development, but it only required a few tweaks before it could effectively fill Friday’s shoes! What’s more, many of the people working on Listaflow were Core Contributors themselves, so already understood the process and what was needed. The rest is history. The Core Contributors became the first Open edX team to start using Listaflow, closely followed by the Marketing Working Group

Today, both of these teams use Listaflow for their end-of-sprint check-ins. This is how it works: towards the end of the sprint, each team member receives an email encouraging them to complete their sprint check-in. The check-in is a quick and simple questionnaire asking a few questions about the previous sprint. It includes things like, “What did you accomplish during the previous sprint?”, and, “Is there anything where you could use help from others?”. Team members can choose to go into as much, or as little detail as they like, and most of the questions are optional. 

-

-

Even if team members choose to answer only the required questions, Listaflow can still generate meaningful reports of the responses. Reports take all of the feedback received from the check-ins, collate it, and transform it into an easy-to-digest visual representation of a team's responses. They are a great way to get an overview of how the sprint went, and to identify any pain points or action items. What’s more, reports are also filterable and downloadable, giving users the ability to generate reports that suit their specific needs, and save them for their records, or share them with people who may not have a Listaflow account.

With two Open edX teams actively using Listaflow, we are getting a lot of priceless user feedback. This is helping us to make incremental improvements, all based on real feedback from real users. The next step? Continue to onboard more and more teams within the Open edX community, and expand outward from there. Once Listaflow is working like a well-oiled machine within the Open edX Community, we plan to open it up to external teams, allowing us to tap into the needs of remote teams worldwide.

-

Final Thoughts

So, there you have it - the first chapter of the Listaflow story. Although we don’t know exactly what’s in store for the rest of the tale, we do know that Listaflow users will be the protagonists. They will guide our decisions and steer our feature list. In return, we hope to provide them with a fantastic tool - a tool that gives them the peace of mind that everything is organized and accounted for, so that they can focus their energy on the right things at the right time.

Featured Image PSD Mockup by Pixeden

Here's a recap of our October 2022 newsletter:

[Open edX Conference 2023] The 2023 Open edX conference has just been announced! The event will take place between Tuesday, March 28 and Friday, March 31 2023 at the Massachusetts Institute of Technology (MIT). The annual conference is a great opportunity to meet members of the community from around the world, attend captivating talks, and learn about innovative uses of the Open edX Platform. Registration is now open on Eventbrite, with Early Bird rates valid until January 6th. The Call For Proposal is now also open. You can read the official announcement for more detailed info. We'll be sharing more news about the conference in subsequent newsletters. Stay tuned, and see you there!

-> Register now for the 2023 Open edX Conference

[October Meetup Recap] The October Open edX Community meetup featured three presentations:

-> Watch the meetup recording

[OEP Review] OEP 57 is currently open for community reviews. OEPs (Open edX Proposals) specify a best practice, architectural decision, or process that the Open edX community has agreed should be adopted by the project. In the case of OEP57, it is intended to serve as a glossary to the key terms and concepts that will guide and frame the Open edX product management organization and product practice. Your comments and questions can be posted directly on the Confluence page!

-> Review OEP 57

[Join a Working Group!] Working Groups are community-led teams dedicated to a project or projects that fit under an easily definable business process. They are designed to create and/or facilitate a particular feature set within the Open edX platform. They are also an authoritative body giving the community structure and a process for decision-making. For example, see this recent Open edX blog post presenting the Translation Working Group. Join the Open edX community and take part in our collaboration efforts!

-> List of all working groups

Here's a recap of our September newsletter:

[TOC Election - Sep 30 deadline] In October, the Open edX Community will be called to elect 3 members of the new core decision-making body of the Open edX project — the Technical Oversight Committee (TOC) — and we need your help! The 3 elected community representatives will join the TOC, along with the 3 members from tCRIL and the 3 members from 2U.

The 3 elected community representatives have the mission to represent the community as a whole, but with each a specific focus:

If you are running an active course on Open edX, please register to vote! This includes any form of contribution to the authoring of a course, and particularly Teaching Assistants (TAs).

Voter registration is open until September 30th, and the election will be held in October. For more details about the election, see the TOC Community Election Charter.

-> Register to vote

[Join a Working Group] Working Groups are community-led teams dedicated to an Open edX-related project that fit under an easily definable business process. They are designed to create and/or facilitate a particular feature set within the Open edX platform. They are also an authoritative body giving the community structure and a process for decision-making. For example, see this recent Open edX blog post presenting the Translation Working Group. Join the Open edX community and take part in our collaboration efforts!

-> List of all working groups

[Open edX Overview] Here's a frequently asked question: What's the distinction between edX, Open edX, and now tCRIL (The Center For Reimagining Learning)?

Ed Zarecor, Open edX's VP of Engineering, just helped solve the riddle by presenting an overview of the Open edX ecosystem at the September Community meetup. His presentation helps differentiate edX (the company, and learning destination), Open edX (the open source learning platform), and tCRIL (the non-profit entity that manages the Open edX platform along with the community). Ed also touches on the acquisition of edX by 2U in November 2021, tCRIL's mission, project governance, and a few more frequently asked questions. 

-> Watch presentation recording

[Advanced Assessments] At the last Community meetup, Curricu.me founder John Swope presented a talk titled "Advanced Assessment in Open edX and how Anyone Can Use It", which offered insights into how non-technical or semi-technical course authors can leverage the platform's advanced components (JavaScript, Python, SCORM, etc.) to enhance their courses. 

-> Watch presentation recording

This article was written by Kshitij Sobti, senior open source developer at OpenCraft.

OpenCraft has been interested in working on improvements to the discussions infrastructure in Open edX for quite some time now, and created a proposal for creating a Discourse plugin for Open edX and making Discussions a pluggable component back in 2019.

Since then, we got the opportunity to work on a major blended development project with edX (now 2U) on bringing some of those improvements to fruition.

There have been major changes to the way discussions work in the platform at multiple levels. From foundational changes that allow selecting alternative discussion providers, and a revamped mechanism for configuring discussions, to new discussions UI that continues the trend of moving over the platform interface to React-based MFEs.

We're happy we got to work on this pivotal functionality of the platform and hope to keep the momentum going in making improvements in this area.

Support for Alternative Discussion Providers

One of the key aspects of the work we've done as part of blended projects BD-3 and BD-38 has been to allow users to select alternative discussion providers.

Parts of this functionality have been landing in the platform since Koa, but from Lilac onwards it has been possible to use the new Course Authoring MFE to do so using a much simpler UI.

With the Course Authoring MFE, the discussion tool used for a course is now something that can be selected from a UI rather than just being an inbuilt default.  The Open edX platform will come with out-of-the-box support for Piazza, YellowDig, InScribe, and Ed Discussion. These providers support LTI (Learning Tools Interoperability) 1.1, which is a standard that allows learning tools to communicate and interoperate. In this case, we use it to allow seamless logging in the discussion tool without requiring the user to log in to another site.

With a simple wizard UI it's possible to select the inbuilt forums or a third-party discussion provider, and configure credentials for the tool. Once configured, the discussion tool will appear embedded in the Discussion tab, replacing the standard Open edX forum interface.

A new UI in the Course Authoring MFE allows you to select a Discussion tool

We developed a newly added LTI infrastructure that also makes it possible to have other LTI-based course tabs, which can embed any kind of tool. However, this aspect is currently not easy to access without importing a specially edited course structure outside of studio. We hope to be able to develop this further in a future blended project. 

While the new UI simplifies the use of supported providers, it is also possible to manually configure a different discussion provider that isn’t supported yet by editing the configuration in the admin panel. Instructions for how to do this are at the end of this article.

Adding a new provider to the UI isn’t possible without some development effort. It currently requires some small modifications to the platform and UI. This is another aspect that we’d love to expand on in the future by making it pluggable or customisable.

One provider we'd particularly love to add better support for is Discourse. Discourse is a very popular discussion forum software that is open source, well known, modern and actively developed. Currently, using it requires installing plugins on the Discourse side as well. It also supports a more modern version of LTI (v1.3) that is supported by the platform, which is something OpenCraft worked on as part of Blended Project BD-02 but isn’t supported for discussions just yet. 

A New UI to Configure Discussions

As you may have seen from the above screenshots, there is now a UI to switch between discussion providers. This isn't limited to just the LTI-based providers; there is now a new configuration UI for the internal forums as well.

The Course Authoring MFE also allows configuring a number of discussion settings from a single place

This new UI will allow you to configure some discussion options that were previously only available to edit through advanced course settings. It consolidates most discussions-related settings into one place. This includes the ability to enable anonymous posts, add general discussion topics, configure discussion cohorts division, and blackout dates.

This new interface lives in the Course Authoring MFE, which now also adds a UI to configure other aspects of a course, such as configuring teams, and enabling/disabling the progress tab, notes feature, calculator tool, and course wiki.

Applications and tools that previously required fiddling with advanced course settings and now be set up in a few clicks using the Course Authoring MFE

New Mechanism for Configuring Discussions

The UI is not the only thing that's new. The whole mechanism for configuring discussions has also been revamped.

When authoring course content, you no longer need to create a discussion block and manually set a category and subcategory. With the new mechanism, you simply tick a checkbox for a Unit, and it will automatically be associated with a topic with the same name as the unit, and the discussions UI will show up for that Unit. By default, all Units will automatically be discussable unless they are in graded, or exam subsections.

There is no need for manually setting up a Discussions XBlock anymore

For units in graded subsections, discussions can be enabled using  a new configuration toggle. 

A migration path from the existing XBlock-based mechanism to the new mechanism is still in development. There are certain complex discussion setups, however, that are no longer supported with this new mechanism. 

A couple of scenarios that are no longer supported are:

New Discussions MFE

There is a brand-new Discussions MFE that is intended to replace the existing forum UI hosted by edx-platform. This new UI refresh modernizes the forum UI, making it easier to explore and navigate between topics. While it is still not officially released, it is possible to test and preview it in the latest Nutmeg release. 

This new UI is entirely API-driven, allowing quick browsing, sorting and filtering through topics, and posts. The MFE can be deployed to a subfolder or subdomain and independently accessed for any course that utilizes discussions. User avatars are now visible next to all user content, making conversations easier to follow.

A new UI has been added to manage learners in a course

There is an entirely new learners section that allows you to see learners in the course, and see their activity on the course. Moderators have the ability to sort learners based on most content reported/flagged for abuse, to make it easy to quickly spot users with most reported activity.

In-Context discussions can now be viewed in a sidebar next to units. The sidebar can be shown or hidden using an icon near the top right that can show different sidebars.

The in-context experience for discussions has also been updated. Rather than appearing in an XBlock in the course flow, discussions can now be viewed within a sidebar next to the course content.

New Discussions Features

The Open edX discussion forum functionality is the only backend feature that is written in Ruby as opposed to Python. While this remains the case, the Ruby forum component (cs_comments_service) has seen a lot of changes recently, with major new features.

The forum now tracks user activity, making it easier to track the level of contribution from different users. The learner section, for instance, will show users that have the highest levels of engagement first.

Edit reasons allow a moderator to clarify the reason for editing a post or comment
Post close reasons allow moderators to clarify the reason for closing a post

For moderation, there is now the ability to provide a reason when performing moderation actions, such as editing content or closing a post. When editing content or closing a post, moderators will see a UI to select a reason for performing that action. For instance, a moderator can select that a post is being closed since it's off-topic, or is a duplicate. Reasons for editing posts or comments, include corrections for grammar and spelling, or removing Personally Identifiable Information (PII), quiz/exam answers, etc. These reasons can be customized by Open edX admins during deployment through Django settings.

How to try out these new Features

If these recent changes seem exciting, you can check out the new discussions configuration experience using the Course Authoring MFE and see the new Discussions UI in action using the Discussions MFE. These MFEs can be set up like any other MFE. 

Using the Course Authoring MFE

If you’ve set up the new Course Authoring MFE, you can simply access it by visiting the following URL for any course: 

[MFE_URL]/course/[course_id]/pages-and-resources/

For instance, on the devstack, for the demo course you’d visit: 

http://localhost:2001/course/course-v1:edX+DemoX+Demo_Course/pages-and-resources/

To have better integration of this MFE with Studio, you need to add the discussions.pages_and_resources_mfe waffle flag to a course or globally. This will add a link to “Pages and Resources” under the “Content” menu in Studio. 

Previewing the new Discussions MFE

Once you’ve set up the Discussions MFE, you can visit the following URL for any course that uses discussions:

    [MFE_URL]/[course_id]/

For instance, on the devstack, for the demo course, you’d visit:

http://localhost:2002/course-v1:OC+NP+Test/

The following waffle flags are available to tweak this new experience:

Preview the new Discussion Configuration Experience

Previewing the new Discussions configuration experience is currently a little more complex, since the migration process for that is still being worked on. This area of the platform is in active development, and as such the process is bound to change. While this feature can be tested in Nutmeg, we’d recommend testing it in a sandbox or development environment running the latest Open edX code. 

However, you can test it out by with the following steps:

If you only saw one provider called “edX” it’s probably because your version doesn’t include the most recent changes. In that case, you may need to manually add a discussion configuration for your course. 

You will now be able to enable/disable discussion for individual units in your course without needing to add an XBlock.

This new experience is still actively being worked on and simplified, so expect this process to get a lot smoother over time, and the configuration to get further streamlined.

Use an Unsupported LTI Discussion Tool

While Piazza, YellowDig, InScribe, and Ed Discussion are available to set up using a simple UI Wizard. The process for configuring an unsupported provider isn’t very complex either. It just needs access to the admin panel. 

Since Lilac, the Open edX platform has had the ability to create a discussion configuration via thevia that the admin panel that will allow using an LTI tool instead of the internal forums. For this you need to visit the discussion configuration page in the LMS’s admin page at [LMS]/admin/discussions/discussionsconfiguration/

Once there, here is what you can do to set up your custom discussion provider:

The Discussion tab on this course should now embed the LTI tool. 

Note that if your provider needs access to a user’s username or email to work, you will need to explicitly enable sharing such PII with the provider using the following additional steps:

{
    "pii_share_username": true,
    "pii_share_email": true
}

Photo by Volodymyr Hryshchenko on Unsplash

[September Community Meetup] The September Open edX Meetup will happen on Thursday September 22 at 10am EST. It will feature two speakers: John Swope, from Curricu.me, and Ed Zarecor, VP of Engineering at tCRIL. John will demonstrate how to use Advanced Assessment and Javascript within the Open edX platform with fun and flexible exercises. Ed will share updates regarding the Open edX ecosystem. Registration is free, so save the date and join us!

-> Register for the event on Eventbrite

[August Meetup Recording] The recording of the August Open edX Community Meetup is now available. In the event, Hen Eytan from Annoto discussed how to use interactive video tools within e-learning modules to optimize learning, and how to leverage their analytics tool to monitor learner engagement. Elizabeth Madariaga, from Edios Media, discussed the topic of localizing courses and connecting with learners in their native languages. She presented a case study on a recent course translation project, including the issuing of certificates in the students’ native languages.

-> Watch the recording

[H5P XBlock] Community members Edly have just announced the release of the H5P XBlock, giving learners the ability to easily self-host and play H5P content in Open edX. H5P is an open source tool used to create rich and easily embeddable course content such as interactive videos, quizzes, and presentations. Previously, H5P content could be integrated via the LTI XBlock with some tinkering, but the new H5P XBlock makes things much easier!

-> See XBlock Github repo for details

[Documentation Call For Help] tCRIL are requesting contributions from Open edX Community members to help consolidate the platform's comprehensive documentation. The updated documentation will be organized around different personas and document types for an improved discovery experience. tCRIL are currently looking to crowdsource high-level tables of content for each persona. Click the link below to learn more and help!

-> Forum post for details and volunteering

[BTR Group Volunteers] The Build-Test-Release group is looking for volunteers to take on roles and support the delivery of the upcoming Open edX Olive release. Note that not all the roles require technical knowledge – for example, the group is also looking for people with project management or QA/testing experience. Get involved!

-> Read the forum post for the list of open roles

[Nutmeg Features] Nutmeg is the latest Open edX named release. Our friend Sarina Canelake, Engineering Manager at the Center For Reimagining Learning (tCRIL), published a short series of blog posts that look at some of the newest additions to the Open edX software.

The Nutmeg Feature Round-up offers a tour of several new learner and instructor-facing features, such as:

The Product Tours ​​blog introduces an amazing new feature focused on learner engagement – the Product Tour. This optional tool takes new learners for a comprehensive, in-context guided tour of the course layout that ends at the Course Goal Setting tool. edX®, who have implemented product tours earlier this year, have already noticed increased engagement and completion in learners who use the goals feature! 

The Nutmeg: Operator & Developer Enhancements blog is a technical piece that summarizes the changes (additions and deprecations) that impact the people who write code for Open edX or deploy Open edX instances.

[Meetup Recording] The recording of the latest (July) Open edX Community Meetup is now available. During this event, edtech company Readspeaker discussed how course authors can leverage text-to-speech solutions for a more inclusive learning environment. They demonstrated how their tools worked with the example of one of Esme Learning's Open edX sites (which are hosted and developed by OpenCraft 😉 ), and discussed various topics around the theme of accessible and universal design in education. 

-> Watch the recording
-> Learn more about universal design

This article was written by team member Kaustav Banerjee.

User Retirement in an Open edX platform is the very last stage of the user account’s lifecycle, which begins with registration of a new user. That is, it is the thing that happens when a user clicks on the “Delete My Account” button on the Account Settings page.

However, it is not a single step, but a series of steps resulting in deactivation of the user account, removal of the user’s Personally Identifiable Information (PII) from all services making up the Open edX platform, and culminating in permanently disabling the username and email address from being reused ever again.

In this blog, we will explore how the user retirement workflow is designed, the steps involved in user retirement, different ways of triggering user retirement, and how to enable reuse of a retired username and email address.

User Retirement Pipeline

The Open edX platform is not a single application, but a collection of services and IDAs — each handling a specific part of the user experience, such as course-discovery, discussion forum, eCommerce, etc.  Each of these services maintains relevant user data to correctly handle users’ requests.

This makes the process of deleting a user from the platform complicated. Merely deactivating the user account and removing their credentials is not sufficient. User data also needs to be deleted from each of these services for the platform to be compliant with regulatory frameworks such as GDPR.

To make things more complicated, running some of these services on the platform is completely optional, with the possibility of installing custom services as well. Therefore, the retirement process needs to be configurable so that it attempts to delete user data only from services which are actually being used in the platform instance.

To address all this, the retirement workflow is designed as a linear pipeline, where the user deletion request moves through a series of fully configurable States.

User Retirement States

When a user retirement is initiated, an entry is created in the UserRetirementStatus model, with the state set to PENDING. This is the very first state of the Retirement Pipeline.

In this step, hash values of the username and email address respectively are generated and stored in the UserRetirementStatus model along with the original username and email address. The email address in the User model is replaced with its hash value and the password is reset. This prevents the user from logging into the user account.

At this PENDING state, it is possible for the site administrator to cancel the retirement workflow if so requested by the user. This can be done either by using the cancel_user_retirement_request management command or by clicking on the ‘Cancel’ action button in Django admin. This restores the email address in the User model and deletes the entry from UserRetirementStatus. Cancellation of retirement workflow is not possible in any other retirement state.

The user then moves through a series of unique pairs of retirement states, each indicating that a stage or action of the retirement workflow is either underway or has been completed.

RETIRING_FORUM and FORUM_COMPLETE is one such retirement state pair. Here the RETIRING_FORUM state indicates that the forum retirement API has been triggered and deletion of user data from discussion forum service is underway and the FORUM_COMPLETE state indicates that the API has been successfully executed.

Any number of such pairs of retirement states can be configured and in any order, however each RETIRING_SERVICE state should always be succeeded by the corresponding SERVICE_COMPLETE state.

The COMPLETED, ERRORED, and ABORTED are the dead end states. That means the retirement workflow cannot proceed any further from any of these states. The dead end states, along with the PENDING state need to be mandatorily configured with all other states being optional.

The COMPLETED state is the very last state of the retirement workflow, indicating that all configured stages of the retirement process have been successfully completed.

At this state, the username is replaced in the User model with the hash values generated previously. However, the entry in the UserRetirementStatus model still contains a mapping between the hashed username/email address and the actual username/email address of the user. The retirement_cleanup API can be used to delete this entry, thereby completely removing the user’s original username/email from the platform.

The retirement workflow moves to the ERRORED state for one of two reasons — either there is an execution error during one of the retirement stages, or there is a discrepancy in the retirement states (such as the user moving from one state to a previous state).

A site admin can look into the cause of the error, fix it, and then manually move the user to a correct state, which would enable the resumption of  the retirement process.

The default list of the retirement states is defined in lms/env/common.py

This list can be configured by setting the RETIREMENT_STATES variable in /edx/etc/lms.yml
The active Retirement States are maintained using the RetirementState model.

Each state has an Execution Order Number, which determines the order of the states in the workflow. Any violation of this order of execution during the retirement process will lead to an error with the user moved to the ERRORED state.

The populate_retirement_states management command can be used to populate the RetirementState model or override the states which are already configured.

There is currently no out-of-the-box mechanism in Open edX to drive this retirement workflow.

Therefore this needs to be driven from an external service, or the tubular scripts can be used to either trigger the workflow execution manually or set up as a cron job to execute workflow at regular intervals.

Initiating User Retirement

There are a number of ways in which user retirement can be initiated:

  1. Users can initiate user retirement by clicking on the “Delete My Account” button on the Account Settings page in Account MFE. This in turn calls the DeactivateLogoutView API to trigger the retirement.
  2. Retirement can be initiated for multiple users simultaneously from an external service using the bulk_retire_users API.
  3. A site admin can trigger retirement on behalf of a user, using the retire_user management command.

Enable Reuse of Retired username and email address

As mentioned previously, the generated hash value of the username and email address, is used to replace the corresponding original credentials in the User model at different stages of the User Retirement Workflow.

As part of the validation process during user registration, the hash value of the new username and email address is calculated and queried against the User model to check if those hash values are already present. If so, the validation fails and the user is requested to choose a different username and email address. This is how the platform ensures that a retired username and/or email address is never reused.

There may be certain use cases, however, where the reuse of the retired user credentials would be desirable or even necessary. We here at OpenCraft encountered one such use case for one of our clients. This client used a third party external service for user management. That means, the client’s users would register, manage and deactivate/delete their accounts in a third party UI, and that service would use the correct APIs of the Open edX platform in turn to register and/or retire the user accounts in the platform. Now, using the third party service, it was possible for the client’s users to delete an account and then create another account using the same credentials. However, the user registration API in the Open edX platform would throw an error when using the retired credentials. This was a big problem for our client.

We looked for an existing solution to this problem and, not having found anything, we set out to design a solution for this problem ourselves.

There were a few considerations during the design of the solution:

  1. There must be other members of the Open edX community who share this requirement of reuse of retired user credentials for their different use cases. So a one-off code change for our client would not be sufficient. Our solution must be usable for the wider Open edX community.
  2. The user APIs are a very core part of the Open edX platform, with almost all parts of the platform being affected by them. Therefore, any changes to the user APIs would not only require thorough regression testing, it could also be months — if not years — before they are fully reviewed, accepted, and merged with the upstream codebase. Even then, the changes would only be available in the subsequent stable release for regular platform users. We thus needed a solution that could be easily configured with existing installations and be available for use by the community right away.

This led us to create the enable_retired_username_email django app.

This app is designed to be installed along with the Open edX installation using pip:

pip install -e git+https://github.com/open-craft/enable-retired-username-email.git@v1.0#egg=enable-retired-username-email

Or by setting the EDXAPP_PRIVATE_REQUIREMENTS variable while installing the Open edX platform using ansible.

This app receives the post_save signal from the UserRetirementStatus model, and does one of two things:

  1. If an entry has just been created, it replaces the hashed username with a friendly name in the form of deleted_user_<user_id>. This is done so that during the retirement workflow, all services which replace the original username with the hashed username use this friendly name instead.
  2. If the entry is in the COMPLETE state, a hash of the string <email_id>+<current_timestamp> is calculated. This email address in the corresponding User model, which now contains the hash of the original email address, is replaced with this new hash value. The entry in the UserRetirementStatus model is deleted, thereby removing all traces of the original credentials and its corresponding hash values.

Voilà! We hope this is useful, and let us know via comments below or at contact [@] opencraft.com if you have any comments or questions!

Photo by Tandem X Visuals on Unsplash

Here's a recap of our April 2022 newsletter:

This edition of our newsletter will be shorter than usual, because our team is currently retreating in beautiful & sunny Lisbon, Portugal. ☀️

We're seeing each other for the first time in three years, and we're having a great time! The weather is beautiful (although quite windy at times!), the food is amazing, and we're spending quality time together. We'll soon be sharing a blog post and more details on what we've been doing here – but in the meantime, here are a few pictures. Até já!

(and sorry to those of us who could not attend because of visa/covid/other issues – we miss you dearly!)

[Open edX Conference] At the time of reading this newsletter, our team will be right in the middle of attending the 2022 Open edX Conference, hosted in Lisbon. We're busy presenting talks and workshops, helping with conference organization, chatting with friends and members of the community, and doing all sorts of activities. We'll be posting a recap of the conference next month, so stay tuned!

-> Review the conference program

[Platform Product Management] tCRIL have created three new spaces to increase engagement and interaction of Open edX Product Managers and community members across the ecosystem: the Product Working Group Slack Channel, the Open edX Roadmap, and the Open edX Product Management wiki. Please join the Product Working Group using the Slack channel if you're interested in getting involved! 

-> See Open edX blog post

[Open edX Conference] The program and schedule for the 2022 Open edX Conference are now live! Please visit Sched to see the full program and build your own custom conference schedule. Conference registration is also still open. The 2022 Conference spans four days:

Tues, April 26 – Registration + Tutorials and in-depth training
Wed, April 27 – Conference Day 1 and evening reception
Thu, April 28 – Conference Day 2
Fri, April 29 – Developer Summit
 This year, conference sessions have been grouped in three distinct tracks: Pedagogy & Instructional Design, Platform & Product, and Extensions & Integrations. 

The OpenCraft team is delighted to participate and contribute to the conference, as always. For our contribution this year, we are members of the conference planning committee, have submitted a record number of session proposals, and also are sponsoring the evening reception! Our team is very excited, and we hope to meet you soon in Lisbon : )

-> Read more about sessions, speakers & sponsors on the Open edX blog

[Technical Oversight Committee] The Open edX Technical Oversight Committee (TOC) has recently completed its roster with three new members, including none other than OpenCraft CEO Xavier Antoviaque! Our team is proud, and humbled, by this nomination — it is a nice testimony to OpenCraft's deep and lasting involvement in the Open edX community.

As announced a few months ago, the committee will be responsible for governing the overall technical direction and stewardship of the Open edX project. The addition of members coming from the broader community is an important step in establishing a more inclusive and open leadership for the Open edX project.

[Open edX Survey] The Center for Reimagining Learning (tCRIL) is conducting a survey to capture a more detailed understanding of the Open edX scope and impact. They aim to use the survey results to answer questions about the number of instances deployed, the platform's reach, sectors served, and so on.  The results of the survey (which will be anonymized and aggregated) will be presented at the Open edX Conference in April.

If you host the Open edX platform for yourself or your clients, please take a few minutes to answer the survey. The data will help the community make more informed decisions about the future of the platform.

-> Read the instructions on how to answer the Open edX Survey

[OpenCraft in Lisbon] After 3 years of not seeing each other, OpenCraft is finally able to organize a team retreat in Lisbon : ) Most of the team will fly to Portugal the week before the Open edX Conference, and we're looking forward to seeing each other again. We'll be operating from a co-working space, living together in Airbnbs, doing various activities together, and eating way too many pasteis de natas. Hit us up if you're around! We'll post a recap of our time together in an upcoming newsletter.  

This article was written by Sarina Canelake, Engineering & Community Manager at The Center For ReImagining Learning (tCRIL).

The Open edX Core Contributor Program grants community members expanded rights and ownership over various aspects of the Open edX Project, allowing them to actively participate in defining and deciding the direction of the platform. Members of the Core Contributor program earn this distinction by participating in Open edX community with distinction. They embody what we call the “3 Cs”: Commitment to the project, exemplary Conduct, and high Caliber contributions.

The program began in 2020, with an initial 9 community members being granted write access rights to various Open edX code repositories. Since then, the program has expanded to include nearly 40 core contributors, who not only commit code but oversee translations, manage projects, and more.

Recently we codified the program in OEP-54. “OEP” stands for Open edX (Enhancement) Proposal. An OEP is a document that details a specific decision being made by the Open edX community; the community agrees that they will follow the processes defined in the OEPs.

In OEP-54, we define various aspects of the Program, such as membership criteria and the nomination process for a new member. I’ll dive into some of these, with a focus on Core Contributors who commit code changes.

Types of Core Contributors

As we’ve expanded the number of Core Contributors who can commit code, we’ve also begun expanding the number of roles a Core Contributor can take on. Contributors are welcome to hold more than one role, as well! A full list of roles and responsibilities can be found at this link; a few roles I’ll highlight are:


Let’s Begin!

For information on how to really dig into the community, see OEP-54’s “Where Do I Start?” section - there’s a lot of good resources there to get you started, as well as a few pointers on how you can reach out on the forums or to specific working groups. Joining a working group is a wonderful way to meet members of the community and get started on tasks identified by the group as having high value.

For those who code, I recommend joining the Build-Test-Release or Frontend working groups, as both groups tend to have a backlog of tasks they’d like people to pick up. The Deprecation working group is pretty fun (in my opinion!) - they focus on removing dead code from the system. They also tend to have a large backlog, but some tasks may be pretty complicated unless you know some Open edX architecture or are strong in Django/Python.

If you work at a company that’s developing Open edX features you’d like to someday see in the main codebase, you should reach out early in your development process to get pointers on the best way of architecting and implementing your change in order for it to have the greatest chance of being accepted. Reach out in the discussion forums in the Collaborative Proposals topic. Submitting your bug fixes, changes, and features upstream is a great path towards becoming a Core Contributor.


Becoming a Core Contributor

Community members who have demonstrated the 3 C’s, with a history of contributions to the Open edX project, may be nominated for inclusion in the program by an existing program member. For coders, the nomination would specify one or more repositories in the openedx GitHub organization for the nominee to get write access to. The process is designed to be straightforward and transparent: it takes place on the discussion forums, and other Core Contributors in the program weigh in on the nomination. Members are encouraged to give constructive feedback if they don’t feel a nominee is quite ready to join the program.

The Core Contributor program is administered by The Center for Re-Imagining Learning (tCRIL), the nonprofit organization that stewards the Open edX project. At any point on the road to becoming a core contributor, the program administrators may be reached in the #core-contributors Slack room in the Open edX Slack, or at cc-program-admins@tcril.org.

It’s been a joy and a privilege to be a part of the Open edX community and to have the chance to help administrate the Core Contributor program. I look forward to working with more and more of you as the program goes.

—---

Sarina Canelake
Engineering & Community Management, tCRIL

Sarina has 5+ years experience hacking on the Open edX platform and working with the Open Source community. She is dedicated to enabling open source contributors to the Open edX platform via extensibility and process improvements. She lives in Boston, MA with her 3 cat sons and has a lifelong love for all things Pokémon.

Photo by Chang Duong on Unsplash

[Conference Themes] The 2022 Open edX Conference will be hosted in-person in Lisbon, Portugal, from Apr. 26-29. You should register as soon as possible – the early bird rates end on Feb 28th!

The Open edX team is putting together an ambitious program: the conference will present innovative uses of open source technology in higher education and inside corporations, across a global scale. Attendees will participate in exciting talks about advancements in platform features, instructional design, course production, and technical sessions for operating, extending, and enhancing the Open edX platform. All members of the OpenCraft team have submitted proposals — we're looking forward to seeing you at our sessions! Stay tuned for the conference program reveal next month.

->  Schedule outline, travel guidelines, and more

[Keynote Speakers] The Open edX team have announced this year's keynote speakers for the Open edX Conference:

Keynote speeches will take place on the mornings of April 27th and 28th. Additional details about the tutorials and workshops will be announced in the coming weeks.

-> Read the full announcement

[Core Contributors] After a successful pilot, the Core Contributor Program has officially been defined, reviewed, and adopted as an Open edX Proposal (OEP-54) by the community. Victory! ?  

The foundational document defines Core Contributors, explains its motivations, details all roles and processes involved (such as nominating new Core Contributors), and features a change log. Our tCRIL friend Sarina Canelake will soon publish an article on our blog that further details the history and key items of the Program.

As a reminder, Core Contributors is a program that grants rights to individuals in the Open edX community that allow them to actively participate in defining and deciding the direction of the platform. At the time of writing, 11 members of the OpenCraft team are Core Contributors, along with many more members of the community from around the world. 

We would also like to take the opportunity to welcome newcomers Jorge Londoño, Maria Grimaldi, Andrés Gonzales, JayRam Nai, and Dean Jay Matthew to the Program. Congratulations on your Core Committer nomination, and welcome aboard! : )

-> Core Committers Program definition

[Translations] The Translations Working Group was formed with an initial focus on improving platform translation for ten languages: Spanish, French, Arabic, Italian, Hindi, Portuguese, Russian, Ukrainian, Mandarin, and German. The group needs additional translators for Arabic, Hindi, Russian, and Ukrainian — please let us know if you're interested!

[Contribute To This Newsletter] We would love to turn this newsletter into a community effort. Do you have any news about Open edX that you would like us to share? Please let us know by going to the Newsletter threads on either OpenCraft's public discussion forum or the Official Open edX forum!

This article was co-written by OpenCraft team member Adolfo Brandes and Daniel Seaton, Sr. Learning Systems Designer at MIT.

In this article, we'll describe how problems, videos, and pages from Open edX courses can be reused on the Canvas LMS via a new LTI implementation in Libraries v2, a feature recently developed by OpenCraft for MIT Open Learning. This project builds upon a wider effort commissioned by edX to enhance LTI compliance (1,2) and build more flexible and robust content libraries (1) for the Open edX platform.

Before getting into the details, let's dive a little on why this was done in the first place.

The Problem With Exporting Content

If you've ever authored courseware, you know how difficult it is to produce quality content.  And if you spend a lot of time doing it, chances are you'll end up with an extensive library on a particular platform, such as Open edX courseware.  What happens, though, when you want to reuse that content elsewhere?  Few people would relish rewriting everything from scratch!

There are different ways a platform can allow content to be reused.  The most common is by letting data be exported.  This has been possible in Open edX since its inception: one can export courseware using the Open Learning XML format.  But while it's straightforward to import the resulting tarball into a separate Open edX instance, bringing this content into another platform altogether presents a series of challenges:


Luckily, an organization called the IMS Global Learning Consortium came up with LTI, which aims to solve the issues above.  LTI is short for "Learning Tools Interoperability": as long as both platforms support it, you can simply point the target platform to the source, and voilà!  The learner will be able to interact with your painstakingly created content transparently, no import necessary.  Best of all, if you make changes to the original content, those changes will be reflected anywhere you have reused it.

Open edX has been able to act as an LTI provider for a long time, and Canvas has correspondingly been able to consume from Open edX courses on a block-by-block basis.  What else was needed, then?  

Courses Make Poor Libraries

Here's the thing.  Reusing content originally written as part of a regular course is clunky at best.  There are difficulties with content structured in this manner, particularly when it comes to Open edX:


It is for these and other reasons that Content Libraries development began in 2019.  (OpenCraft CTO Braden MacDonald gives a great overview of the motivation behind this push, which includes the Blockstore backend, in this video.)  With better search features and making grouping of related content much easier, they’re designed to support content reuse within Open edX courses.

The catch?  As of early 2020, Open edX Content Libraries did not yet support any kind of LTI integration.  While it was possible to reuse library content from within an Open edX instance, you couldn’t do so externally.

Enter MIT, Content Libraries, and LTI

MIT, by any measure, is a heavy user of Open edX, maintaining an instance solely for on-campus teaching and learning. The instance has hosted over 200 unique courses for MIT students, leading to more than 35,000 unique problems, 15,000 unique videos, and 23,000 pages. The on-campus instance of Open edX is not the primary LMS at MIT, but exists as an optional system for creating enhanced, blended learning experiences.

In Fall 2021, the Canvas LMS was introduced at MIT to replace a homegrown, legacy system that did not offer the features of a modern LMS. Given the extensive library of rich content on MIT’s on-campus Open edX instance, the introduction of Canvas created new opportunities to think strategically about content integrations between the two platforms. MIT approached OpenCraft about their recent work on Content Libraries with Blockstore and began formulating a starting point to address broader ambitions related to content interoperability.

In short: MIT needed LTI for Content Libraries.  So, over a few months at the end of 2021, OpenCraft built not only a way for Canvas to use LTI to integrate Content Libraries, but a way for authors to import content from preexisting courses into Content Libraries. The current implementation allows single xblocks (e.g., a problem, video, or page) to be reused via LTI.

Trying It Out

Instead of just describing the new features, let’s show you how to actually use them with the Open edX and Canvas development environments. (The steps below require you to set up a local Open edX devstack and a local Canvas development environment.)

Set up the base development environments

To start, set up your Open edX devstack with the Libraries v2 frontend and Blockstore backend, as outlined in Library Authoring project README.  Then proceed to set up a Canvas development environment using the automated setup described in its Quick Start guide.  We won’t walk through individual steps in setting these environments up, as that would be beyond the scope of this post.  Worry not, though!  The corresponding setup procedures are well documented in each project.

From this point on we’ll assume you were able to set them up successfully, including being able to access:


Preparing Canvas

Continue by logging into your local development instance of Canvas as an administrator, and creating a Developer Key.  You can do so from the Admin > Account panel, as shown below:

To start creating the key, click on + Developer Key, then + LTI Key, like so:

On the "method" drop-down, select "Paste JSON", and copy/paste the following into the text box (you could fill fields individually, but this makes it easier!):

{
    "title": "edX Content Library",
    "scopes": [],
    "extensions": [
        {
            "platform": "canvas.instructure.com",
            "settings": {
                "platform": "canvas.instructure.com",
                "placements": [
                    {
                        "placement": "assignment_selection",
                        "message_type": "LtiDeepLinkingRequest"
                    }
                ]
            },
            "privacy_level": "anonymous"
        }
    ],
    "public_jwk": {},
    "description": "edX Content Library",
    "custom_fields": {},
    "public_jwk_url": "http://127.0.0.1:18010/api/libraries/v2/lti/1.3/pub/jwk/",
    "target_link_uri": "http://127.0.0.1:18010/api/libraries/v2/lti/1.3/launch/",
    "oidc_initiation_url": "http://127.0.0.1:18010/api/libraries/v2/lti/1.3/login/"
}

Note: the last three URLs point to Studio on your local Open edX devstack.

Give the key a name, such as “Open edX Tool”, and save it.  Then immediately enable it by clicking on its ON button as shown below, and copy the client ID (“10000000000001”, here) to your clipboard.

Now we’ll add an “App”.  Go to Site Admin > Settings, and on the Apps tab, click on the + App button.  Choose the “By Client ID” configuration type, and paste the client ID from the key you created above:

After clicking Submit, confirm you want to install the app by clicking on Install.  You should now see an “edX Content Library” app in the list of external apps.

Click on the app’s configuration icon, then on Deployment Id.  You’ll need the identifier (here, “1:8865aa05b4b79b64a91a86042e43af5ea8ae79eb”) when setting up Open edX, so copy it to the clipboard.

Preparing Open edX

Start by enabling the content libraries LTI tool for Studio.  You’ll need to edit the Features setting from the Studio container itself:

cd devstack
make studio-shell
vim /edx/etc/studio.yml
...
FEATURES:
ENABLE_CONTENT_LIBRARIES_LTI_TOOL: true

Save the file, exit, and restart Studio via:

make studio-restart

Next, you’ll need to pre-generate a JSON Web Token keypair as a means for Open edX and Canvas to trust each other.  An easy way to do it from the command line using SSH and openssl is:

ssh-keygen -t rsa -b 4096 -m PEM -f jwt.key
openssl rsa -in jwt.key -pubout -outform PEM -out jwt.key.pub
cat jwt.key
cat jwt.key.pub

Note the contents of each file, as you’ll need them shortly.

Now log into Studio as an administrator, then proceed to the Django admin interface at the following address:

http://localhost:18010/admin/lti1p3_tool_config/

Click + Add on the “Lti 1.3 tool keys” entry, give it an arbitrary name, and paste the corresponding keys you created above.  In other words, under “Private key”, paste the contents of jwt.key, and under “Public key”, paste jwt.key.pub, like so:

Once the key is saved, go to the list of LTI tools at:

http://127.0.0.1:18010/admin/lti1p3_tool_config/ltitool/

Click on ADD LTI 1.3 TOOL on the top right, and fill the fields with the corresponding information:

That’s it!  When you click save, Open edX Content Libraries and Canvas will be set up to communicate with each other via LTI.

Creating a Library from Scratch

What’s left to do is to actually create a content library with some content in Open edX, and to finally consume it in the Canvas instance.

Start at the Open edX library authoring frontend, which in the devstack setup is located at:

http://localhost:3001

Click on New Library, filling the fields out as you see fit: the library details are arbitrary.  Just make a note of them for later!  For instance:

After submitting, add a “Poll” block by clicking on the Advanced button, then on Poll.  (For the purposes of testing LTI integration, you don’t need to customize it, but feel free to do so by clicking on the block’s Edit button.)  The block should be visible in the library you created, like so:

Next, you'll need to explicitly allow this library to be shared via LTI.  For now, the only way to do so is via Studio’s admin interface, at:

http://127.0.0.1:18010/admin/content_libraries/contentlibrary/

Click on the library's ID (in this case, "library01") to edit its metadata.   Under "Authorized LTI configs", simply click on the first "LtiTool object" (which refers to the LTI configuration that points to Canvas you created earlier) so that it remains selected:

Click Save, then go back to the library authoring frontend and the library you created (here, http://127.0.0.1:3001/library/lib:DeveloperInc:library01), and refresh the page.  You should now see a "Copy LTI URL" button alongside the poll block you just created.

The presence of the Copy LTI URL button is confirmation that this library is accessible via LTI.  Click on it: doing this will copy this block's LTI integration URL to your clipboard.

Import from an Existing Course

Instead of creating blocks from scratch, you can also import them from a preexisting course into a library.  To do so, go to the library’s Settings menu, and click on import:

Next, click on Show Importable Courses, then import the Demonstration Course by clicking on its Import Course button.  After a few seconds, the import should be completed:

If you then go back to the library page, you should see a list of all the imported blocks, all of which could also be used via LTI:

Consuming Open edX content from Canvas

Now, go back to the Canvas Dashboard and click on Start New Course.  Give the course any name you like, then from its home page click on Assignments, then + Assignment to create a new (you guessed it!) assignment.  Its name is also arbitrary (we're calling ours "Open edX Poll"), but under "Submission Type", choose "External Tool".  And for External Tool URL, paste the LTI URL that's on your clipboard.  In our case, it looks like this:

http://127.0.0.1:18010/api/libraries/v2/lti/1.3/launch/?id=lb:DeveloperInc:library01:poll:c3fe9810-3811-4794-878f-da08ca07ff00

Click on save, and… That's it!  Your Canvas learners should now be able to interact with the poll block from within a Canvas course, just as if they were using it inside Open edX.  And yes, this includes grading!

Note: LTI urls can also be used in an <iframe> in any Canvas Page, which is great for embedding videos, pages, and other non-graded content. An easy way to try this is by including an LTI url, for a video or page, within the content editor for an assignment. You can include an <iframe> with an LTI url anywhere you can access the Rich Content Editor in Canvas. 

The Future

It's still early days for Open edX Content Libraries, but the fact that Library items can now be used via LTI integration opens up a realm of possibilities.  Because libraries are unbound from the traditional courseware structure, they allow more effective content reuse.  And because their content can be accessed programmatically, it can be used in all kinds of interesting ways, for instance, for adaptive learning. In addition, Libraries offer an easier entry point to the vast array of Open edX problem types. Allowing instructors to start their authoring journey from a Library might make for an easier introduction to the power of the Open edX platform.

If you’d like to know more, let us know!

Header image: "Canvas Skies" by Nichole Renee is licensed under CC BY 2.0

[Governance] As the stewardship of the Open edX platform is moving from edX/2U to the newly formed Center For Reimagining Learning (tCRIL), the team has announced the creation of a Technical Oversight Committee (TOC) as a new governance structure to the project. The TOC will have nine members: three from The Center for Reimagining Learning, three from edX/2U, and three from members of the rest of the Open edX community. The first six members were recently nominated, and the remaining three members will be chosen soon.

-> Read the Technical Oversight Committee's foundational charter

[Virtual Event] The end-of-year community virtual event took place on December 14th, bringing a successful conclusion to a landmark year for the Open edX platform. Ed Zarecor from tCRIL presented a "State of Open edX" keynote that covered the creation of tCRIL, the platform's new governance structure, and the Maple release. We also enjoyed watching other talks on the program, and had fun talking with old friends and new!

-> Watch talk recordings and download presentation materials

[New Release] Maple, the latest stable version of Open edX, was released on the 20th of December, thanks to the great work of the Release working group ? ! Maple brings a good amount of fixes and features, such as the implementation of the new Learning Micro Front End as the default platform experience, granting course and library creation rights on a per-organization basis, and improvements to the Common Problem Editor — so be sure to upgrade your Open edX instance(s)! Also, please let the working group know if you spot any bugs or issues.

-> Read the official announcement

[Core Contributors] Core Contributor work is now organized into 2-week sprints, which aim to help coordinate contribution efforts and drive more contributions. During the first-ever Core Contributor sprint, the focus was on helping to assign the remaining open issues for Maple from the release working group board. It was also nice to get to meet all the core contributors!

-> Check out the latest Core Contributors Sprint

[Marketing] The Marketing Working Group is working on a number of issues to improve the Open edX platform's marketing ecosystem, such as preparing community member presentation videos, creating various promotional materials, and helping redesign the provider marketplace experience on the Open edX website. 2021 has been a productive year, and the group is excited about the year to come!

-> Check out the Marketing Work Group's Trello board

[Translations] The Translations Working Group, was formed with an initial focus on improving platform translation for ten languages: Spanish, French, Arabic, Italian, Hindi, Portuguese, Russian, Ukrainian, Mandarin, and German. The group needs additional translators for Arabic, Hindi, Russian, and Ukrainian, so please let us know if you're interested! The group is also working on implementing automated translation for the official platform documentation — something that has been long requested by the community. We'll keep you abreast of our progress on this topic in the upcoming newsletters.

-> Check out the Transifex Work Group's Trello board

[Newsletter Contributions] We would love to turn this newsletter into a community effort. Do you have any news about Open edX that you would like us to share? Please let us know by going to the Newsletter threads on either OpenCraft's public discussion forum or the Official Open edX forum!

[2U Acquisition] E-Learning company 2U has completed its acquisition of the edX.org website and assets, as announced in Open edX's recent blog post. The Open edX project itself isn’t included in the sale. The proceeds from the transaction will fund a new nonprofit which will take over stewardship of the project, and also invest in other online learning projects. A Technology Oversight Committee (TOC) will be created to lead the Open edX platform's development and community governance. The committee, whose members have not been announced yet, will include representatives from the nonprofit, edX/2U, as well as other community members. edX and U2 have also made a formal pledge to contribute to the ongoing development of the platform.

-> Read the official press release by edX/2U

[End-Of-Year Virtual Event] All members of the community are invited to join Open edX's end-of-year virtual conference and meetup, scheduled on December 14th, 2 pm-5 pm UTC. The keynote speech will be a "State Of Open edX" discussion about the creation of the new nonprofit, and the way forward for edX and 2U following the acquisition. Attendees can expect a few additional talks, along with ample time for chatting and networking. We are looking forward to seeing you there!

-> Read more and register for the event on the Open edX blog

[Upcoming Release] The Build-Test-Release working group has launched the Maple beta 1 release and commenced testing it. The working group is encouraging all community members who have the chance to test Maple as well, especially if you’re using a feature in the Open edX platform that isn’t widely used. A few issues have already been reported, and we need volunteers to help fix them. These issues are low-hanging fruits and good first issues for anyone to get started with. If you’ve ever considered contributing, now would be a great time!

On some additional news, the Lilac 3 open release has been released. You’re encouraged to upgrade your Lilac instances.

-> Click here to check the Maples issues that need some love

[Core contributors] The Core Contributor program continues to grow with the addition of the first new Product & UX Core Contributor, Ali Hugo from OpenCraft, and a potential Product Management Core Contributor in prospect. To better provide context about each contributor’s efforts to one another, the idea of adding sprints is being discussed and contributors are encouraged to participate.

The frontend working group is working on removing IE 11 support and upgrading to Node.js 16. The data working group has recently been discussing the ElasticSearch vs OpenSearch issue.

-> Read more community meetup updates

[Tech Radar] The Open edX Tech Radar, first announced a few months ago, is now live! The Open edX tech radar is a visualization tool that represents the technologies used in the platform. Its goal is to help new developers get involved, but also to facilitate reviews and discussions about technologies, frameworks, techniques, and tools used in the platform. The radar was built through community effort and is maintained by the community in Github.

-> Learn more about the tech radar

Here is a recap of our October 2021 newsletter:

[Maple Release Update] The master branches for Maple, the next Open edX Release, have been prepared and announced! Note that the prepared branches are mainly for community members interested in helping review and build Maple, and not for public consumption. Tutor also recently added support for the master Maple branch.

If you’re a community member interested in helping build Maple and/or Tutor support, please set up Maple using Tutor and report any issues you face to the build/test/release working group on the official Open edX forum. 

-> Learn more about the Maple release on Confluence

[Core Contributor Program] The Open edX Core Contributor Program has recently confirmed several additional members in its ranks, including additional OpenCraft team members. This brings the current number of Core Contributors to 16, including eight OpenCraft team members!

The Program, which initially focused on technical contributors called code "Committers", has now expanded to also include Non-Technical Contributors who help with platform translations, marketing activities, project management, and more. Open edX Core Contributors earn their designation through committing 20h+/month of active participation in the Open edX community by contributing code or translations to the project, serving on working groups, etc. Our team currently features 7 code Committers, and 1 Non-Technical Contributor. 

-> Read more about the Core Contributor Program

[Open edX Theme] OpenCraft is on a mission to build an improved and great-looking open-source Open edX theme! We’ve started wireframing the course pages of our new theme and would love any feedback from the community.

What a cool-looking wireframe!

Check out the static wireframes here. Use your left and right arrows on your keyboard to see the different pages in the presentation. Your feedback is very important to us! You can access the theme's Gitlab repository for the latest progress, and use the official forum thread linked below to suggest changes.

-> Share your feedback on this official forum thread

[Platform Translations] The Transifex Working Group has been making good progress  over the past few months on advancing the Open edX's platform translations. The working group is still looking for community members to submit and review translations in the following languages: Ukrainian, Russian, Mandarin, Hindi, Portuguese, and Arabic. Let us know if you're interested in contributing!

-> Visit the group's Confluence page for detailed information

This article was written by OpenCraft team member Giovanni Cimolin da Silva.

A good way to assess learners in online courses is to evaluate essay-type text responses through a set of well-defined quantized criteria (called rubrics). 

The Open Response Assessment (ORA) is a component available in the Open edX platform that allows creating free-text input and offers a variety of evaluation methods based on rubrics: peer-graded, staff-graded, or self-assessment. 

In early 2020, edX decided to improve the usability and user experience of the ORA block, as well as implement new features through a blended development project with OpenCraft.

Blended development projects are funded by edX to implement roadmap features and promote collaboration between edX teams and partners in the community while increasing edX’s development throughout. You can find more information about these projects in the Blended Development Runbook.

Here is a summary of the improvements that were made as part of the development project:

Authoring Ease & Usability Improvements

Many changes on this project were aimed at making the ORA authoring experience easier and simpler for instructors. The ORA block is now displayed as a top-level block in Studio, and offers some pre-configured templates.

Animated image showcasing the ORA templates feature.

The ORA configuration menu was improved. The schedule and assessment steps settings were moved to separate tabs to simplify the user experience. The assessment steps tab now allows easy configuration of the evaluation steps and hides unnecessary settings. The schedule tab handles all dates and deadlines settings separately.

New view of ORA settings, showing separate tabs for schedules and assesment steps configuration.

Reporting & Moderation

When peer assessment steps are enabled, it’s common for some students to get stuck waiting indefinitely, especially at the start or end of a course, when there’s not much activity. Students in this state are either waiting for peers to grade their assessment or waiting for assessments to be graded.

One of the new changes is a screen in the instructor dashboard that displays a list of students stuck in the Waiting step and allows instructors to override grades and apply staff grading directly from that screen. 

Animated image showcasing the new Waiting step dashboard functionality, where an instructor can identify stuck learners and apply grade overrides.

You can read more about this feature on Accessing Metrics for ORA Assignments.

Previously, ORA data reports were hard to use since no human-readable user information or block was exported. This left instructors to map students using the exported anonymous user ID manual outside of the platform. On this project, they were improved and now include the real username (instead of only the anonymous ID username), block id, and the readable problem name. This makes it easy to interpret the files, parse submission information, and map this data to actual students.

Additionally, there’s a new report in the Data Downloads tab that allows downloading of all responses submitted by students for offline grading. See the detailed documentation for this report on Accessing Metrics for ORA Assignments

Learner-facing improvements 

Learners will now be able to submit nicely formatted answers through a WYSIWYG editor instead of plaintext submissions. 

See Create an Open Response Assessment Assignment for information on how to set this up on your instance.

Additionally, peer assessment steps (assess peers and waiting for peer assessments) are now non-blocking, allowing students to assess their own response and get a staff grade at any time in the process. 

Final notes

These improvements were developed and merged to the master branch of Open edX: they are partially available in the Koa and fully available in the Lilac release. Check out the Open Response Assessments documentation for details and detailed usage instructions for the new ORA features.

If you want to start using the latest ORA improvements, you can try OpenCraft's Pro&Teacher offering free for 30 days. You'll get a fully dedicated Open edX deployment running on the latest release of the platform.


[Community Event] The Open edX community hosted an online event on Friday, September 17. It featured a talk by Ed Zarecor on the state of the Open edX project, a case study on using the platform to address public sector online education needs by academia, and a review of the platform’s market niche. We also discussed where the community can focus in order to expand its reach in the e-Learning space. We enjoyed getting to talk with other community members in the Gather space and hope to see you at the next one!

-> See the event's Youtube playlist

[Maple Release] The next release of the Open edX platform, called Maple, is scheduled to release on December 9, 2021. A beta version will be made available in early October to allow the community to test the software, report bugs, and improve documentation. Stay tuned for more news about Maple next month when the test branch is released!

-> Learn about early Maple features on Confluence

[Multi Sites] Did you know that a single Open edX instance could be split into multiple "sites," each with its own theme, home URL, and course catalog? The process of creating and administering sites can be quite tedious. To address this, we developed Sites Generator, an open source tool that automates the whole process! Read the blog post to learn how to configure Sites.

-> Explore Sites-Generator's public code repository

[Frontend] The Open edX team announced the creation of a Frontend working group that will be responsible for stewardship of the frontend of the Open edX platform. The group welcomes members of the community to discuss the goals and challenges of the platform's frontend features and partake in key technical decisions.

-> Learn more on the Frontend Working Group wiki page

This article was written by team members Shimul Chowdhury and Guruprasad Lakshmi Narayanan.

An Open edX "site" presents a catalog of courses and course content in an individual way. A vanilla Open edX instance features a main, single site by default, but — did you know the platform could support multiple sites, all hosted on the same instance? All sites can be configured independently of each other: for example, you can assign a different visual theme to each site, along with a unique homepage URL, and a specific course catalog.

Deploying multiple sites requires a little work. The official documentation is a great start, but things get complicated fast if your platform uses additional services such as eCommerce and Course-Discovery. Additional services require additional configuration to be able to work in the context of a custom site.

We'll start by listing the steps needed to configure a site manually. Then we will recommend an easier way to achieve the same via Sites Generator, a neat automation tool that we built at OpenCraft.

LMS

The following configuration should be added to the LMS:

Organization

If we want to create a separate site for each organization offering courses on the instance, we need to create that organization at - <LMS_ROOT>/admin/organizations/organization

Site

Then we can set up a site using the Django sites framework by adding a new site here -  <LMS_ROOT>/admin/sites/site/

SiteConfiguration

With the SiteConfiguration model, we can tailor different aspects of each site according to our needs. We can add/update SiteConfiguration values for a site from <LMS_ROOT>/admin/site_configuration/siteconfiguration/

The Open edX documentation has a pretty comprehensive list of available parameters that we can tweak using the SiteConfiguration model. We need to make sure we set up the following configurations for the custom site to work correctly -


eCommerce OAuth Redirect URI

To have eCommerce work independently for each site under its custom sub-domain, we need to add an OAuth2 redirect URL from - <LMS_ROOT>/admin/oauth2_provider/application/ 

This ECOMMERCE_PUBLIC_URL_ROOT has to be the new eCommerce site that we will be creating in a moment.

The default ‘ecommerce-sso’ application gets overwritten every time we deploy our instance via Ansible. So, we have to apply the above changes after every redeployment. To avoid this, we can create a separate OAuth2 application for setting up the SSO for custom eCommerce sites.

The site-generator application does this automatically.

Course-Discovery

We have to configure the following models to allow using a custom discovery site corresponding to each LMS site.

Site

For each custom site in LMS (with course_org_filter applied), we need a separate Discovery Site. Add a new Site from - <DISCOVERY_ROOT>/admin/sites/site/. The domain name should be the same domain as COURSE_CATALOG_API_URL in LMS SiteConfiguration for our custom site.

Partner

Create a Partner for each custom site from - <DISCOVERY_ROOT>/admin/core/partner/


eCommerce

We have to add the following configuration in eCommerce for each custom LMS site.

Site

We can create a new site from - <ecommerce_domain>/admin/sites/site/add/

The domain name of the created site should be the same as the value of ECOMMERCE_PUBLIC_URL_ROOT specified in the SiteConfiguration instance of the corresponding custom LMS site.

Partner

We can create a partner for the custom site from - <ecommerce>/admin/partner/partner/add/ and select the site we created above.

Site Configuration

We can set up the site configuration for the custom ecommerce site created above from - <ecommerce>/admin/core/siteconfiguration/add/

We have to properly configure the OAuth settings here so that the eCommerce login works correctly.


OpenCraft Sites Generator

As we can see, setting up a custom site requires many careful steps. So, imagine setting up 10 or 20 sites manually. No, thank you! Not to mention the risk of forgetting to update a configuration somewhere during edits or updates.

To tackle this problem, we at OpenCraft have created the Sites Generator open source application. It is a set of scripts that automates setting up custom sites in an Open edX installation across the LMS and other Independently Deployed Applications (IDA) like course-discovery and ecommerce. It allows you to use a single configuration file rather than manually maintaining all the relevant configurations in all those services. This single file will be used to generate and update all the required configurations.

Let’s say we have an Open edX instance, and we want to create two sites: ExampleEdu1 and ExampleEdu2. We can create a config like the following -

main_domain: "exampleedu.com"
site_for_each_organization: true
oauth:
  ecommerce_sso_client: custom-sites-ecommerce-sso
organizations:
  exampleedu1:
    name: "Example Edu 1"
  exampleedu2:
    name: "Example Edu 2"
microsites:
  $:
    context_overrides: {}
    overrides:
      ecommerce:
        ecommerce.core.models.SiteConfiguration:
          oauth_settings:
            SOCIAL_AUTH_EDX_OAUTH2_KEY: <ecommerce-sso client id>
            SOCIAL_AUTH_EDX_OAUTH2_SECRET: <ecommerce-sso client> secret
            BACKEND_SERVICE_EDX_OAUTH2_KEY: <ecommerce-backend-service client id>
            BACKEND_SERVICE_EDX_OAUTH2_SECRET: <ecommerce-backend-service client secret>
          payment_processors: paypal,cybersource

  exampleedu1:
    overrides:
      lms:
        openedx.core.djangoapps.site_configuration.models.SiteConfiguration:
          site_values:
            PLATFORM_NAME: Something Special!

Now, let’s break it down -

To know more about overrides, please check the repository

Once we create the configuration, we can then run the script in an appserver using the  ‘make run’ command.

Conclusion

Setting sites can be tricky business, and we believe that the Sites-Generator application is an excellent tool to effortlessly manage multiple sites in an Open edX installation. It prevents a lot of manual work that would have been needed otherwise. If you find this script useful, feel free to use and contribute to it! If you encounter any issues, please let us know on Github, comment on this post, or email us at contact [at] opencraft.com : )

Cover photo by Omar Flores on Unsplash

[Open edX Community Event] All members of the community are invited to join a virtual Open edX conference and meetup, scheduled on Sept 17th. The event will feature Ed Zarecor, the Engineering Director for the Open edX platform, who will discuss the future direction of the platform with the audience. Attendees can expect a few additional stimulating talks, along with ample time for chatting and networking. We are eager to see you there!

-> Read official announcement and more details on the Open edX blog

[Help needed: Django 3.2 Upgrade] edX is upgrading Django to version 3.2 by mid-October (Maple version release) and needs the community to help update or replace more than 60 external dependencies which don’t yet support Django 3.2.  This is a splendid opportunity to  contribute to the Open edX platform and help the team reach an important platform milestone! Here is a wiki page with instructions on how community members can help. Thank you in advance for your contributions!

-> Discuss and offer your help on this official forum thread

[Transifex Working Group] The Open edX platform is available in many languages on the Transifex platform, but optimizing the translations requires help from the community. The Open edX team just launched a Transifex Working Group and is looking for community members to review translations in the following languages: French(ca), Ukrainian(uk), Russian(ru), Mandarin(cmn), Hindi(hi), and Arabic(ar). OpenCraft team members will compose a portion of the group, but your help would be immensely appreciated!

-> Discuss and offer your help on this official forum thread

[OpenCraft Is (Still) Hiring] OpenCraft is growing and working on incredible projects, and we are always seeking new developers that: 


-> Check out our jobs page and apply!


Do you want to discuss the topics in the newsletter or have any questions? Please reach out to us at contact@opencraft.com
 
You can also follow us on LinkedIn and Twitter.

Here is a recap of our July 2021 newsletter:

[2U Acquires edX] 2U, an educational technology company, announced that it is acquiring edX. The proceeds of the transaction ($800 million) will go to a non-profit that will continue under the leadership of the edX founders, Harvard and MIT. The non-profit will own and keep growing the Open edX project. This will be a good opportunity to clarify the distinction between edX.org and the Open edX platform, since both projects will have their own priorities and independent funding. It will take some time to know what the new non-profit’s plan will be, but there are good reasons to be optimistic. The changes demonstrate the belief that the open source project can be more by standing on its own. We completely agree — it’s a rare chance for an open source project!

-> Watch Q&A session about the acquisition with edX CTO JP Beaudry

[OpenCraft Developer Jobs Page] OpenCraft is growing, and we are always on the lookout for new developers. We've just built a web page that summarizes the experience of working as an open source, fully remote developer at OpenCraft. Do you care about contributing to open source and appreciate a good challenge? Would you like to work with great clients, under great conditions, and with your own schedule? If so, then please consider joining our team, and submit an application.

-> Check out our jobs page, and apply!

[LTI Advantage Certification] The latest version of the Open edX platform, Lilac, has been formally certified as an LTI Advantage learning platform! The work to extend the LTI Consumer XBlock to support LTI Advantage was a collaboration between our team and edX, as a blended development project. We are very proud to have worked on making the Open edX platform more extendable by adopting this widely-endorsed educational standard.

-> Read announcement on Open edX blog

[Extensions Directory] The Open edX team have recently published the Open edX Extensions Directory, a filterable interface that displays the various XBlocks, plugins, and extensions made available for the platform. The long-requested tool was designed by the Open edX Marketing Working Group, of which OpenCraft are members. Just a few weeks after its creation, the Extension Directory gained considerable visibility and traffic as a valuable resource for the Open edX community.

-> Read announcement on the Open edX blog

[Documentation hack-a-thon] Following the success of their first Hack-a-thon, the Open edX team is hosting a new documentation rally on August 10-12, 2021. This is a time for everyone, not just developers, to get together, collaborate, and help make the platform documentation complete and up-to-date. Big or small, all contributions are welcome! You can read the official announcement for the full details. 

-> Discuss your ideas with the community on the official forum thread

This blog post was co-authored by OpenCraft team member Usman Khalid and edX team member Dave Ormsbee.

It is with great excitement that we're announcing that all the XModules in the Open edX platform have recently been converted into XBlocks.

What are XModules?

XModule was the original framework for course components in edx-platform, and the predecessor of the XBlock framework. When the XBlock framework was introduced into edx-platform in 2013, because of the numerous XModules in use, a compatibility layer was written to allow an incremental transition to the new framework. This compatibility layer allowed the XModule infrastructure to run XBlocks and for XBlocks to see the XModule infrastructure as the XBlock Runtime.

XModules and XBlocks had different life-cycle properties and in some cases different APIs for the same features. This transition state was dubbed “peak confusion” by the edX engineering team to express the idea that it would be an extremely confusing time for the courseware internals, but that we could eventually come down from that complexity once XModules were removed.

Transition

Over the years a number of lesser-used XModules were deprecated and removed. In 2015, the Vertical XModule was converted and in 2016 the Discussion XModule was converted.

When the Blockstore project was started, the decision was made that it would only support XBlocks and a new XBlock Runtime was written for it. As part of the work, the Video, HTML and Problem XModules were converted to XBlocks.

The remaining fifteen XModules have been converted to XBlocks through a months-long blended development effort by OpenCraft and the edX T&L team.

Why is this important?

With the system now only hosting XBlocks and not constrained by having to maintain backward compatibility with the old framework, it becomes possible to significantly simplify the courseware internals. This will make the system a lot more approachable for developers and significantly reduce the complexity of big jumps in capabilities of courseware.

We are looking forward to seeing these developments in the future!

Photo by Hunter Harritt on Unsplash

This blog post was written by our team member Aayush Agrawal

At OpenCraft, we do a lot of feature development for our clients. While the Open edX platform is great and feature-packed out of the box, the best part is its extensibility. And we take full advantage of that when we need to develop a new feature.

The most important part

When developing a new feature, we believe the following two considerations are the most important of all:

  1. Quality. When writing code, or feature development in general, we are not interested in getting the job done any way we can. There are many strict coding standards, written and unwritten, that we follow. And more than that, we make sure to incorporate best practices into our work, practices such as automated testing and deployments, and automated code checks.
    We also require that all work done at OpenCraft be reviewed by a second senior developer. The review process is detailed, so we know that anything that’s published with our name on it has been through the best quality controls possible.
  2. Open Source. Transparency is one of our key company values. For this reason, we keep the overwhelming majority of our developments open-source. Whenever our clients ask us to customize their platform, we try to design new features in a way that they can be upstreamed (sent to edX® for review and merged into the main version of the platform).


So, usually, in addition to internal reviews, our code is reviewed by edX. To ease this process, our instance manager monitors repositories and automatically creates sandboxes, allowing testing of the feature without installing the platform locally.

It’s worth mentioning that we are members of edX's prestigious Core Committers program, which means we are involved in the process of designing, implementing, and reviewing new features for the global platform roadmap.

The roadmap

Understanding clients’ needs

We aim to help our clients with the design process: We talk with them so that we can understand their needs, and then we envision how to fill the gap with a new feature.

Discovery

At OpenCraft, developing a new feature starts with a technical discovery. This is where we create a document that lays down the scope of the work to be done, a description of our approach as to how to do it, a list of tasks, and how much time it will take. We then send this document to our clients to review and approve, and we’re off!

Community Collaboration

As already mentioned, we put a lot of effort into designing new features in a way that they can be included in the Open edX codebase. This allows us to keep sources open and guarantees the best possible quality, because edX keeps standards high and reviews contributions rigorously. That’s why discussions with edX and other members in the community are an important part of our work.  For example, we participate in Open edX releases preparation, are active on community forums and in Slack, and maintain some popular Open edX extensions.

Code time!

After having signed off on the scope of the work, it’s a simple task of getting to it!

A good practice in this step is getting all code covered with tests, and reviewed by another developer before merging. We make a lot of use of our open source instance manager and create testing sandboxes for everything. Only after ensuring that everything works as expected, we deploy changes using blue / green strategy, so we can easily roll back in case of unexpected issues.

Upstreaming

At OpenCraft, we believe in Open Source. Depending on the work done here, we might be creating new modules like XBlocks and Django Apps in which case we’d upstream them by uploading them to our public GitHub or GitLab accounts for everybody to use and improve.

But some changes require changes to the Open edX platform itself. In this case, after a ticket has been through our thorough internal quality control, we’ll submit it to Open edX Core Committers for review. Core Committers are trusted, long-standing members of the Open edX community who have been granted permission to review and merge code into the Open edX codebase. OpenCraft has multiple Core Committers within its team, which is a great token of trust from edX!

Delivery

Finally, delivery! Once the work is done, approved, and merged into the platform if needed, we are ready to deliver the finished product. This might mean installing a new XBlock or App that was created, or it might be as simple as redeploying the client’s Open edX instance to include the latest changes.

Conclusion

While the roadmap above is the standard process, it’s not always a straight line. Sometimes we work with features that are interconnected, or maybe we have multiple review passes, or requirements change down the line etc. But no matter what happens, we are always committed to the two pillars of OpenCraft’s success: Quality Code and Open Source.

If you’re interested in having a feature developed for your OpenEdX deployment, feel free to drop us a note! You can contact OpenCraft at this link.

Photo by Yancy Min on Unsplash

This article was written by team member Aayush Agrawal

This blog post shows how to enable encryption at rest for Amazon S3 Object Storage used by your Open edX instance. When you use server-side encryption, Amazon S3 encrypts an object before saving it to a disk, and decrypts it when you download it again.

The first question is Why would you want to do this? The most important reason is privacy, as data uploaded to S3 buckets can contain personally identifiable information, such as the learner's email address in grade reports. Also keep in mind that you might be required to do this by GDPR and other privacy-focused laws.

Enabling S3 encryption on AWS: How-To

The first step is to set up an encrypted AWS S3 bucket for your Open edX instance. For the sake of simplicity, I’d recommend using SSE-S3 encryption, as AWS will manage the encryption key for you. It will use a single key for all objects, which is encrypted itself with a master key that is frequently rotated for increased security. You’ll have two choices here:

Creating an encrypted bucket

If you are just starting or testing this setup, you can create an encrypted bucket and switch your instance configuration to use this bucket.

Simply navigate to https://s3.console.aws.amazon.com/s3/bucket/create to create a new bucket. Make sure to enable Server-side encryption.

Enabling encryption in an existing bucket

If you already have a running instance with an existing bucket, all you need to do is enable encryption for the bucket.

Just navigate to https://s3.console.aws.amazon.com/s3/buckets/ where you’ll be able to find the bucket you want to modify. Click on the bucket link and navigate to the “Properties” tab, where you’ll find encryption settings. Here, you just need to click the “Edit” button and select “Enable”.

Configuring Open edX

Now that the bucket encryption is enabled, we must make sure Open edX can properly use it. Under the hood, your instance will be using Boto3 to communicate with AWS S3.

Enabling AWS S3 Encryption

 You need to modify your settings to enable S3 encryption. You’ll have to change both your /edx/etc/lms.yml and /edx/etc/studio.yml to use the following settings.

   AWS_S3_ENCRYPTION: true
   AWS_S3_REGION_NAME: 'us-east-1'
   AWS_S3_SIGNATURE_VERSION: 's3v4'
   DEFAULT_FILE_STORAGE: 'storages.backends.s3boto3.S3Boto3Storage'

While REGION_NAME and SIGNATURE_VERSION aren’t strictly required, they are big sources of issues when running this setup. If you encounter permission issues, make sure these are correct in your settings.

Configuring Studio export bucket

Next, ensure your bucket name is correct. If you decide to use a different bucket for course exports, make sure to enable encryption on AWS for this as well.

   IMPORT_EXPORT_BUCKET: 'opencraft-example-bucket'

Configuring Grade reports downloads

Again, these settings need to be applied to both lms.yml and studio.yml.

   GRADES_DOWNLOAD:
     BUCKET: 'opencraft-example-bucket'
     ROOT_PATH: 'reports/grade'
     STORAGE_CLASS: 'storages.backends.s3boto3.S3Boto3Storage'
     STORAGE_KWARGS:
       default_acl: 'public-read'
       location: 'grades-download'
     STORAGE_TYPE: 's3'	

S3Boto3Storage.location cannot begin with a leading slash (gotcha)

If you get the above error message after migrating from the local filesystem storage, you’ll have to modify the location to remove the leading slash, for example:

   VIDEO_TRANSCRIPTS_SETTINGS:
     DIRECTORY_PREFIX: video-transcripts/
     STORAGE_KWARGS:
       base_url: /media/
       location: media/ # Was /media/ before

Testing

After the setup is complete, you’ll have to test the settings to ensure that it works correctly. Obvious tests are course exports, grade report downloads, checking video transcripts, etc.

I would recommend that you use Opencraft’s Instance Test Checklist to make sure no functionalities are broken.

This checklist was developed to ensure our instances are fully operational after release upgrades, large configuration changes, and others.

I hope this helps you get peace of mind, knowing your users’ personally identifiable information is now safely encrypted in Amazon servers.

If you’re serious about your Open edX instance’s security and would like an extra pair of eyes, you can reach out to us at OpenCraft to help maintain and/or secure your Open edX instance!

Photo by Alex MotocHire on Unsplash

This article was written by team member Aayush Agrawal.

Every industry has its best practices, and we follow them for a simple reason: to walk the path already forged and successfully tested by others. In this blog post, I will describe some of the practices we employ to reduce maintenance and ensure maximum reliability in our hosting of Open edX instances.

Closely follow Open edX releases (and get rid of code drift)

Closely following Open edX named releases, which have release cycles of about six months, is an excellent goal. These named releases also receive upgrades in the form of point releases, which have a simpler upgrade path due to fewer radical changes.

The reason these releases are a good target is that they are fully supported by Open edX. The features and security of the latest named release is always improving, while older versions are not supported, don’t receive bug fixes, and develop vulnerability patches. This is why operators that don’t want to upgrade their instances always have to backport code from newer releases.

One difficulty that might arise when upgrading an Open edX instance is merging conflicts. Any developer trying to merge a large number of changes knows how unwieldy this can be, as the number of changes increases. This, therefore, is a good reason to get rid of code drift.

Closely following the upstream code and minimizing code drift makes the upgrade path much easier when a new named release or point release lands. However, if introducing code drift is unavoidable, it’s better to contribute to it further upstream and get it as part of a new release. We also think one of the best reasons is to give back to the community built around the platform.

At OpenCraft, we closely monitor Open edX releases and upgrade our clients’ instances as soon as possible, with plans starting as soon as the new version is announced This is not possible without getting rid of code drift. This is why we aim to upstream all our code changes to Open edX.

Not only does this procedure benefit the community, but it also directly benefits our company, by reducing the upgrade burden, and our clients, by offering them faster and more affordable upgrades.

Identify issues before your learners (and keep monitoring)

Nothing is as frustrating as going through your online course just to stumble into an issue in your LMS.

Yet, maybe more frustrating is being an Open edX provider and getting a message from one of your learners trying to describe an issue. The easiest way to prevent this situation is finding issues before your learners. Here are three strategies for that.

Having A Staging environment

We strongly recommend deploying a staging environment, which is a safe place to test changes and let them break. A staging instance representative of production is a good place to catch issues that might have been missed during development.

One gotcha here is having a “reduced” representation of the Production environment. For example, you might not set up SSO, or MongoDB failover on the staging instance. This can be dangerous, as you might be deploying a breaking change into production fully believing everything will work as intended. We therefore recommend having a staging environment that is as close to Production as possible.

Testing Changes Yourself

After deploying changes to the platform, ensure that you test the whole instance. While we might think we can test only parts of the platform touched by a code change, correctly finding out what is touched by the change is actually very hard in a platform with the size of the Open edX LMS. To help with testing, OpenCraft developed a Manual Instance Checklist.

Monitoring Strategies

Monitoring is an automated way to identify issues. Strategies for this abound, and many services can be used: hardware monitoring, VM monitoring, process monitoring, performance monitoring, endpoint monitoring, etc. This topic will be more deeply investigated in a future blog post; stay tuned!

One gotcha is having “too much noise” in your monitoring. A monitoring plan that’s too strict and with frequent alerts can lead to desensitization to alerts. This can be dangerous, and can, in turn,  create issues that are not checked, and if an alert doesn’t get checked, it’s a waste of time and effort.

Redundancy, redundancy, redundancy (and more)

Anything can fail without warning on the Internet, including servers managed by others. One important way of making your Open edX instance more resilient is increasing its redundancy by ensuring that critical system components have another identical component with the same data that can take over in case of failure.

I won’t get into the details of MySQL and MongoDB replicas and failover as you’ll find some great writing on the subject. For example, check this article.

Here, I specifically want to bring attention to the importance of getting rid of single points of failure: single database server, single load balancer, single application server, etc.

This is also interesting from a performance perspective, being used for horizontal scalability.

Encryption (and security practices)

You can have all the patches in the world, but without encryption, an attack on your infrastructure can reveal everything anyway. This is why encryption is necessary if you are hosting anything, especially the Open edX platform, as it stores Personally Identifiable Information.

You can find more information on encrypting your Amazon S3 Object Storage, for example, in our previous blog post.

Besides encryption, following Web applications security practices is very important to prevent headaches in the future. This is another topic that is vast and has been already explored in articles around the internet, and each environment will have its own requirements.

What you should look for here is reducing your data and application servers’ exposure to a minimum, while hardening the servers that are required to be exposed, such as bastion hosts and load balancers.

At OpenCraft we host and maintain OpenEdX instances for many organizations including Harvard University, Arizona State University (ASU), Cloudera, and many more. If you’d like to avoid the headache and have your instance professionally managed, reach out to us at https://opencraft.com/contact-us/

Cover Photo by Markus Spiske on Unsplash

Arguably, one of the biggest things about the most recent Open edX release, Koa, is that it officially supports the deployment of (some of) the newfangled micro-frontends edX has been putting out.  Among them is edX Publisher, also known as frontend-app-publisher, and we at OpenCraft feel it warrants some introduction in addition to what’s in the README - much like we did for the Gradebook MFE.

(You’ll see this post duplicate some of what’s in the README.  Don’t sweat it, we’re not plagiarizing; we wrote that too!)

Contrary to some of the Open edX IDAs, running Publisher is completely optional.  As such, it may not be easy to decide whether you have a pressing need for it.  This post’s raison d'être is to help you decide.  (And if the text doesn’t live up to it, it’ll at least tell you how to try it out for yourself!)

Let’s start by looking at what Publisher is not.

Does Publisher replace Studio?

You guessed it. Publisher is not a course authoring tool.  And it definitely doesn’t replace Studio for the editing of course content.

However, it does fill the same niche that some Studio features do, particularly as they relate to creating and editing course metadata. Put simply, if you use Publisher, you’ll no longer use Studio when creating courses, configuring their settings, writing about pages, and instantiating course runs.  You’ll do so via Publisher - but will still go to Studio to flesh out course content.

So, it doesn’t replace Studio… entirely.  What’s it good for, again?

edx created Publisher primarily to make it possible for courses to undergo a draft, review, and publish cycle, in a workflow that resembles Github reviews:

  1. A course author creates a course or a course run, then submits it for review.
  2. Review staff is automatically notified. Afterwards, they can suggest changes to the course. Think colored diffs.
  3. Once staff reviews the course, Publisher notifies the author. They can then accept, reject, or modify the suggested changes.
  4. After completing the review process, the author can publish the course automatically.

This is not all, though. In implementing the above, Publisher also:

Sounds nice, but do I really need it?

Publisher is most useful for organizations that:

If your organization doesn’t fall into one of the above, Publisher can still be useful but will likely not be considered mission-critical.

Still not sure.  How about a quick walk-through?

Sure thing!  Let’s start by using it on a devstack.  It’s rather easy: just follow the devstack setup instructions.  The default setup will get you a basic frontend-app-publisher instance all ready to go!

Once your devstack is up and running, open a browser and direct it to https://localhost:18400.  If you’re not already logged in to the LMS, use the default “edx@example.com” account, with password “edx”.  Once in, this is what you’ll see:

Open edX Publisher's front page, after log-in.

Front page, after log-in.

Note: If you get a connection reset error, the MFE likely did not finish compiling. It's sensitive to slow internet connections, and does not like being behind a proxy. Check if it was compiled correctly via make frontend-app-publisher-logs.

You might recognize the demonstration course: this is the same one that has shipped with the devstack for as many years.  And above it, note the ability to create a new course, filter by status (“In review”, “Published”, “Scheduled”, and “Unsubmitted”), and search by name.  Quite an improvement over Studio!

If you click on the demonstration course, you’ll see a page where you can edit the course’s metadata and create runs.

Open edX Publisher: screenshot of the course page.
Screenshot of the course page.

Are courses now separate entities from runs? 

Not really, no.  This is just a presentation-layer feature that makes it easier to manage metadata.  From the point of view of the learner using the LMS, it’s still all runs.

They’re much easier to create with Publisher, though.  Simply click on “Add Course Run”, and after configuring it, you’ll see it “Unpublished”, like the Jan-25-2021 one you can see above.  After you set all the run’s metadata, you can submit it for review by course staff with the click of a button:

Open edX Publisher: screenshot of the run submission modal.
Screenshot of the run submission modal.

This is probably enough for you to get the gist.  For a more detailed feature-by-feature guide, refer to the Introduction to Publisher chapter of the courseware development documentation.

Note: Can’t get comments working?  That’s probably because to do so you must first configure integration with Salesforce.  See this decision document in the course-discovery repository.  In essence, if you don’t have a Salesforce account, you’re out of luck.

How does it work?

As an MFE, Publisher must communicate with other Open edX IDAs to do its job. The three whose APIs are consumed directly can be gleaned from its default environment files: LMS, Studio, and Discovery. The first two are a given, but for proper functioning of Publisher one needs to set up Discovery. Discovery must be made aware that Publisher is in use via the ENABLE_PUBLISHER setting.  It will then be responsible for integrating course runs into other Open edX services such as eCommerce and Programs.

Both Studio and the LMS use of the same ENABLE_PUBLISHER setting, but its primary effect is to forbid the editing of course about pages in Studio. (The relevant fields actually disappear from the /settings/details page for a course.) This makes sense, as producing about pages is Publisher’s main purpose, after all.

Need help!

Can’t get Publisher to work, or want a demonstration?  Get in touch!  We’ll lend you a hand!

This article was written by team member Adolfo R Brandes.

 Cover image: "Print press" by Herkie is licensed under CC BY-SA 2.0

This article was written by team member Fox Piacenti.

If you’ve had the opportunity to take a course on edx.org, you might wonder how you can contribute to the Open edX platform. The Open edX project is massive – involving many interdependent pieces working together. Deploying the Open edX platform takes a great deal of expertise. However, you can run your own copy for development easily with the “DevStack.” The DevStack sets up all the major components of an Open edX installation and gives you the tools to make your own contributions to Open edX.

Getting Started

Following the DevStack repository’s README results in a working copy of Open edX. Curiously, it creates the repositories not in the DevStack directory, but the one above it:

    fox@masamune[~/projects/openedx/devstack] (master)$ ll ../
    total 0
    drwxr-xr-x  19 fox   admin   608 Oct 24 13:33 ./
    drwxrwxr-x  28 root  admin   896 Oct 24 13:29 ../
    drwxr-xr-x  44 fox   admin  1408 Oct 24 13:30 course-discovery/
    drwxr-xr-x  40 fox   admin  1280 Oct 24 13:30 credentials/
    drwxr-xr-x  30 fox   admin   960 Oct 24 13:30 cs_comments_service/
    drwxr-xr-x  69 fox   admin  2208 Oct 24 13:30 devstack/
    drwxr-xr-x  36 fox   admin  1152 Oct 24 13:30 ecommerce/
    drwxr-xr-x  26 fox   admin   832 Oct 24 13:33 edx-analytics-pipeline/
    drwxr-xr-x  25 fox   admin   800 Oct 24 13:30 edx-e2e-tests/
    drwxr-xr-x  26 fox   admin   832 Oct 24 13:31 edx-notes-api/
    drwxr-xr-x  61 fox   admin  1952 Oct 24 13:33 edx-platform/
    drwxr-xr-x  25 fox   admin   800 Oct 24 13:33 frontend-app-course-authoring/
    drwxr-xr-x  23 fox   admin   736 Oct 24 13:33 frontend-app-gradebook/
    drwxr-xr-x  25 fox   admin   800 Oct 24 13:33 frontend-app-learning/
    drwxr-xr-x  25 fox   admin   800 Oct 24 13:33 frontend-app-library-authoring/
    drwxr-xr-x  27 fox   admin   864 Oct 24 13:33 frontend-app-program-console/
    drwxr-xr-x  27 fox   admin   864 Oct 24 13:33 frontend-app-publisher/
    drwxr-xr-x  29 fox   admin   928 Oct 24 13:33 registrar/
    drwxr-xr-x  22 fox   admin   704 Oct 24 13:33 xqueue/

This allows the DevStack to act as one repository among the whole group. However, this may cause a problem if you weren’t expecting to create directories in your parent directory. So we recommend you create a project directory and then clone the DevStack there, so that you can keep your work area clean.

Finding your Bearings

Picture of a compass laying on a table.
Photo by Aaron Burden on Unsplash

Each of the directories contains its own project. For example, edx-platform is the Studio and the Learning Management System (LMS). They share a lot of code and so work as one project together. In another example, cs_comments_service is the forum backend - it handles the course discussions. There is one directory, other than devstack which is a bit special, and that's edx-theme. This directory is where you'd place any themes you wish to install.

Each project runs in its own Docker container, orchestrated by Docker Compose. Docker Compose puts all of the DevStack containers together on a virtual network, with ports exposed to your machine. For instance, you can visit Studio by opening your browser and going to http://localhost:18010, or to http://localhost:18000 for the LMS. Note that the LMS takes considerably longer to start up, and may not be running for up to a minute after you start the Open edX DevStack.

One quirk here is that the LMS and the Studio each have their own docker container, but they both load their code from the edx-platform repository. Don't forget updating that Studio's code also updates the LMS.

For most of this article, we will focus on the LMS and Studio, as they are the most commonly worked on projects in the DevStack.

Updating the LMS and Studio

A screenshot of the LMS running on a local devstack.

The majority of the work done on the DevStack involves edx-platform in some way - and thus the LMS and Studio containers are involved. If you switch branches, you must update your Python requirements and your database.

Let’s say you want to pull the latest changes from master. You go into the edx-platform repository and then pull:

    $ git pull
    From github.com:edx/edx-platform
     * branch                  master     -&gt; FETCH_HEAD
    Updating 6f69fd7dc2..8cef028429
    Fast-forward
    …

The updated code likely has changed the dependencies. Switch back to the devstack repository:

    cd ../devstack

Then, enter the LMS.

    make lms-shell

Once inside, we want to run:

    paver install_prereqs

This will download and install all of the Python and Javascript libraries needed to run the LMS. After installing the dependencies, update the database:

    paver update_db

Once the database is updated, start the process over again with Studio. Exit the shell with ctrl+D or:

    exit

And then enter the Studio shell with:

    make studio-shell

You can then run the same paver commands as before. Your LMS and Studio should now be ready!

Working with Static/Frontend Assets

By default, Studio and LMS will automatically reload and handle any changes you make to their Python files within a few seconds. However, it does not automatically update Javascript and other frontend assets. Thankfully, there is a way to watch and automatically update those files just like the Python ones. We’ll use the LMS as the example. From the devstack directory:

    make lms-shell

Once inside, run:

    paver watch_assets
A screenshot of generated, minified Javascript code.
Image courtesy Markus Spiske of Unsplash

The frontend files will then be built and will watch for any changes, automatically rebuilding when they are found.

Running Tests

Any changes you make to the platform’s logic should always be verified with new tests. Likewise, you should run existing tests to verify you’ve not broken anything with your updates. To run unit tests, once more enter the shell of the system you wish to test from the devstack repository:

    make lms-shell

To run every test imaginable (we don’t recommend this unless you have a lot of time on your hands):

    paver test

If you wish to run all Python unit tests:

    paver test_python

To run all Javascript tests:

    paver test_js
A screenshot showing some of the JS test output

To run specific Python unit tests:

    paver test_system -s lms -t path/to/file

...where path/to/file is a path to a file or directory that contains tests you want to run. Note that you should use -s cms instead of -s lms for studio unit tests. Code that's in common between the two projects should be able to use either flag.

Other Commands

Photograph of a pair of glasses sitting atop a laptop, focusing the code editing utilities on screen through the lenses.
You are encouraged to whisper "I'm in" in your best 90s hacker movie voice every time you enter an Open edX devstack shell. Photo by Kevin Ku on Unsplash

You may have noticed that the paver command is used to perform several actions. Well, we’ve only scratched the surface of what it can do. Most of the commands that we haven’t covered won’t be useful to the average developer, but may come in handy from time to time. You can get a full listing of all commands paver supports by running:

    paver --help

One thing that paver does NOT do is run the Django shell for you. You are likely aware that the LMS and Studio are very complex Django projects. Django comes with a REPL that allows you to run code directly. This makes it easy to look up database information without using SQL, for instance. You can perform any number of tasks with the full power of a contextualized Python shell.

To run the LMS Django shell, from within the LMS container, run:

    ./manage.py lms shell

Keen eyes will notice that this is almost the normal Django shell command. However, for all management commands in edx-platform, you must specify either lms or cms, since they both initialize different environments.

In fact, many other Django management commands are available. Most of the useful ones are invoked by paver as required, but you can list them directly like so:

    ./manage.py lms

This will list all commands, which you can then investigate further. For instance, to get help for the migrate command, run:

    ./manage.py lms migrate --help

Wrapping Up

Getting oriented around the Open edX DevStack can be overwhelming at times, but with a handful of commands you can make your way around the project and contribute your own code to the Open edX platform.

Of course, if you like, you can always call upon us to assist you with Open edX projects. Come drop us a line and let us know what you’re interested in doing. We’ll let you know how we can help!

This article was written by team member Fox Piacenti.

The edX.org website opened in 2012 as a massive online learning destination with free courses that anyone could enjoy. Today, edX® tracks hundreds of thousands of learners. When the Open edX platform was released in 2013, the need to serve large audiences drove its features.

A system oriented around such large course sizes needed to manage grades in a consistent, predictable way. With little intervention, the system successfully handled scoring. As time has gone on, the cost of running an instance has gone down. Thankfully, you can now start your own LMS within a couple of hours. Online learning has proven itself, and continues to grow, demanding more versatility.

To keep grading simple, edX problems score automatically via course components. You answer a question right, and you get the points. Answer it wrong, and you don’t. This works great for massive courses– but it’s less helpful for smaller ones, or ones that offer more direct advisement. Instructors need the ability to override grades based on circumstances. Extra credit, technology issues, and personal assessments are all examples of when changing a grade is helpful.

Recognizing these needs, the Open edX team has begun work on a new editable gradebook. It is not yet available in a vanilla Open edX deployment, but it can be installed on any up to date instance. Let’s take a look at what the community built so far.

A Bit of Background

You can skip this if you’re not technically oriented, or just want to see what the editable gradebook looks like.

The Open edX community is developing ‘micro frontends’ like the gradebook. Micro frontends allow for more flexibility and rapid development of features that affect user experience. These React-based frontends use REST calls to the backend to provide a modernized experience.

This is an improvement over backend template rendering, as the frontend no longer requires the backend's instructions on how to arrange the page. As a result, we can use modern Javascript tooling.

Micro frontends aren’t easy to set up in production, but if you’re familiar with the edX devstack, you can play around with them by following the instructions in their README. Follow the instructions carefully– the gradebook may run but exhibit strange behavior if you do not. This project is still new.

Overview of The New Editable Gradebook

A table of grades shown on the frontend of the new gradebook interface

The new gradebook shows all of your students and their grades. You can rapidly filter through students by using a search bar in the upper right corner of the screen.

To modify an exercise, you click the grade.

A screenshot of the grade editing interface, showing the form for adjusting a grade and giving a reason.

You can enter a new grade here, along with a reason. This allows an audit trail so you can remember who changed what grade, and why.

If you have many exercises and grades to look through, you can narrow them down using a filter panel:

A screenshot of the sidebar, showing the varying options by which you may filter grades.

You can filter by tracks, cohorts, and current score. You can also filter by the assignment type (homework or exam) and the particular assignment.

Comparison with the legacy (current) gradebook

You might ask, how does the current (legacy) gradebook compare with the new, editable one?

The legacy gradebook shows you an overview of the grades, much like the new one does.

A table of grades shown on the legacy gradebook interface

However, there’s no option to edit the grades on the current interface. When you click on a learner’s name, you are simply taken to their progress page, with no option to edit the grade.

The new gradebook currently doesn't provide individual links to each learner's Progress page. But other than that, the new editable gradebook handles everything the legacy gradebook does, and then some!

Final Thoughts

The new editable gradebook offers many feature advantages over the old one. If you have a need for more fine-grained control over grading, it’s definitely worth a try! We’ll be covering more of these Micro Frontend projects as time goes on.

Since the editable gradebook is not available on a vanilla Open edX deployment, we're happy to install it for you. Simply drop us an email at contact@opencraft.com : )

Photo by Green Chameleon on Unsplash

This article was written by team member Nizar Mahmoud.

Work often involves a lot of repetitive and time-heavy tasks. For example, at OpenCraft we automate the decommissioning of unneeded servers, the preparation of monthly invoices for our employees, and tasks like sending reminders about project and sprint planning. Since most of these tasks require following a step by step procedure, we work carefully to establish good procedures, and then automate these procedures. Doing these tasks manually takes a lot of time, but by instructing a computer on how to perform these tasks (therefore automating them), we save time.

By automating (almost) everything that can be automated, OpenCraft team members are liberated from mundane and tedious tasks. Accordingly, we can instead focus on challenging work that requires creativity and critical thinking.

Automation not only makes the workspace more enjoyable, but also improves quality, productivity, and security.

Improved Quality

Automating tasks improves the quality of our code. One of the most common methods of automation is continuous integration/deployment. Here at OpenCraft, we use continuous integration to ensure that every change made on our maintained repositories is tested. This approach guarantees that every time we change the code, the previous features we added still work, bugs we've fixed before remain fixed, and the quality of the code stays high. 

By identifying the issues in the changes early, results can be delivered without any unexpected failures.

Improved Security

Automating routine tasks also improves security. Executing such tasks manually can become boring quickly. When the person is no longer focused on the task at hand, the risk of human error usually increases. Such errors can have a serious impact on security when updating configuration files or applying updates or patches.

Ocim is our hosting platform which makes managing configurations, patches, updates, and customizations easy through automated deployments. Automated deployments help run a number of procedures that ensure proper security on the hosted applications.

Another common method of automation is monitoring for errors or attacks on deployments and alerting team members about those incidents. OpenCraft combines multiple tools to notify the team of any incident, instantly. This way we can address serious issues quickly, and minimize downtime. Since we are a fully remote company with team members all over the world, this means that our team can work around the clock to resolve issues. 

Improved Productivity

Automating tasks results in increased productivity. By automating all tasks that don’t require critical thinking, team members can focus on complex tasks that cannot be solved by machines. Meanwhile, the tiresome work is getting done, without wasting the members’ time... nor our clients' budgets!

Automation also reduces the repetitive act of jumping from task to task (we call it "context switching"), which keeps us more focused.

The benefits of automation are various, including improvements in quality of work, productivity, and security. Even though some time has to be set aside for automating work, it is definitely worth the investment!

Want to learn more about how we work at OpenCraft? You can check out our public handbook. Or get in touch — we’d love to talk with you.

Photo by Eric Krull on Unsplash

A few months ago we decided to rebuild our Open edX instance manager frontend to provide more customization options and features to our Pro & Teacher plan subscribers and trial users. 

We needed to go from a simple registration form (shown below) to a full user console with theme customizations, LMS previews and other features.

Old registration form

From the start, the main goals of the project were: implement a new user console to allow users to self-service and enable our developers to work on the newer technologies that the platform is transitioning to.

Software Architecture

We’ve opted for a decoupled implementation between the frontend and the backend using React and a REST API. 

Changes made to the backend took form mostly as APIs to the new frontend, but we had to add some deployment hooks to allow passing custom configuration to the instance in provision time. drf-yasg handled the automatic generation of documentation.

The new frontend was built from scratch using React and Typescript. A TypeScript API client was generated using the backend's automatic documentation, using Swagger Codegen and saving us lots of development time.

Upstream features

While building the console, we leveraged a lot of features contributed over the years to the platform:

The release

After a few months of implementation, we finally deployed our brand new user console:

New registration flow
Customization console

Feel free to try it out on https://console.opencraft.com, and you can even deploy your own from the source code! The entire instance manager is open source software and can be found at: https://github.com/open-craft/opencraft, and if you want to dig deeper, you can follow the PR trail on the implementation.

There’s still lots of improvements to be worked on and bugs to be fixed, so if you have any suggestions, feel free to create an issue on the repository or comment below.

Best,

Giovanni Cimolin da Silva - Open Source Developer

This article was written by Jeff Miller, a member of the OpenCraft marketing team.

So, you’ve been looking for a learning management system (LMS) and have decided that the open source Open edX platform makes the most sense. You’re not alone! It’s the most widely used LMS platform in the world, with 45 million people using it in 34 different languages. It’s open source, so you don’t have to take a vendor’s word, alone, for anything, but it’s proven itself to be a resilient, effective learning tool that can scale to support thousands of simultaneous learners.

The official documentation for Open edX is excellent, but we know that setting it up and hosting it on your own can still be daunting. OpenCraft is here to help. 

We sat down with OpenCraft’s very own product specialist Gabriel D’Amours to talk about how OpenCraft handles hosting and address some of the common technical questions that clients ask about Open edX.

Services

So, for starters, how can OpenCraft help organizations customize, deploy, and maintain an Open edX installation?

We can help at every step of the way, from designing a custom Open edX instance, developing the code, and hosting and maintaining it. We can even provide training on how to build courses. 

Version updates

OK, so let’s say I want to get started and begin working with you all to design an Open edX instance. What version of Open edX do you use? 

All good questions. As for the platform, we always use the current version when building a new instance, and we upgrade all of our hosted instances within a few weeks of a new release. That’s included in the subscription fee for all our hosting plans, so clients don’t need to worry about getting charged to ensure they’re up to date. It’s important, because not only do new releases provide new features and better performance, but they also ensure and enhance security. 

Customizations & integrations

What if I need to incorporate functions not yet supported in Open edX, like video conferencing? Can you add that?

When clients want features or integrations that aren’t already supported by the Open edX platform, we’ll do what’s necessary to develop it. Frankly, that’s what we love doing most.

For instance, the LabXChange team wanted users to be able to quickly incorporate and reuse content to create new learning pathways on the fly. At the time, Open edX didn’t support that capability, so we wrote a completely new storage architecture called Blockstore that’s now the standard storage architecture for the project.

It’s true that Open edX doesn’t support video conferencing out of the box, but OpenCraft can integrate apps like Zoom, and many others, into instances and courses using the LTI protocol. 

Hosting

How about hosting? Do you host clients’ instances? If so, what does that entail and what do you provide?

We frequently host our clients’ Open edX instances on OpenStack servers which are based in Europe, though if your needs are different, we’re happy to discuss it. In a nutshell, we have two plans. 

Our Pro & Teacher is designed for clients looking for a full-featured, dedicated Open edX instance at a reasonable price. It includes the Open edX LMS and the Studio authoring tool for developing courses. Pricing is based on the number of monthly users, up to 1,000, and support is provided via email. 

Our Institutional Plan is intended for clients who need significant customization and advanced functionality such as e-commerce, single sign-on, edX Insights analytics and dedicated mobile apps. With this plan, themes are completely customizable, there is no limit to the number of users and OpenCraft provides priority support with one of our senior developers. 

For full details on the different plans we offer, click here

Custom domain

Do clients need to use the OpenCraft domain if you host the instance or can they use a custom URL?

We provide custom domains for clients on both plans, though the Pro & Teacher option does require an additional monthly fee to enable this (it’s included in the Institutional plan). We can point your instance to any valid custom domain.

Work experience

What examples can you provide of the work you’ve done?

We’re doing a lot of work directly for edX, which is pure platform development for Open edX. From our early days we've done work such as developing much of the platform's single sign-on capabilities, Drag and Drop XBlock (where the learner drags items to zones on a target image) and the Content Libraries feature. We're currently working on multiple projects with edX to update and improve many areas of the platform such as discussion tools, open response assessment, LTI exercises, Common Cartridge compatibility, content libraries and taxonomies, theming & branding, and more obscure backend stuff! We have many more projects to come in Q3 and Q4 2020. 

We also work with many high-profile academic institutions. We currently provide Open edX services to universities such as MIT, multiple Harvard schools, Arizona State University, Notre Dame University, and have worked with many others. 

We’ve worked with the French Ministry of Higher Education to develop the French national platform for promoting the use of massive open online courses, and currently work on a similar project with the Government of Israel on a national platform called Campus-IL. We also work with private firms. For example, we provide deployment, hosting and maintenance of Cloudera OnDemand, the California technology company’s learning platform.

Safe to say, if you need a learning platform, OpenCraft can deliver it.

Need support for the Open edX platform? Book a free 1hr consultation and we will help you out. 

Photo by Angelina Litvin on Unsplash

Congratulations to Harvard University’s Faculty of Arts and Sciences, the Amgen Foundation, and the LabXchange team on this win!

Even though the Open edX Conference was cancelled because of the COVID-19 pandemic, the awesome team at Open edX chose to celebrate the work of its community by announcing the inaugural Open edX prize earlier this year.

Open edX have published an official blog post to announce the good news. Read it here. 

The nominations were evaluated according to two categories, the “most important technical project” and the “most important project in instruction or learning design”.

LabXchange was one of the many nominated projects by the community. It is a free and powerful online learning platform charged with innovative features and content. Powered by Open edX software, it provides users with enriching learning experiences and assets to help them grow. Through the development of the LabXchange platform, OpenCraft has contributed major new Open edX features such as Blockstore, a new XBlock Runtime, and a new visual assessment editor. You can learn more about LabXchange by checking our other blog post.

It gives us immense pleasure to announce that LabXchange was chosen to be “the most important technical project” among the many compelling nominations submitted by the community. We would like to congratulate Robert Lue, Professor of the Practice of Molecular and Cellular Biology at Harvard University and UNESCO Chair on Life Sciences and Social Innovation, Gaurav Vazirani, Managing Director of LabXchange, and David Ormsbee, Staff Software Engineer at edX. We would also like to congratulate Braden MacDonald, our CTO at OpenCraft, Usman Khalid, Senior Open Source Developer at OpenCraft, and every OpenCraft member who put any of their valuable time towards growing this platform; after all, we are a team working together to help each other grow alongside OpenCraft.

As a company dedicated to contributing to Open Source Software, such a prize is a bright indication of the appreciation the community has for the work we are proud to be contributing daily.

This article was written by Jeff Miller, a member of the OpenCraft marketing team.

We’ve consciously built OpenCraft on four values: Openness, quality, commitment and empathy. When it comes to quality, especially when it comes to ensuring the best privacy, security and flexibility for our users, we don’t do half-measures. 

We work as hard as we can to ensure that our clients get the best possible Open edX development we can deliver. And that commitment doesn’t stop with custom code development. We also host instances of Open edX for our clients, and each of them is logically separate from all the others. 

We only host "dedicated" instances of Open edX, which means that each instance that we deploy belongs to a single client. At the entry-level price range, other vendors offer hosting on Open edX sites, which are hosted on a shared instance along with other clients.

With a shared instance, multiple clients share the same resources, from the database to APIs. When you have a dedicated instance, the server belongs to you and you alone, and ownership confers many advantages. Let’s go through the most important of them: security, scalability and performance, data portability and control, and flexibility and customization.

Scalability, Performance and Security

Our instances are hosted on highly automated and robust cloud infrastructure, with a design and deployment strategy that has been optimized specifically for hosting Open edX, following industry-leading practices for performance and security. 

With a dedicated instance, our clients never have to worry about performance lagging because another client is hosting a class with hundreds of simultaneous users and it’s hogging more than its fair share of resources. 

If you need to scale up on a shared instance, it can be done, but it's impossible to predict when multiple users of the same site might have a lot of traffic at the same time, which means shared instances aren't scaled to handle the full load for each individual site they contain. In a nutshell, you end up with less available resources than you’ll probably need to handle traffic spikes. With a dedicated instance, you’ll always be able to scale to your own needs, so you can have as many courses and users as you like. 

Security is also stronger with a dedicated instance. Security flaws or admin errors on one site on a shared instance can affect everyone else. For example, admins on a shared site could elevate their privileges on other sites from the same instance, which opens up all kinds of unpleasant possibilities. And if one XBlock on a shared instance has a security hole, everyone whose site is on that instance is vulnerable. By controlling your own instance, you don’t run the risk of suffering the consequences of your “roommates’” mistakes.

Data Portability and Control

If you’re on a dedicated instance, the data belongs to you, and it’s easy to extract or migrate it to another host. But that’s a very tricky task if you’re on a shared instance, because you share a database with every other site on that server. Your data is all mixed up with everyone else, and extricating yours from the shared database will require a ton of expensive, time-consuming work. It’s the ultimate form of vendor lock-in. Once your site is on a shared instance, it’s very unlikely you’ll be able to leave, and if you try, you’ll be in for a terrible case of sticker shock when the bill arrives.

On a dedicated instance, you have complete administrative control, which can save you a lot of headaches. You have direct access to the Django admin console and to the database and APIs, a level of access that’s very restricted on shared instances. If you want to make even minor changes to your site on a shared instance, often the only way to get it done is to make a support request. A task that could take five minutes for you to complete on a dedicated instance takes a day or two because your ticket has to wait in the queue for an available admin. More than once we’ve had clients come to us because they were tired of having to ask their vendor to handle issues they could have easily handled themselves.

Flexibility and Customization

At OpenCraft, customization is our bread and butter. We eat custom code for breakfast, so this advantage is close to our heart. When you’ve got a dedicated instance, you're in full control of your customizations. If you’re sharing an instance, however, the host has to be very careful about how customizations are done and the dependencies of components, because changes to one site can have repercussions for everyone else. So if you want further customization of optional functionality like XBlocks, ecommerce or single sign-on, you’re going to face some challenges in a shared instance.

This inflexibility carries over even into areas like localization. While it’s possible to install additional languages on a shared instance, it could have technical implications for other sites, especially if you’re dealing with languages such as Arabic or Hebrew that are read from right to left. For us, installing a new language on a dedicated instance is about one hour of work.

Finally, by providing dedicated instances, we’re able to ensure reliability. Maintenance and upgrades are included with all our hosting plans, and we have a track record of exceptional, 99% availability. We also create daily backups for every instance and can restore backups quickly and easily. 

So, while it’s a bit more costly for us to provide our clients with dedicated instances, we think it’s worth it in the long run. Stronger security, fast performance, full control, scalability and as much customization as you want —these are important to anyone who’s running an Open edX instance. Besides, if you want to provide a high quality experience, you can’t take half measures.

Want to learn more about our hosting plans? You can check out all the details here. Or get in touch — we’d love to talk with you.

Photo by Paul Gilmore on Unsplash

This article was written by Jeff Miller, a member of the OpenCraft marketing team.

I’m excited to share that we have launched an updated Pro & Teacher hosting plan for your Open edX® instances! We work very closely with our clients, and we listen to their feedback. As such, we have been working hard to improve our hosting plan after hearing that customization was too limited, the process to make changes to a theme was too time consuming, and that the price point was too high.

New features include a dedicated, secure instance that is backed up and monitored by the OpenCraft team, an unlimited number of online courses to serve a wide and diverse range of learners, a new UI console that provides a streamlined user experience (and includes a comprehensive theme editor for complete brand adherence), and the ability to create and support both custom domains and page creation for privacy policies and service level agreements.

With the new self-service platform, you can easily customize your own Open edX instance to provide a smooth registration and onboarding experience, as well as a customized look-and-feel to reflect your brand. You can easily install your instance and access it quickly. There’s no need for extensive technical knowledge or additional consultants.  We have also introduced multiple pricing tiers based on the number of active users, which enables you to get all the Open edX platform’s essential features at a much lower cost. The details of the pricing tiers are outlined below.

Here’s a look inside the platform.

Customize your Open edX instance

A revamped user console features a comprehensive theme editor that allows thorough branding of the instance with options to customize colors, logos, buttons, navigation, footers and hero images.

An overview of our new user console - it looks great! : )
Add custom logo and favicon
Customize buttons
Customize navigation items
Customize the footer of your site
Customize your hero text and background image

Configuration options include custom domains:


Additionally, you can create custom pages, such as terms of services or policy privacy pages:


Different plans to match different needs

OpenCraft is offering two hosting plans: Pro & Teacher and Institutional. See our website for a full comparison of the plans

Each plan:


The Pro & Teacher hosting plan provides all the essential features at an entry level price. It’s ideal for smaller organizations, teachers and even people who just want to try out the platform. It starts at just €39 / $43 per month for 50 users.

The Institutional hosting plan is designed for larger organizations with greater needs. If you want to scale up to millions of users, offer services such as e-commerce and mobile apps, receive expanded support and take advantage of OpenCraft’s experts for custom development support and services — then this is the plan for you. You can get a quote and learn more about our Institutional plan here

Want to try the updated Pro & Teacher plan? Get started with a 30-day free trial here

This article was written by Jeff Miller, a member of the OpenCraft marketing team.

At OpenCraft, we work daily with top-tier universities. This probably isn’t all that surprising given that we specialize in developing and maintaining custom instances of Open edX, which is an open source course management platform that hosts Massive Open Online Courses (MOOCs) and online learning. 

A massive number of institutions worldwide are members of edX.org, with more than 50 who are charter members. And they’re not just using the platform to power MOOCs, the original use case for Open edX. Today, they’re using Open edX to complement residential programs and offer blended learning experiences, especially in the face of the COVID-19 outbreak, because the platform's streamlined authoring experience allows instructors to easily shift to online courses and get them up and running quickly. 

So, why are so many turning to the open source Open edX platform and, consequently, OpenCraft? After all, when it comes to learning management systems (LMS), Open edX is far from the only game in town, and prestigious institutions certainly have the budget to purchase proprietary software. 

Expanded uses of Open edX at academic institutions

Universities have a dual humanitarian mission of providing high quality instruction and increasing our collective understanding of the world through research, but they still operate in a competitive environment. These institutions are constantly vying against each other for prestige, research funds and talented students. So, just as processes and business models evolve in the corporate world in response to competitive pressure, curriculum and research are constantly evolving at top-tier universities. This is especially critical in the wake of COVID-19, as higher ed institutions are now determining how they’ll continue instruction for the rest of 2020 and into 2021 — online learning will continue to play a key role. 

Universities often need to expand, adapt and customize their LMS platform to meet their goals for learning innovation and research projects. Open edX is ideal for this purpose. It’s an open source, massively scalable platform that’s supported by an enthusiastic global community. And though its original use case, of course, was to power MOOCs, the platform has evolved into a powerful, flexible LMS. 

For example, here’s some customizations we have done for our university clients:


A great example of a large-scale customization project is LabXChange. You can read much more about that particular project in our LabXChange launch blog post, but, briefly, LabXChange is an online science resource for students, teachers and the general public that we developed for Harvard University. It’s simple for anyone to build and share learning pathways (sort of like mini-courses) from smaller pieces of content that can be easily remixed and reused. 

This was a two-year project built on Open edX, and it required extensive customization and new capabilities. This resulted in our contributing several major new Open edX features such as Blockstore (a new storage architecture), Content Libraries version 2, a new XBlock Runtime, anonymous platform access and a new visual assessment editor.

Lessons learned from working with universities

Having worked with dozens of universities over the past seven years, we’ve learned a great deal about how best to work with them. 

You have to be patient. The academic world typically moves more slowly than the business world. We’ve had projects that took two years to come into place, from initial discussions to a signed contract. 

Additionally, universities’ needs and goals change over time, which often affects the scope and timeline of our projects. Our iterative development approach allows us to be as nimble as our clients, so we can make changes, stay transparent and ensure that projects are delivered on time and with no surprises. 

Finally, universities appreciate our commitment to open source and the larger Open edX community. They can expect that our solutions will be reviewed and approved by edX engineers and that they will align with edX's long-term roadmap. After all, it’s much less expensive to maintain new features and capabilities once a feature is merged into Open edX, because then it's maintained by edX and the community as a whole. 

We really enjoy working with universities because they’re often pushing the boundaries of what’s been done before, giving us the opportunity to do creative, complex work. Plus, their high quality standards keep us sharp as we work to meet and exceed them, augmenting our expertise and increasing our ability to meet the challenges that all of our clients bring to us.

Learn more about our work with colleges and universities

Photo by Christopher on Unsplash

Get in touch

We'd love to hear from you! Send us a message and a member of our team will get back to you.
Contact us
Subscribe to our newsletter
edX and Open edX® are trademarks of edX Inc