Skip to main content

A JupyterLab extension

Project description

jupyterlab-env-sync

Build PyPI Binder

A JupyterLab 4.x extension that provides a shared service for propagating environment variables to running kernels (Python, R, Julia) and terminals.

Other extensions consume jupyterlab-env-sync via the IEnvSync token to set, reset, and query environment variables without dealing with kernel injection or terminal lifecycle directly.

Features

  • Kernel propagation — injects env var changes into all running Python, R, and Julia kernels
  • Terminal restart — restarts open terminals so they inherit updated variables, with a toast notification
  • Startup hooks — new kernels and terminals automatically pick up overrides via IPython/R/Julia startup scripts
  • Multi-extension support — multiple consumer extensions can set variables independently; ownership is tracked per key
  • Spawner-aware reset — resetting a variable restores the original spawner value (or deletes it if none existed)

Requirements

  • JupyterLab >= 4.0.0
  • Python >= 3.8

Installation

pip install jupyterlab-env-sync

API

Consumer extensions depend on the IEnvSync token:

import { IEnvSync } from 'jupyterlab-env-sync';

const plugin: JupyterFrontEndPlugin<void> = {
  id: 'my-extension:plugin',
  autoStart: true,
  requires: [IEnvSync],
  activate: async (app: JupyterFrontEnd, envSync: IEnvSync) => {
    await envSync.setVar(
      'my-extension',
      'DATABASE_URL',
      'postgres://localhost/mydb'
    );
  }
};

Methods

Method Signature Description
setVar (extId, key, value) → Promise<void> Set a variable. Propagates to all kernels and restarts terminals.
resetVar (extId, key, force?) → Promise<void> Reset to spawner value. Only the owner can reset unless force=true.
getAll () → Promise<Record<string, IEnvEntry>> All overrides with metadata (value, spawner_value, set_by, set_at).
getByExtension (extId) → Promise<Record<string, string>> Variables owned by a specific extension (key-value pairs).
resetAllByExtension (extId) → Promise<void> Reset all variables owned by an extension.

Consumer package.json

{
  "dependencies": {
    "jupyterlab-env-sync": "^1.0.0"
  },
  "jupyterlab": {
    "sharedPackages": {
      "jupyterlab-env-sync": { "bundled": false, "singleton": true }
    }
  }
}

bundled: false and singleton: true are required so all extensions share the same IEnvSync token instance.

Development

Development Installation

# Clone the repository
git clone https://github.com/aristide/jupyterlab-env-sync.git
cd jupyterlab-env-sync

# Set up a virtual environment
virtualenv .venv
source .venv/bin/activate

# Install in development mode
pip install -e ".[test]"

# Link the extension with JupyterLab
jupyter labextension develop . --overwrite

# Enable the server extension
jupyter server extension enable jupyterlab-env-sync

# Build the TypeScript source
jlpm build

Running Tests

# Python tests (env store + REST handlers)
pytest jupyterlab-env-sync/tests/ -v

# TypeScript tests (kernel injection snippets)
jlpm test

# UI tests (requires Playwright)
cd ui-tests && jlpm install && npx playwright test

Development Uninstallation

jupyter server extension disable jupyterlab-env-sync
pip uninstall jupyterlab-env-sync

License

BSD-3-Clause

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jupyterlab_env_sync-1.0.0.tar.gz (846.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jupyterlab_env_sync-1.0.0-py3-none-any.whl (38.3 kB view details)

Uploaded Python 3

File details

Details for the file jupyterlab_env_sync-1.0.0.tar.gz.

File metadata

  • Download URL: jupyterlab_env_sync-1.0.0.tar.gz
  • Upload date:
  • Size: 846.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jupyterlab_env_sync-1.0.0.tar.gz
Algorithm Hash digest
SHA256 018fe3065b30ed0c6b5481b373eb91d499b041844df06cb53689647750474089
MD5 b2ed1d89bdcdd9aeace5906e4f728bb8
BLAKE2b-256 389fe581bae102bcae269fdb5c4bf8ff10d2b14b30d3369884537f06480efaca

See more details on using hashes here.

File details

Details for the file jupyterlab_env_sync-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for jupyterlab_env_sync-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1ccd46d661e1e51f0b7b623bf28612782ae3f15f3d43573f6045bcf18c76a001
MD5 565a64cfd70b0c030ca656cd227cc6cf
BLAKE2b-256 b7534cd7f42a10b68df77d0aed70c4203871eb919d7c3c81d516670966a5a674

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page