Introducing Jupyteach

Introducing Jupyteach, a new LMS for learning and teaching Data with Python

Introducing Jupyteach

The Valorum team has a passion for learning and teaching. We love to explore new ideas and help others feel the energy that comes from gaining knowledge. Over the past 10 years we have continuously taught courses at a number of universities around the world. Our courses are mostly Python based (some Julia) and cover topics at the frontier of economics, machine learning, and data science. During our experience, we have searched for the best way to teach in person and remote courses on these topics.

We've tried everything.

We mean everything...

Each of these tools is excellent in many ways, but none of them was quite right for the way we like to teach courses. We build all our lecture notes in Jupyter notebooks. We like to mix explanation -> example -> exercises/practice freely in the notes themselves. We encourage students to alter the codes and explore different options and possibilities. We often flip the classroom, so great video support is a must.

So, we decided to create Jupyteach. A new LMS, streamlined for our needs. It doesn't do most of the things some of these other platforms do. But what it misses in terms of features it makes up for in ease of use and powerful interactivity.

Jupyteach is under active development (and use at multiple universities including New York University and Peking University HSBC Business School) and is in the alpha stage. In this post we will give an outline of our current progress as well as hint at future plans and ideas. We will provide updates in future posts.


We are excited about Jupyteach, primarily because it does exactly what we need it to. No more, no less. The key features already implemented in Jupyteach include the following:

  • User management: users can sign up via email+password or via email and passwordless codes sent to their inbox
  • Course management: users that are instructors can create courses. Within a course instructors can invite students other instructors and TAs, upload a syllabus, and manage course content (see below)
  • Communication:
    • Announcements: instructors can create announcements that appear on the announcements page of their course and are also delivered to all students via email
    • Discussions: all course participants can start a discussion thread
  • Content: content on Jupyteach is organized in a two-level hierarchy. The smallest unit of content is a content block. Content blocks can be organized into lectures. Content blocks can be one of a few different types
    • Notebook: a Jupyter notebook that will be rendered in a live computational environment powered entirely by the user's browser using the JupyterLite project. This means (1) no installation step for students (2) no server management for instructors and (3) interactive lecture notes!
    • Video: an embedded video hosted either on YouTube or Vimeo
    • Markdown: a standalone markdown document that is rendered on its own page
    • Assignment upload: A place for students to attach/upload Jupyter notebooks they have completed as homework
    • Link: a link to an external resource such as a data file or pdf
    • Quiz: an interactive, auto-graded quiz (see below)
  • Quizzes: automatic grading is a must for our teaching. We like to give students many opportunities to practice the concepts they are taught, but doing so typically comes at the cost of more time spent grading assignments. So, Jupyteach has quiz functionality. Quizzes are composed of multiple questions, all of which are automatically graded as the student submit responses. Questions can be of multiple types:
    • Single selection: a user is presented with a prompt and a list of options. They must select the single correct option
    • Multiple selection: a user is given a prompt and a list of options. They must select all correct options
    • Code: the user is given a description of a programming task and some starter code. They must modify the code so it correctly solves the task. Correctness is verified by running the user's against a test suite set up by the instructor. The Python test code is run in the student's browser, making the automated quiz system cheap, efficient, and scalable.
    • Fill in the blank: the user is given a problem description and a piece of code that has missing values. They must fill in the missing values. Correctness is verified using a test suite using the filled-in code similar to the Code questions

Real Time

One unique aspect of Jupyteach is the technology we chose to build on. We are using the Phoenix web framework – a powerful web framework for the Elixir programming language. Elixir is built on top of Erlang/OTP and the associated BEAM virtual machine. The BEAM is known for being extremely resilient and scalable. What this means for Jupyteach is that we will be able to build real time features (think google docs) with shockingly little effort.

We have big ideas and plans for this, but none of them are quite ready to talk about yet. As soon as we finalize the core feature set (9 of 11 items done), we plan to shift engineering efforts to real time system. Keep an eye on this space!

Looking Forward

We have many excited things planned for Jupyteach and can't wait to share them with you. We'll be posting here regularly, so subscribe today to stay up to date!

Subscribe to Valorum

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.