We use Jupyter and nbgrader in Cambridge for the first year Foundations of Programming course: https://www.cl.cam.ac.uk/teaching/1920/FoundsCS/materials.html
(the pdf is generated from the Jupyter export, and the content is written in Markdown and converted to notebook format using a modified mdx).
It’s on my todo list to resurrect GitHub - andrewray/iocamljs: An OCaml javascript kernel for the IPython notebook so that we can do this with a pure-client-side experience. We have internal hosted servers so that each student has their own container running their Jupyter/OCaml kernel, but I think it would be more robust to switch entirely client side for everything except exercise grading.