Kotlin kernel for Jupyter notebooks
Kotlin kernel for IPython/Jupyter
Beta version. Tested with Jupyter Notebook 6.0.3, Jupyter Lab 1.2.6 and Jupyter Console 6.1.0 on Windows, Ubuntu Linux and MacOS. Using with Jupyter Console frontend is problematic now because of logging which cannot be switched off. Tuning logging options is planned for future releases.
To start using Kotlin kernel for Jupyter take a look at introductory guide.
Example notebooks can be found in the samples folder
There are three ways to install kernel:
If you have
conda installed, just run the following command to install stable package version:
conda install -c jetbrains kotlin-jupyter-kernel (package home)
To install conda package from the dev channel:
conda install -c jetbrains-dev kotlin-jupyter-kernel (package home)
conda remove kotlin-jupyter-kernel
You can also install this package through
pip install kotlin-jupyter-kernel (package home)
pip install -i https://test.pypi.org/simple/ kotlin-jupyter-kernel (package home)
pip uninstall kotlin-jupyter-kernel
git clone https://github.com/Kotlin/kotlin-jupyter.git cd kotlin-jupyter ./gradlew install
Default installation path is
~/.ipython/kernels/kotlin/. To install to some other location use option
-PinstallPath=, but note that Jupyter looks for kernel specs files only in predefined places
jupyter console --kernel=kotlin
To start using
kotlin kernel inside Jupyter Notebook or JupyterLab create a new notebook with
The following REPL commands are supported:
:help- displays REPL commands help
:classpath- displays current classpath
Dependencies resolving annotations
It is possible to add dynamic dependencies to the notebook using the following annotations:
@file:DependsOn(<coordinates>)- adds artifacts to classpath. Supports absolute and relative paths to class directories or jars, ivy and maven artifacts represented by colon separated string
@file:Repository(<absolute-path>)- adds a directory for relative path resolution or ivy/maven repository. To specify Maven local, use
Note that dependencies in remote repositories are resolved via Ivy resolver.
Caches are stored in
~/.ivy2/cache folder by default. Sometimes, due to network
issues or running several artifacts resolutions in parallel, caches may get corrupted.
If you have some troubles with artifacts resolution, please remove caches, restart kernel
and try again.
The following maven repositories are included by default:
The following line magics are supported:
%use <lib1>, <lib2> ...- injects code for supported libraries: artifact resolution, default imports, initialization code, type renderers
%trackClasspath- logs any changes of current classpath. Useful for debugging artifact resolution failures
%trackExecution- logs pieces of code that are going to be executed. Useful for debugging of libraries support
%useLatestDescriptors- use latest versions of library descriptors available. By default, bundled descriptors are used
%output [options]- output capturing settings.
See detailed info about line magics here.
When a library is included with
%use keyword, the following functionality is added to the notebook:
- repositories to search for library artifacts
- artifact dependencies
- default imports
- library initialization code
- renderers for special types, e.g. charts and data frames
This behavior is defined by
json library descriptor. Descriptors for all supported libraries can be found in libraries directory.
A library descriptor may provide a set of properties with default values that can be overridden when library is included.
The major use case for library properties is to specify particular version of library. If descriptor has only one property, it can be
defined without naming:
If library descriptor defines more than one property, property names should be used:
%use spark(scala=2.11.10, spark=2.4.2)
Several libraries can be included in single
%use statement, separated by
%use lets-plot, krangl, mysql(8.0.15)
You can also specify the source of library descriptor. By default, it's taken from the libraries directory of kernel installation. If you want to try descriptor from another revision, use the following syntax:
// Specify some git tag from this repository %use email@example.com // Specify commit sha, with more verbose syntax %use lets-plot@ref[24a040fe22335648885b106e2f4ddd63b4d49469] // Specify git ref along with library arguments %use krangl@dev(0.10)
Other options are resolving library descriptor from a local file or from remote URL:
// Load library from file %use mylib@file[/home/user/lib.json] // Load library from file: kernel will guess it's a file actually %use @/home/user/libs/lib.json // Or use another approach: specify a directory and file name without // extension (it should be JSON in such case) before it %use lib@/home/user/libs // Load library descriptor from a remote URL %use herlib@url[https://site.com/lib.json] // If your URL responds with 200(OK), you may skip `url` part: %use @https://site.com/lib.json // You may omit library name for file and URL resolution: %use @file[lib.json]
List of supported libraries:
- dataframe - Kotlin framework for structured data processing
- deeplearning4j - Deep learning library for the JVM
- deeplearning4j-cuda - Deep learning library for the JVM (CUDA support)
- default - Default imports: dataframe and Lets-Plot libraries
- exposed - Kotlin SQL framework
- fuel - HTTP networking library
- gral - Java library for displaying plots
- jdsp - Java library for signal processing
- kaliningraph - Graph library with a DSL for constructing graphs and visualizing the behavior of graph algorithms
- khttp - HTTP networking library
- klaxon - JSON parser for Kotlin
- kmath - Experimental Kotlin mathematical library operating on generic algebras
- koma - Scientific computing library
- kotlin-statistics - Idiomatic statistical operators for Kotlin
- krangl - Kotlin DSL for data wrangling
- kravis - Kotlin grammar for data visualization
- lets-plot - ggplot-like interactive visualization for Kotlin
- lets-plot-dataframe - A bridge between Lets-Plot and dataframe libraries
- lets-plot-gt - Lets-Plot visualisation for GeoTools toolkit
- mysql - MySql JDBC Connector
- numpy - Kotlin wrapper for Python NumPy package
- plotly - An experimental plotly.kt integration module. Supports static plots and HTML dashboards.
- plotly-server - An experimental plotly.kt-server integration module. Allows dynamic rendering of changing plots.
- serialization - Kotlin multi-format reflection-less serialization
- smile - Statistical Machine Intelligence and Learning Engine
- spark - Unified analytics engine for large-scale data processing
By default the return values from REPL statements are displayed in the text form. To use richer representations, e.g.
to display graphics or html, it is possible to send MIME-encoded result to the client using the
MIME helper function:
fun MIME(vararg mimeToData: Pair<String, Any>): MimeTypedResult
MIME("text/html" to "<p>Some <em>HTML</em></p>", "text/plain" to "No HTML for text clients")
HTML outputs can also be rendered with
HTML helper function:
fun HTML(text: String): MimeTypedResult
TAB to get the list of suggested items for completion. In Jupyter Notebook, you don't need to press
completion is requested automatically. Completion works for all globally defined symbols and for local symbols
which were loaded into notebook during cells evaluation.
If you use Jupyter Notebook as Jupyter client, you will also see that compilation errors and warnings are underlined in red and in yellow correspondingly. This is achieved by kernel-level extension of Jupyter notebook which sends error-analysis requests to kernel and renders their results. If you hover the cursor over underlined text, you will get an error message which can help you to fix the error.
./gradlew installDebug. Use option
-PdebugPort=to specify port address for debugger. Default port is 1044.
- Attach a remote debugger to JVM with specified port
Adding new libraries
To support new
JVM library and make it available via
%use magic command you need to create a library descriptor for it.
Check libraries directory to see examples of library descriptors.
Library descriptor is a
<libName>.json file with the following fields:
properties: a dictionary of properties that are used within library descriptor
description: a short library description which is used for generating libraries list in README
link: a link to library homepage. This link will be displayed in
minKernelVersion: a minimal version of Kotlin kernel which may be used with this descriptor
repositories: a list of maven or ivy repositories to search for dependencies
dependencies: a list of library dependencies
imports: a list of default imports for library
init: a list of code snippets to be executed when library is included
initCell: a list of code snippets to be executed before execution of any cell
shutdown: a list of code snippets to be executed on kernel shutdown. Any cleanup code goes here
renderers: a list of type converters for special rendering of particular types
*All fields are optional
Fields for type renderer:
class: fully-qualified class name for the type to be rendered
result: expression that produces output value. Source object is referenced as
Name of the file is a library name that is passed to '%use' command
Library properties can be used in any parts of library descriptor as
To register new library descriptor:
- For private usage - create it anywhere on your computer and reference it using file syntax.
- For sharing with community - commit it to libraries directory and create pull request.
If you are maintaining some library and want to update your library descriptor, create pull request with your update.
After your request is accepted, new version of your library will be available to all Kotlin Jupyter users
immediately on next kernel startup (no kernel update is needed) - but only if they use
If not, kernel update is needed.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size kotlin_jupyter_kernel-0.8.3.122-py3-none-any.whl (66.4 MB)||File type Wheel||Python version py3||Upload date||Hashes View|
Hashes for kotlin_jupyter_kernel-0.8.3.122-py3-none-any.whl