nteract is first and foremost a dynamic ecosystem to give you flexibility when writing code, exploring data, and authoring text to share insights about the data.
Build your own interactive computing experiences with nteract's core SDK.
- Connect to remote Binder deployments using rx-binder and host-cache
- Build clients on top of Jupyter servers running locally or remotely using rx-jupyter
- Build your own notebook UI using presentational components
Edit code, write prose, and visualize with nteract's applications.
- Share documents understood across the Jupyter ecosystem, all in the comfort of a desktop app.
- Explore new ways of working with compute and playing with data.
- Bring the nteract experience to your web-based Jupyter installation with the nteract server extension.
We support Jupyter kernels locally on your system and on remote JupyterHubs via Binder.
Using nteract's applications
Installing the nteract desktop application
If you're here to install the nteract desktop app, visit nteract.io to download a binary and install or visit the releases page. The nteract desktop app ships with a NodeJS kernel by default. If you'd like to use other Jupyter kernels, you will need to install them.
Installing nteract web
Our current flavor of nteract web runs on top of the Jupyter server. Install it with
pip install nteract_on_jupyter jupyter serverextension enable nteract_on_jupyter
jupyter nteract and you're running nteract on the Jupyter web application!
Try the nteract playground
The nteract playground is a web-based application that allows you to write code and execute code in a web-based editor supported by Binder and Jupyter kernels. You can learn more about in the nteract play GitHub repo.
To learn more about using the nteract desktop app, please check out the user guide
The contributors are listed in the contributors page on GitHub.
To learn how to contribute to nteract, head on over to our contributing guide.
Overview of nteract's monorepo
This repository is a monorepo, which basically means that the repository hosts more than one module or application. In our case, we have two main directories:
packages/ -- components used as an individual library applications/ -- all the user facing applications (i.e. desktop)
packages directory has the components needed to build new applications,
applications has the desktop app and the Jupyter extension.
Why have a monorepo? The monorepo contains many components and packages that can be mixed and remixed to create new applications. The monorepo keeps these elements together so they are easy to discover and use. Another benefit is that the monorepo makes it easy to iterate on applications that share common components. For example, if we update a component, such as the Jupyter message handling, and happen to introduce an issue when making a change to the desktop app, we would notice the issue in tandem.
To get started developing, set up the nteract monorepo.
Set the monorepo up in dev mode
- Fork this repo
- Clone your fork or this repo
git clone https://github.com/nteract/nteract
cdto the directory where you
To keep up-to-date with changes to the root nteract/nteract branch:
- Set the root as a remote:
git remote add upstream https://github.com/nteract/nteract.git
When changes are made to the root nteract/nteract, they can then be pulled from the root and merged to your master branch:
git pull upstream master
Building a specific package
In some cases you'll want to modify an individual base package (i.e. commutable
or transforms) and not rebuild all of the other packages. To target a build of a
specific package, use this command, replacing
packageName with the fully qualified name of the package you want to build:
tsc -b packageName
For example, to hack on the
transforms package, use
tsc -b packages/transforms
Hacking on the web application
If you're looking to test out changes you make to the core SDK, the web application is the best integrated environment to test on. You can run the web application in development mode, by configuring the Jupyter extension to run in development mode.
Hacking on the desktop application
Quick and dirty (manual)
As you make changes, you will have to close the entire app (CMD-q on macOS or
CTRL-c at the terminal) and then run
yarn app:desktop again to see the
Progressive Webpack build (automatic)
In separate terminals run:
This progressive webpack build will keep rebuilding as you modify the source code. When you open a new notebook, you'll get the fresh, up-to-date copy of the notebook app.
console.log statements in the main Electron process are piped to stdout.
console.log statements in the Electron renderer process go to the
regular Dev Tools console (accessible from the View menu). Set
ELECTRON_ENABLE_LOGGING=1 to pipe renderer
console.log to the launching
terminal as well. This is useful for debugging crashes and notebook closing
I upgraded my developer installation and things are broken!
yarn clean && yarn
I want to debug redux actions and state changes.
- Enable redux-logger by
spawning the application with
I keep getting a pop-up asking: Do you want the application "nteract Helper.app" to accept incoming network connections? while developing or using a custom build of nteract on macOS.
This is how the the macOS firewall behaves for unsigned apps. On a signed app, the dialog won't show up again after approving it the first time. If you're using a custom build of nteract, run:
sudo codesign --force --deep --sign - /Applications/nteract.app
You will have to do this again every time you rebuild the app.
Work on the nteract notebook is currently sponsored by
We're on a common mission to build a great interactive computing experience. You can help by:
- QAing the desktop application and helping create meaningful bug reports
- Providing support on GitHub issues or the Slack team
- Donating money to nteract, which is a non-profit fiscally sponsored by NumFOCUS
- Contributing your organization's engineering hours to the nteract project
Made possible by
The nteract project was made possible with the support of
If your employer allows you to work on nteract during the day and would like recognition, feel free to add them to this "Made possible by" list.