Like venv, but for JupyterLab + Docker

JovyKit

Disposable JupyterLab environments that feel like Python virtualenvs. Each project gets readable Compose files, persistent notebooks, and Python-tagged images with Docker under the hood.

pip install jovykit uv tool install jovykit
$ pip install jovykit && jovy init && jovy up -d && jovy open
Requires Docker Engine + Compose. Linux: jovy install-docker --dry-run. macOS/Windows: install Docker Desktop, then run jovy doctor.
JovyKit demo: install, init, start, and open JupyterLab
01

Tiny first run

Install, initialize, start, open. Add Python versions, packages, ports, and GPUs only when the project needs them.

02

No hidden config

Edit compose.yaml, Dockerfile, or requirements.txt directly. VS Code can reopen the generated .devcontainer/devcontainer.json.

03

Persistent notebooks

work/ and .jupyter/ survive rebuilds and container removal. Everything else can stay disposable.

Why it exists

Environment setup should feel disposable.

Conda environments drift. Docker Compose is repetitive. Jupyter setup takes boilerplate. GPU configuration is fragile. Reproducing environments across machines is painful.

JovyKit keeps Dockerized Jupyter environments lightweight and readable: persistent notebooks, disposable containers, explicit GPU support, and plain files you can edit without learning another config format.

Workflow

From empty folder to working notebook.

pip pip install jovykit
uv uv tool install jovykit
Init jovy init
VS Code .devcontainer/devcontainer.json
Run jovy up -d
Open jovy open
GPU jovy init --gpu all --python 3.13
Image levels

Start small. Scale the stack when the work asks.

minimal

JupyterLab, add-ons, Nitro CLI, uv, and the runtime needed to start fast.

base

Everyday data science, statistics, and classical ML without extra apt tools.

extended

Lighter advanced stats, model inspection, APIs, visualization, spreadsheets, web scraping, and database clients.

full

The huge batteries-included stack for ML, AI, cloud, distributed, apps, graph, geospatial, and research tooling.

jovy config
services:
  jovy:
    build:
      args:
        JOVY_BASE_IMAGE: ghcr.io/mihneateodorstoica/jovykit:base-python-3.12
    ports:
      - 127.0.0.1:8888:8888
Transparent by design

No JovyKit config file.

Compose output stays available when you need it. Edit compose.yaml, Dockerfile, or requirements.txt directly, and use jovy compose ... whenever you want the raw Docker Compose escape hatch.