An environment is a filesystem snapshot of the runtime. It includes everything that is necessary to run whatever is in its associated code cells - from the operating system to the smallest dependency.
Environments make articles a fruitful basis for easy experimentation and collaboration.
Nextjournal automatically versions an article's entire dependency stack. If new dependencies are added, a new version of the environment is created. A researcher can always go back to a previous version, import the environment into a new article, or remix their work in an collaborative effort.
An environment is a filesystem snapshot of the runtime stored as a Docker image. These images are a sophisticated software abstraction hidden behind our notebook interface. You will never have to worry about how to install Docker, manage images, or prepare them for others to use. This quick tour of Nextjournal's architecture will help convey the power of the platform.
Most images used in Nextjournal use Ubuntu 18.04 LTS as a base. On top of that are system libraries that extend the functionality of the Linux core.
The stuff you care most about - your carefully crafted code, written descriptions, and imported datasets - all sit atop of this stack of dependencies. This is so tightly coupled that running a little code and some data on two different computers can require hours of effort to install and configure the correct software stack. Nextjournal's environments eliminate concerns around dependencies so you can focus on your work.
While Nextjournal does make setup easier, what we're really passionate about is making changes easier.
Version Control Systems like Git have revolutionized the development of software by recording every committed change to source code. This simplifies collaboration by reducing risk and ultimately incentivizes openness; if someone commits an ill-advised change, simply rewind to a previous version of the source code.
Nextjournal offers versioning across your entire project: from your source code all the way down to the most basic dependency. This means:
Sharing research with a peer is no longer difficult. Provide a URL and it immediately runs in their web browser.
Updating a depreciated library is no longer a risky position. Install the new software, tinker with your code, and if it's not working out, rewind.
Collaborating is no longer painful. Others can take your fully-attributed work, hit the remix button, and experiment with different datasets and easily alter code.
The default environments available in Nextjournal are listed below. Note that each language is running within this notebook. A true polyglot experience.
Default environments are no different then your own custom environments. To see any environment's features and how it is built, click on the language name in the lower right corner of any cell.
Based on Ubuntu 18.04 LTS.
Python default environments with support for code completion through the jedi package.
std::cout << "Clang version " << __clang_version__ << std::endl;
More Than a Notebook
Nextjournal promises complete reproducibility across your entire project. For a broad overview what what makes Nextjournal different from other notebooks and development environments, check out Why Nextjournal or sign up today to try for yourself.