Juno is a Python development environment for data analysis and scientific research, which works with Jupyter notebooks — a commonly used document format, which lets you combine source code, code output, text, formulas and rich media. Juno ships with its own Python interpreter, which executes code in your notebooks locally on your device, bringing a lot of industry standard desktop tools to iOS and iPadOS for the first time. Juno strives to provide a seamless coding experience on the iOS platform: it integrates with Files , supports Dark Mode, Dynamic Type and split screen multitasking, and works beautifully with Apple’s Magic Keyboard and trackpad.
Juno only ships with Python 3.6.6 kernel at the moment (which we plan to upgrade to Python 3.8 soon). We know many of you are also interested in R and Julia kernels — which we certainly would like to look into at some point, too.
Juno currently ships with over 50 Python packages pre-installed. The key packages with native extensions are:
You can also install any additional packages, as long as they are pure Python ones: Install Python packages in Juno
You can upgrade any package you have installed yourself, but anything that comes pre-installed is not upgradeable — because Juno’s internals are relying on those packages and libraries, too. So, to make sure Juno remains operational no matter what’s installed in the system, it doesn’t let you upgrade those. However, we try to ship Juno with as few pre-installed packages as possible — so that you can install whichever version you need.
Most likely this means that this package has native extensions, which means we will need to port it to iOS and embed into the app binary, similar to what we did with NumPy, SciPy, Pandas and other non-pure Python packages. Please, submit a package request in our issue tracker here (if there isn’t one already).
If you are confident that this a pure Python package, but Juno’s package installer doesn’t let you install it, please raise an issue in our issue tracker, and we will look into it. Meanwhile, you should be able to install this package manually, by placing its sources to
/site-packages directory. If you managed to install it, but Juno doesn’t let you import it in code, make sure it doesn’t have a dependency that doesn’t match the above criteria.
You can find more information on what can be installed and how to do this here: Install Python packages in Juno.
Please, keep in mind that Juno’s package installer is “stateless”, and is not aware of what is currently installed. It simply overwrites whatever happens to be in
/site-packages with every installation — leaving package management to the user. So if it reports a successful installation, and then you search for the same package again, it will always be reported as “not installed”, even though you should be able to import and use the package (assuming it’s pure-Python and all dependencies are also installed).
You can find more information on how Juno’s package installer works here: Install Python packages in Juno.
You can remove a package by simply deleting relevant folder or file in
Yes, you should be able to do this the same way you do on desktop — the file should be either in
/site-packages folder, or in your notebook’s directory. In case of the latter, you also need to make sure Juno has access to notebook’s directory (more on this here: Install Python packages in Juno), and that the .py file you are trying to import is actually downloaded to device, if it happens to be in a cloud storage, e.g. iCloud.
Unfortunately, no. Installing a kernel certainly lies in the “installing a package with native extensions” territory, so whenever Juno adds support for additional kernels, they will likely come pre-installed in the app.
If you can’t open
Welcome to Juno.ipynb file in Juno’s on-device storage, or if .ipynb files don’t display a Jupyter logo on their thumbnails, most likely something is broken with file association, i.e. with how Juno registers with the OS as a handler of .ipynb files. There are apps on the App Store that abuse this functionality, and common symptoms are described in this issue, for example: https://github.com/rationalmatter/Juno-Issue-Tracker/issues/55. A solution would be to identify and uninstall the culprit, a common abuser is the “Notebook Master” app.
Juno integrates with the file system using Apple’s Files app , and should be able to open notebooks anywhere on your device. That said, some cloud storage providers don’t integrate with Files in full (for whatever reason, perhaps due to additional complexity, or as a security measure). So, file system functionality that will work with cloud storage services goes only as far as their developers chose to integrate with the Apple’s APIs. For some, everything will be working 100% — you can edit notebooks and grant access to directories (e.g. iCloud); for others, you are allowed to edit notebooks, but not request access to entire directories (e.g. Dropbox, OneDrive); some services won’t even let you open .ipynb files (e.g. Google Drive), which frankly looks like plain misconfiguration on their part. Hopefully, this will get resolved by cloud storage services finalising their Files integration eventually. That said, we are looking into workarounds, where we could potentially integrate with some of them bypassing Files app.
You can find more information on working with the iOS file system here: File system permissions and paths in iOS.
Notebook editor in Juno and Juno Connect responds to default Jupyter shortcuts on your hardware keyboard, and also allows configuring an additional binding to
Option or a few other key options, which will duplicate
Esc key and will let you enter command mode, for instance.
Both Juno and Juno Connect fully support Dynamic Type, which means they will adjust their UI according to system Text Size setting (Settings > Display & Brightness > Text Size). We are working on an app-specific setting for text size too, which will override the system one — this will be released in one of app’s updates.
Juno integrates with Files and iOS file system APIs, so you should be able to work with git using any third-party git client, like Working Copy. You would clone a repo to your device, run notebooks in Juno, and then commit your changes in the git client. Thanks to Juno’s Files integration, you can edit those notebooks in place, with full access to the cloned repo directory (more on this here: File system permissions and paths in iOS).
Juno doesn’t support arbitrary extensions, although it does come with
ipywidgets pre-installed, for example. Not all nbextensions will work with Juno’s notebook editor, but feel free to create a feature request in our issue tracker for any particular extension you are missing: Juno Issue Tracker.
There is no multiple environments support at the moment, no.
This is probably because you purchased Juno Connect back when it used to be a free app, with an optional in-app purchase. Unfortunately, App Store only takes into account the actual amount paid for the app in the app bundle — so in this case it thinks that you got Juno Connect for free (even though you may have paid for the in-app purchase), therefore subtracting 0 from bundle price. You are probably better off getting Juno separately, as app bundle will attempt to charge you more. Apologies about this, frankly we wish App Store would just subtract the current Juno Connect price. Perhaps Apple will fix it eventually.