Self-hosted service
elyra-ai/elyra avatar
elyra-ai/elyra

Elyra: Pipeline Editing and Batch Execution Inside JupyterLab

Elyra extends JupyterLab with an AI centric approach.

1,995 stars370 forksPythonApache-2.0

At a glance

What is it?
Elyra is a set of JupyterLab extensions that adds a visual pipeline editor, batch job submission for notebooks and scripts, and runtime connectors for Apache Airflow and Kubeflow Pipelines. It is worth adopting only if your team already works in JupyterLab and needs to move notebooks off the interactive kernel without leaving the browser.
Who is it for?
Adopt Elyra if your notebooks already live in JupyterLab and you need to promote them to scheduled or batch execution on Airflow or Kubeflow Pipelines without rewriting them as DAG files by hand. Do not adopt it if your orchestration is Dagster, Prefect, or plain cron, or if you cannot pin a JupyterLab version, since the README states that installation instructions and JupyterLab support vary by release and that a JupyterLab build is required.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap Elyra fills between a notebook and a scheduler

A notebook that works interactively is not a pipeline. Getting one onto Airflow or Kubeflow Pipelines normally means exporting code, writing a DAG or a pipeline spec by hand, wiring container images, and then keeping the two in sync every time a cell changes. Elyra's stated purpose is to remove that translation step. The README describes it as a set of AI-centric extensions to JupyterLab Notebooks, and the first two features listed are a Visual Pipeline Editor and the ability to run a notebook, Python or R script as a batch job. The audience is data scientists and ML engineers who already work in JupyterLab and want the orchestration layer to be a consequence of their notebook, not a separate codebase maintained by someone else. If your team writes DAGs in a repository and treats notebooks as disposable exploration, Elyra is solving a problem you have already solved differently.

What the visual pipeline editor actually produces

The pipeline editor is a JupyterLab canvas where nodes are notebooks, Python scripts, or R scripts, and edges express execution order. The README links to the overview documentation for the editor rather than describing the file format in the repository root, so the exact serialization is something to confirm in the version-specific docs before you commit to it. What is visible in the material is the set of node types and the runtime targets. The topics list names both airflow and kubeflow, and the feature list names hybrid runtime support based on Jupyter Enterprise Gateway. That combination matters: the same pipeline is intended to be exportable to more than one runtime, which is the main reason to use a canvas instead of writing a DAG directly. The trade-off is that the canvas can only express what the connectors support. If you need dynamic task generation, conditional branches that depend on runtime values, or custom operators, a hand-written DAG gives you the full API of the scheduler and Elyra does not.

Batch execution and the runtime connector layer

The second core feature is running a notebook, Python script, or R script as a batch job. In practice this means selecting a runtime configuration in the JupyterLab UI, submitting, and having the job execute on the remote cluster rather than in the kernel attached to your browser session. The README points to the installation documentation for connector setup and does not enumerate the configuration keys in the repository root, so treat the connector schema as documentation-defined rather than something you can infer from the README. Hybrid runtime support through Jupyter Enterprise Gateway is the mechanism for the interactive case: kernels can run remotely while the notebook interface stays local. That is a different feature from pipeline submission, and conflating the two is a common source of confusion. One governs where your interactive kernel lives. The other governs where a submitted batch job runs. They are configured separately.

Installing Elyra and the version constraints that come with it

The README gives two installation paths for the current release, which targets JupyterLab 4.x. From PyPI: pip3 install --upgrade "elyra[all]". From conda-forge: conda install -c conda-forge "elyra[all]". The prerequisites listed are Node.js 22, Python 3.10+, and optionally Miniconda or Micromamba. For older releases the README is explicit that installation instructions and JupyterLab support vary by release and that a JupyterLab build is required. Elyra 4.x is documented against JupyterLab 4.2.5+, and the 3.7 to 4.0 line targets JupyterLab 3.x, installed with pip3 install --upgrade "elyra[all]<4.0.0". That version pin is not incidental. The [all] extra pulls the full set of dependencies, and the JupyterLab build step means installation is not a pure pip operation in every deployment. If you run a managed JupyterHub where users cannot trigger a rebuild, that constraint will shape how you package Elyra, likely as a prebuilt image rather than an on-demand install. The README also documents container images on Docker Hub and quay.io, with elyra/elyra:latest for the latest release and elyra/elyra:x.y.z for a pinned version, run for example as docker run -it -p 8888:8888 elyra/elyra:dev jupyter lab --debug. A mount example is given for exposing a local notebook directory to /home/jovyan/work.

