Skip to content

Add pyXenium to the scverse ecosystem#364

Open
hutaobo wants to merge 2 commits into
scverse:mainfrom
hutaobo:codex/pyxenium-ecosystem
Open

Add pyXenium to the scverse ecosystem#364
hutaobo wants to merge 2 commits into
scverse:mainfrom
hutaobo:codex/pyxenium-ecosystem

Conversation

@hutaobo

@hutaobo hutaobo commented May 8, 2026

Copy link
Copy Markdown

Summary

This PR proposes adding pyXenium to the scverse ecosystem packages list.

Proposed metadata file:

  • packages/pyXenium/meta.yaml

Checklist for adding packages

Mandatory

Name of the tool: pyXenium

Short description:

pyXenium is a Python toolkit for 10x Genomics Xenium data that combines Xenium I/O, multimodal RNA+protein analysis, contour-aware spatial profiling, topology workflows, GMI inference, mechanostress analysis, and optional external workflow bridges.

How does the package use scverse data structures (please describe in a few sentences):

pyXenium uses anndata.AnnData as its canonical analysis object for downstream RNA+protein and spatial workflows. Core loaders can return AnnData directly, and the package's multimodal, contour, pathway, benchmarking, and mechanostress modules operate on AnnData inputs or on XeniumSlide, a slide-level container whose main table is an AnnData. The project also keeps an optional interoperability bridge to SpatialData via XeniumSlide.to_spatialdata(), but does not require spatialdata as a core runtime dependency.

  • The code is publicly available under an OSI-approved license
  • The package provides versioned releases
  • The package can be installed from a standard registry (e.g. PyPI, conda-forge, bioconda)
  • Automated tests cover essential functions of the package and a reasonable range of inputs and conditions
  • Continuous integration (CI) automatically executes these tests on each push or pull request
  • The package provides API documentation via a website or README
  • The package uses scverse datastructures where appropriate (i.e. AnnData, MuData or SpatialData and their modality-specific extensions)
  • I am an author or maintainer of the tool and agree on listing the package on the scverse website

Recommended

  • Please announce this package on scverse communication channels (zulip, discourse, twitter)

  • Please tag the author(s) these announcements. Handles (e.g. @scverse_team) to include are:

    • Zulip:
    • Discourse:
    • Mastodon:
    • Bluesky:
    • Twitter:
  • The package provides tutorials (or "vignettes") that help getting users started quickly

  • The package uses the scverse cookiecutter template.

Additional notes

Copilot AI review requested due to automatic review settings May 8, 2026 12:01

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds pyXenium to the scverse ecosystem registry by introducing a new package metadata entry under packages/.

Changes:

  • Added packages/pyXenium/meta.yaml with package description, links, tags, license, version, and test command.
  • Registered PyPI installation identifier and maintainer contact.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/pyXenium/meta.yaml Outdated
Comment on lines +7 to +8
documentation_home: https://pyxenium.readthedocs.io/en/latest/
tutorials_home: https://pyxenium.readthedocs.io/en/latest/tutorials/index.html
@grst

grst commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Hi, sorry for the delay in reviewing. I just had a first look and have a couple of questions/comments:

In the IO tutorial you write:

XeniumSlide is inspired by the data-container ideas documented by SpatialData, but pyXenium rewrites the container and on-disk slide store independently and does not require the spatialdata package for core slide I/O. The only bridge back to that ecosystem is the optional XeniumSlide.to_spatialdata() method for users who install spatialdata separately.

Can you elaborate on why you chose to roll your own container and file format? In principle, we require that an ecosystem package uses our official data structures, but I can see that you at least offer conversion functions. If there's any limitations you face with SpatialData, please let us know and I'll bring it up with the SpatialData developers.

The package provides tutorials (or "vignettes") that help getting users started quickly

It's great that you provide so many tutorials, however at least for some of them, I struggle to understand what the respective functions actually produce. By that I mean that you only show how a certain function is called, but don't show any actual outputs.

E.g. in https://pyxenium.readthedocs.io/en/latest/guides/protein-gene-correlation.html I would love to see an example figure and the summary table, or in https://pyxenium.readthedocs.io/en/latest/guides/contour-density.html it would be great to have a visual representation of what these functions actually do.

(just highlighting this, this is not a hard requirement for acceptance according to the checklist).

The package uses the scverse cookiecutter template.

I don't think this is the case as the structure differs quite a bit from what's generated by out template. This is also not a requirement for acceptance, but I'd appreciate if you stayed faithful when filling out the checklist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants