npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

escher

v1.8.2

Published

Escher: A Web Application for Building, Sharing, and Embedding Data-Rich Visualizations of Metabolic Pathways

Readme

PyPi NPM Gitter.im Documentation Status MIT

Escher

Escher is a web-based tool to build, view, share, and embed metabolic maps. The easiest way to use Escher is to browse or build maps on the Escher website.

Visit the documentation to get started with Escher and explore the API.

Check out the developer docs, the Gitter chat room, and the Development Roadmap for information on Escher development. Feel free to submit bugs and feature requests as Issues, or, better yet, Pull Requests.

Follow @zakandrewking for Escher updates.

You can help support Escher by citing our publication when you use Escher or EscherConverter:

Zachary A. King, Andreas Dräger, Ali Ebrahim, Nikolaus Sonnenschein, Nathan E. Lewis, and Bernhard O. Palsson (2015) Escher: A web application for building, sharing, and embedding data-rich visualizations of biological pathways, PLOS Computational Biology 11(8): e1004321. doi:10.1371/journal.pcbi.1004321

Escher was developed at SBRG. Funding was provided by The National Science Foundation Graduate Research Fellowship under Grant no. DGE-1144086, The European Commission as part of a Marie Curie International Outgoing Fellowship within the EU 7th Framework Program for Research and Technological Development (EU project AMBiCon, 332020), and The Novo Nordisk Foundation through The Center for Biosustainability at the Technical University of Denmark (NNF10CC1016517)

Installing the Python package

pip install escher

Escher uses anywidget to render maps in notebooks, so no separate Jupyter extensions are required. The widget works in JupyterLab 4, Jupyter Notebook 7, VS Code, Cursor, Google Colab, and Marimo.

Basic usage

import escher

# Display a map in a notebook
builder = escher.Builder(map_name='e_coli_core.Core metabolism')
builder

# Overlay reaction flux data
builder.reaction_data = {'PFK': 1.5, 'PYK': 0.8}

# React to map clicks in Python
import ipywidgets as widgets

out = widgets.Output()
display(out)

def on_reaction_click(change):
    with out:
        print(change['new']['bigg_id'])

builder.observe(
    on_reaction_click,
    names='selected_reaction_event',
)

To overlay flux from a COBRApy model:

import cobra
import escher

model = cobra.io.load_model('textbook')
solution = model.optimize()

builder = escher.Builder(
    map_name='e_coli_core.Core metabolism',
    model=model,
    reaction_data=solution.fluxes.to_dict(),
)
builder

The COBRA model is synced into the widget so build mode can add reactions directly from it. FBA itself runs in Python.

Map names must match the names in the Escher map index. To inspect available maps:

escher.list_available_maps()

Building and testing Escher

The build toolchain uses Vite for the JavaScript bundles, Vitest for JS tests, and uv for the Python package.

Requirements

  • Node.js 18+
  • Yarn (classic / v1) — yarn.lock is checked in
  • Python 3.8+
  • uv
  • Pandoc for building the docs notebooks

JavaScript

yarn install          # install dependencies
yarn build            # produce dist/escher.js, dist/escher.min.js,
                      # dist/escher-widget.js, and dist/escher.css
yarn test             # run JS tests
yarn copy             # copy build artifacts to py/escher/static/

For live development:

yarn watch            # rebuild on source changes
yarn start            # start the Vite dev server

Python

The JavaScript build artifacts must be present in py/escher/static/ before installing the Python package from source. After running yarn build && yarn copy:

cd py
uv sync --extra dev   # install package and dev dependencies
uv run pytest         # run Python tests

Jupyter

For notebook use, run Jupyter from the Python package directory so uv uses the Escher project environment:

cd py
uv run --with jupyter jupyter lab

For local development, first rebuild and copy the JavaScript assets into the Python package, then run Jupyter with the local package installed in editable mode:

yarn build && yarn copy
cd py
uv run --with-editable . --with jupyter jupyter lab

That Jupyter session imports Escher from the local py/escher/ source tree, so Python changes are picked up from the checkout. When changing JavaScript or CSS, rerun yarn build && yarn copy before restarting or refreshing the notebook widget.

Full clean build from a fresh checkout

yarn install && yarn build && yarn copy
cd py && uv sync --extra dev && uv run pytest

Docs

The docs are built with Sphinx and nbsphinx. The Python docs dependencies are declared in py/pyproject.toml under the docs extra, and docs/build_docs will run Sphinx through uv when uv is available.

Pandoc must also be installed separately because nbsphinx uses it to convert notebooks. On macOS:

brew install pandoc
cd docs
./build_docs          # installs/uses py[docs] through uv, then builds HTML
cd _build/html
python3 -m http.server