The extension surface beyond pipelines

Elyra ships more than the pipeline editor, and the extras are the reason some teams install it. The README lists reusable code snippets, a Python and R script editor with local and remote execution, an auto-generated table of contents for both Python scripts and notebooks, an experimental Python debugger, Language Server Protocol integration, and Git version control integration. It also lists AI Assistant integration for code assistance in notebook cells, pointing at a setup guide in docs/source/user_guide/ai-assistant-setup.md. That last item is a dependency on jupyter-ai rather than something Elyra implements itself, so enabling it means taking on a second extension and its own configuration. The debugger is marked experimental in the README, which is the project's own signal that it should not be load-bearing in a production workflow. If you only want the table of contents or the Git panel, installing the full [all] extra brings the pipeline machinery and its runtime dependencies along with it.

Where Elyra is the wrong tool

The clearest failure mode is version drift. The README states plainly that installation instructions and JupyterLab support vary by release, and the release history shows why: v4.0.0 landed in August 2025, while the previous line, v3.15.0, dates to March 2023. That is a long gap between major lines, and it means the upgrade path from Elyra 3.x to 4.x crosses both a JupyterLab major version and a two-year jump in the extension itself. Teams that pinned Elyra 3.x on JupyterLab 3.x will not get to 4.x by changing a version number alone. The second limitation is scope. Elyra's runtime connectors are aimed at Airflow and Kubeflow Pipelines. If your organization standardized on a different orchestrator, the visual editor produces artifacts your scheduler cannot consume, and you are left with the notebook extensions and none of the pipeline value. The third is expressiveness: a canvas that maps nodes to tasks is a poor fit for pipelines whose structure is computed at runtime, and no amount of UI will change that.

How Elyra differs from Papermill plus a hand-written DAG

The most direct alternative is parameterizing notebooks with Papermill and invoking them from a DAG you maintain yourself. The difference is where the pipeline definition lives. With Papermill, the notebook is a task body and the DAG file is the source of truth; you get the full scheduler API, arbitrary Python for control flow, and a definition that diffs cleanly in code review. With Elyra, the pipeline is a document edited in JupyterLab, and the scheduler artifact is generated from it. That inverts the review workflow: changes to pipeline structure happen in a GUI and land as a file whose readability depends on the format, not on a diff of Python. It also means the pipeline is only as portable as Elyra's connectors. The counterargument is real, though. Papermill requires every author to understand the DAG framework, and in teams where the notebook authors are not the platform engineers, that requirement is where pipelines stall. Elyra moves the definition to the people writing the analysis. Which of those two costs is higher depends entirely on who on your team owns the pipeline.

Licence, maintenance, and what to check before upgrading

Elyra is Apache-2.0, and the README carries the standard Apache header plus an OpenSSF Best Practices badge. Apache-2.0 includes an explicit patent grant and permits commercial use and modification; it also requires that you retain the licence and notice files and state significant changes. That is a summary of the licence text, not legal advice, and if you redistribute Elyra inside a product you should read the full terms. On maintenance cost, the practical figure is the JupyterLab version you are pinned to, not the Elyra release cadence. Every JupyterLab major upgrade forces a matching Elyra line, and the README's warning that a JupyterLab build is required means that upgrade is not a no-op in containerized deployments. Before moving from Elyra 3.x to 4.x, check three things in the release-specific documentation: whether your runtime connector configuration survives the move, whether your existing pipeline files load in the editor, and whether your JupyterLab version is at or above 4.2.5. The README does not promise backward compatibility for pipeline files across the 3.x to 4.x boundary, and that is the item most likely to cost you a week.

Editorial conclusion

Adopt Elyra if your notebooks already live in JupyterLab and you need to promote them to scheduled or batch execution on Airflow or Kubeflow Pipelines without rewriting them as DAG files by hand. Do not adopt it if your orchestration is Dagster, Prefect, or plain cron, or if you cannot pin a JupyterLab version, since the README states that installation instructions and JupyterLab support vary by release and that a JupyterLab build is required. Before committing, verify three things in your own environment: that your JupyterLab version matches the 4.2.5+ requirement stated for Elyra 4.x, that the runtime connector you need is documented for your Elyra version, and that your pipeline nodes will be rebuilt after any upgrade, because the pipeline file format is versioned by the release that wrote it.

Official sources

  1. elyra-ai/elyra on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes