LabHub

Blog

Notebook Environments in 2026 — Jupyter / Marimo / Quarto / Observable Framework / Deepnote / Hex / Positron Deep Dive

한국어English日本語

Prologue — The word "notebook" points to too many things

In 2026, when a data analyst, an ML engineer, a student, and a researcher all say "notebook", they actually mean four different tools.

These four categories sometimes share the ".ipynb" extension, but they solve different problems. And as of 2026, none of them has absorbed the others — competition has only intensified within each category.

This article maps that territory. The consolidation in the Jupyter camp, Marimo's challenge, the publishing pipeline Quarto built, Observable Framework's static-site bet, and the two SaaS axes (Deepnote / Hex). Finally, how Kakao, Toss, Mercari and ZOZO actually use them.


1. The 2026 Notebook Map — Four Categories

CategoryRepresentative toolsFile formatCore valueWeakness
ClassicJupyter Lab 5, Notebook 7, VSCode.ipynb (JSON)Standard, ecosystem, kernel varietyHidden state, hard to diff
ReactiveMarimo, Observable Framework, Pluto.jl.py / .md / .jlReproducibility, automatic dependency trackingLearning curve, smaller ecosystem
PublishingQuarto, R Markdown, Curvenote.qmd / .Rmd / .mystOne source for PDF/HTML/paperWeak interactivity, slow builds
SaaSDeepnote, HexCloud-onlyCollaboration, scheduling, permissionsLock-in, price, no offline

Key insight: comparing one category against another using the single word "notebook" always produces wrong conclusions. Saying "Marimo is better than Jupyter" only makes sense in reactive-vs-classic terms; saying "Hex is better than Quarto" mixes categories entirely.

Another insight: language ecosystems decide half the choice. R users naturally flow into RStudio / Positron / Quarto. Julia users into Pluto.jl. JS/D3 users into Observable. Python lives in every category — which is why Python users have the most options and the most confusion.


2. Jupyter Lab 5 + Notebook 7 — The Standard Settles

When JupyterLab 5 shipped in 2024, the Lab 4-era legacy (the old extension system, jupyter-server conflicts) was finally cleaned up. As of 2026, Lab 5 reliably delivers:

Notebook 7 is "the Classic Notebook UI on top of Lab". The UI looks like old-school Jupyter, but the backend is the same jupyter-server as Lab. It survives because the education market still finds the Lab UI overwhelming.

The lingering problem — Hidden state

Jupyter's structural weakness is cell execution order. You've seen this:

# Cell 1
x = 10

# Cell 2
y = x * 2

# Cell 3
x = 100  # added later

Run cells 1, 2, 3 in order and y is 20. Save the notebook, reopen, run cell 3, then 2, then 1, and y is 200. Same notebook, different result. That is hidden state.

Worse, deleting cell 3 leaves x = 100 in kernel memory. You don't know the truth until you click "Restart kernel and run all". Once a data analysis report falls into this trap, the result is "analysis that doesn't reproduce".

The problem has been documented since 2018, and many solutions appeared (papermill, nbdev, jupytext). In 2024, Marimo answered it head-on: "Then let's rewrite the runtime to be reactive."


3. Marimo (Launched June 2024) — Reactive + .py File Format

Marimo was built by Akshay Agrawal and Myles Scolnick. Public release in June 2024, seed round closed the same year. Two core ideas:

  1. Reactive execution graph — variable dependencies between cells are tracked; change one cell and every downstream cell re-runs automatically. Like a spreadsheet.
  2. .py file format — the notebook is plain Python, not JSON. Git diffs are clean, and the file is importable from any IDE.
# my_notebook.py — Marimo notebook
import marimo

__generated_with = "0.10.0"
app = marimo.App()


@app.cell
def __():
    import pandas as pd
    return pd,


@app.cell
def __(pd):
    df = pd.read_csv("data.csv")
    return df,


@app.cell
def __(df):
    df.describe()
    return

The whole notebook is one .py file. Because cell inputs are explicit function arguments, the dependency graph can be tracked statically.

Hidden state disappears

Extras

Limits

