Skip to content
Literate scientific computing and communication for the web
JavaScript Python CSS HTML Shell Dockerfile Makefile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Run snapshot tests based on storybook (#2506) Dec 3, 2019
.github Correct CHANGELOG link in PR template (fixes #2131) Aug 8, 2019
.storybook Run snapshot tests based on storybook (#2506) Dec 3, 2019
bin Use Spinach task scheduler instead of Celery. (#2381) Oct 29, 2019
docs Support bytes fetch type (fixes #1786) (#2550) Dec 19, 2019
requirements Bump click from 7.0 to 7.1.1 in /requirements (#2750) Mar 26, 2020
server Fix hot reloading in development Mar 5, 2020
src Move some non-requesting file actions to a more appropriate spot (#2722) Mar 3, 2020
test Ensure jest tests run in UTC timezone Jan 10, 2020
.babelrc Run snapshot tests based on storybook (#2506) Dec 3, 2019
.codecov.yml Add codecov config to adjust target/threshold and disable patch track… Oct 28, 2019
.coveragerc Store coverage results in Docker volume so we can submit to Codecov f… Oct 21, 2019
.dockerignore Fix dockerflow / docker container building (#1070) Oct 18, 2018
.editorconfig Set Python indent to 4 in .editorconfig Jan 31, 2019
.env-dist Remove duplicate psycopg2 entry in build requirements. (#2324) Oct 2, 2019
.eslintrc.js Fix #2133: Homepage drag and drop support (#2327) Oct 18, 2019
.gitignore Use Spinach task scheduler instead of Celery. (#2381) Oct 29, 2019 0.19.0 Mar 3, 2020
Dockerfile Pin virtualenv to 20.0.1 Feb 11, 2020
LICENSE Create LICENSE Feb 8, 2018
Makefile Update Python dependency update process to use pip-compile from pip-t… Nov 4, 2019
Procfile Use Spinach task scheduler instead of Celery. (#2381) Oct 29, 2019 Switch server implementation over to python Jul 12, 2018 Resurrect iodide local-only dev environment Jul 18, 2019 Fix some grammar mistakes (#2474) Nov 25, 2019 Extend Python test harness. (#2305) Sep 27, 2019
docker-compose.yml Update redis Docker tag to v5.0.8 (#2735) Mar 25, 2020 Switch server implementation over to python Jul 12, 2018
package-lock.json Update jest monorepo to v25.2.0 (#2749) Mar 25, 2020
package.json Update jest monorepo to v25.2.0 (#2749) Mar 25, 2020
pyproject.toml Fix isort/black incompatibility. Jun 12, 2019
pytest.ini Add Spinach worker fixture. (#2404) Nov 1, 2019
requirements.txt Remove double-billiard dependency Sep 3, 2019
setup.cfg Add a datetime helper function to django server tests Sep 27, 2018
webpack.config.js Fix minification on dev builds of iodide frontend (#2481) Nov 25, 2019

CircleCI Join the chat at codecov

The Iodide notebook

Try it in your browser right now!

Please note: Iodide is in early alpha, and still subject to breakage, changes, and overhauls

View source for science

Today, sharing scientific results is easier than ever. You can email a PDF, write up a Google doc, or post to your blog. You can embed plots, data tables, and even interactive visualizations. But what if you want people to be able to replicate and extend your results -- to take your results and “view source” to see how you arrived at your conclusions? Or even hack and remix them to ask their own questions?

To do that now, you typically have a couple of options. You could send your code alongside your nice, clean PDF or blog post, allowing you fine-grained control over your presentation, but that requires you to separate your presentable results from your code and to manage multiple files. Alternatively, you could share your results and code bundled together in a notebook format that mixes code with write-up; this has the advantage of keeping your code and results closely tied together, but the presentation can get a bit unwieldy, especially if you want to share your results with a less technical audience. And in either case, sharing your code will only allow your collaborators to replicate and extend your results if they are first able to replicate your whole setup -- if they can run your code with the same libraries, the same data, and the server access.

If only there was a technology that was great for presenting documents and visualizations, that allows code to run anywhere with zero setup, and that all scientists and citizens had access to...

Luckily, that technology already exists: the web browser.


Iodide is a modern, literate, and interactive programming environment that uses the strengths of the browser to let scientists work flexibly and collaboratively with minimal friction. With Iodide you can tell the story of your findings exactly how you want, leveraging the power of HTML+CSS to display your results in whatever way communicates them most effectively -- but still keeping the live, editable code only one click away. Because Iodide runs in the browser you already have, you can extend and modify the code without having to install any software, enabling you to collaborate frictionlessly.

And thanks to WebAssembly, working in the browser doesn't mean that you're restricted to working in just JavaScript. Via the Pyodide project you can already do data science work in the browser using Python and the core of the Python science stack (Numpy, Pandas, and Matplotlib). And that's just the start. We envision a future workflow that allows you to do your data munging in Python, fit a quick model in R or JAGS, solve some differential equations in Julia, and then display your results with a live interactive d3+JavaScript visualization... and all that within a single, portable, sharable, and hackable file.

Our focus is on delivering frictionless, human-centered tools to scientists. You can read more about our core principles below. If this vision resonates with you, please consider contributing to the project!

Visit to see example and demo notebooks, and to learn more!

For information on developing and contributing to iodide, please see our documentation.

PS: We've got a few other ideas about how to make in-browser workflows as ergonomic for scientific tasks as possible, including

  1. using modern JS transpilation tools to extend JS syntax for numerical computing -- just enough for matrix operations, operation broadcasting, n-dimensional slicing, and a few other basic scientific computing needs;
  2. compiling best-in-class C/C++ science libraries (and runtimes!) to Webassembly and wrapping them in ergonomic JS APIs.

If either of those projects appeals to you, please reach out!

Get in touch

Please feel free to join our Google group to contact us and keep up with what we're working on.

You can also chat with us on Gitter.


The Iodide code is shared under the terms of the Mozilla Public License v2.0. See the LICENSE file at the root of the repository.

You can’t perform that action at this time.