Marimo's position in 2026: it has not replaced Jupyter, but it has become a frequent default for new ML/data projects — especially in research labs and MLOps teams that care about reproducibility.


4. Quarto (Posit) — Unified R / Python / Julia Publishing

Quarto is the next-generation publishing system Posit (the new name for RStudio Inc., since 2022) introduced. It started as a successor to R Markdown, but by 2026 it can mix R, Python, Julia and Observable JS in one document.

.qmd — the source of everything

---
title: "Monthly Sales Analysis"
format:
  html:
    toc: true
  pdf:
    pdf-engine: xelatex
  docx: default
---

## Load data

```{python}
import pandas as pd
df = pd.read_csv("sales.csv")
df.head()
```

## Visualize

```{r}
library(ggplot2)
ggplot(df, aes(month, revenue)) + geom_line()
```

Mix Python and R cells in the same .qmd, then quarto render to HTML / PDF / Word / EPUB. Academic papers (quarto-academic), books (Quarto Book), websites (Quarto Website) all build from the same tool.

A layer on top of Pandoc + Jupyter

Internally, Quarto runs cells via Jupyter kernels, serializes the result to Pandoc Markdown, and lets Pandoc emit the final format. Quarto is not a new notebook runtime — it's a publishing orchestrator.

Where it sits in 2026

Limits


5. Observable Framework — Mike Bostock's Static-Site Generator

In 2024, Mike Bostock (D3.js author, Observable founder) released Observable Framework, built around the idea "notebook equals static-site generator". It is a separate open-source project from the existing Observable Cloud (the hosted notebooks on observablehq.com).

Core idea — data loaders

---
title: Sales dashboard
---

```js
const sales = FileAttachment("data/sales.parquet").parquet();
```

# Monthly revenue

```js
Plot.plot({
  marks: [
    Plot.line(sales, {x: "month", y: "revenue"})
  ]
})
```

A sibling file data/sales.parquet.py runs at build time to produce the data.

Who is it for

Limits

As of 2026, Observable Framework is becoming the new standard when visualization is the main deliverable. People don't use it for everyday analysis.


6. Deepnote — Collaborative Cloud Notebooks

Deepnote is a Czech-American SaaS founded in 2019. OpenAI participated in a follow-on Series B in 2024-2025. Its core value is collaboration.

Features

Who uses it

Limits


7. Hex — Data Scientist SaaS

Hex (San Francisco, founded 2019) is Deepnote's direct competitor. Snowflake reportedly took a stake in 2024. The positioning rhymes, but the emphasis differs.

DimensionDeepnoteHex
Core userData scientists + analystsData scientists + BI
CollaborationStrongStrong
SQL · Python integrationGoodExcellent — SQL results auto-flow into Python df
Magic AIYes (basic)Excellent (Hex Magic)
App modeNotebook to appNotebook to app (apps are first-class)
PriceMediumHigh
Korea / Japan presenceMediumLow

Hex's differentiators

Limits


8. Curvenote / Polars Notebook / Pluto.jl — Notables in the Long Tail

Curvenote

Notebook plus collaboration tool specialized for scientific publishing. Built on MyST Markdown (a scientific extension of Markdown) with first-class support for citations, equations and figure labels. Workflow targets PDF submission to arXiv or a journal.

Polars Notebook

A new notebook project announced by the Polars (fast DataFrame library) team in 2025. The Rust backend handles in-memory DataFrame operations quickly, and SQL, Python and Polars expressions mix smoothly in one notebook. Still in beta.

Pluto.jl

The reactive notebook of the Julia ecosystem. It has implemented Marimo's philosophy (cell dependency graph, .jl file format) in the Julia world since 2019 — Pluto.jl is Marimo's senior. For Julia users, it is essentially the default.

Jupytext

Two-way conversion between Jupyter .ipynb and .py / .md / .Rmd. The answer for teams that want to keep Jupyter but enjoy clean git diffs. It was the most common solution before Marimo arrived, and is still widely used.


9. VSCode Notebooks + Positron (Posit, May 2024) — IDE Notebooks

VSCode Notebooks

VSCode has had first-class .ipynb support since 2020, and by 2026 it is essentially feature-equivalent to JupyterLab. The Python extension + Jupyter extension combo handles cell execution, debugging, variable inspector and plot viewer. AI assistant integration (Copilot, Cursor, Cline) is the most natural here — that is the dominant reason people pick VSCode for notebook work.

Positron — RStudio's successor

Posit unveiled Positron in May 2024 as the next-generation IDE. Where RStudio was R-centric, Positron treats R and Python as equal. Built on a fork of Code OSS (the open-source base of VSCode).

Highlights:

Where users land

UserRecommendation
R users (stats, epidemiology, finance)Positron — RStudio flow preserved
Python with AI integration as priorityVSCode (+ Cursor / Cline)
Python with RTC collaboration as priorityJupyterLab 5 (RTC)
R + Python every dayPositron

10. The "Hidden State" Problem and the Reactive Answer

Hidden state is the notebook's deepest trap. To restate:

What the problem actually is

  1. Cells can run in arbitrary order.
  2. Kernel memory outlives the code — variables persist after their defining cells are deleted.
  3. When the same variable is redefined across multiple cells, the code alone can't tell you which definition is active.

Put together, you arrive at a state where you cannot confidently answer "if I rerun this notebook from scratch, do I get the same result?"

Solution 1 — Discipline (Jupyter camp)

Solution 2 — Reactive runtime (Marimo / Observable / Pluto.jl)

Solution 3 — Separate the persistent artifact (Quarto / Papermill)

The 2026 consensus: reactive for research and analysis, Quarto for publishing, Jupyter for learning and experiments. One tool does not do all three.


11. R Markdown to Quarto Migration

When Posit shipped Quarto in 2022, R Markdown moved into maintenance-only mode — new features land in Quarto. By 2026, R users have nearly completed the migration.

Migration map

R MarkdownQuarto equivalent
.Rmd.qmd
YAML output: html_documentformat: html
knitr::opts_chunk$set()execute: options
bookdownQuarto Book
blogdownQuarto Website
pkgdownquartodoc (Python) — for package sites you may still pair with a separate tool
flexdashboardquarto-dashboard (2024)

Conversion tools

Why migrate


12. Korea and Japan — Real-World Patterns

Kakao — data notebook environment

Kakao's data org runs JupyterHub on internal Kubernetes. Per-user containers, automated GPU request/release, S3-compatible object storage integration. In 2024-2025 they integrated jupyter-ai to enable cell-level LLM calls; since 2026 some teams have piloted Marimo.

Notable detail: the internal data workflow system (Airflow + DataHub) is separate from the notebooks, so any notebook analysis must be ported to an Airflow DAG to be promoted to production. This is a common Korean enterprise pattern.

Toss — analytics environment

At Toss, data analysts work primarily in SQL; notebooks come in only when going deeper (cohort, anomaly, ML experiments). JupyterHub plus an in-house BI tool (Querypie family) is the standard stack. Job postings in 2025 hinted at a Hex pilot — Magic SQL and collaboration features are attractive to a SQL-first analyst.

Mercari — data team

The Tokyo headquarters data team has long used GCP — BigQuery plus Vertex AI Workbench (GCP's hosted JupyterLab). Since 2024 some teams have adopted Deepnote where collaboration and scheduled notebooks are needed, especially in BI. Quarto has been adopted as an internal research-report standard, per a published engineering blog.

ZOZO — data and MLOps

ZOZO Research (ZOZO's R&D org) runs ML experiments on JupyterLab plus Kubeflow Notebooks on internal GPU clusters. Conference-publication results are organized through Quarto — one pipeline all the way to PDF submission. Some recommendation-system papers published in 2026 came with the original notebooks open-sourced.

Shared APAC patterns


13. Who Should Pick What

By situation:

Students / coursework

Personal data analysis

ML research

Team collaboration

Data journalism / interactive visualization

Publishing / papers / books

R users

Julia users

"If I have to pick exactly one"


14. References

Jupyter

Marimo

Quarto / Posit / Positron

Observable

Deepnote / Hex

Other

Comparisons / commentary

Korea / Japan case studies (blogs / talks)

Comments

No comments yet.

Sign in to leave a comment