Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .zenodo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"title": "pyLocusZoom: Python library for multi-species GWAS visualization",
"description": "Publication-ready GWAS visualization in Python: regional association plots with LD coloring, gene tracks and recombination overlays, plus Manhattan, QQ, Miami, eQTL, fine-mapping, PheWAS, forest, LD heatmap and colocalization plots. Built-in canine and feline reference data, Ensembl gene annotation for any species, and matplotlib, plotly and bokeh backends.",
"upload_type": "software",
"license": "GPL-3.0-or-later",
"access_right": "open",
"creators": [
{
"name": "Denyer, Michael"
}
],
"keywords": [
"gwas",
"genetics",
"visualization",
"locuszoom",
"regional-plot",
"linkage-disequilibrium",
"canine",
"feline"
],
"related_identifiers": [
{
"identifier": "https://pypi.org/project/pylocuszoom/",
"relation": "isSupplementTo",
"resource_type": "software",
"scheme": "url"
}
]
}
23 changes: 23 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
cff-version: 1.2.0
message: "If you use pyLocusZoom in your research, please cite it using the metadata in this file."
type: software
title: "pyLocusZoom: Python library for multi-species GWAS visualization"
abstract: "Publication-ready GWAS visualization in Python: regional association plots with LD coloring, gene tracks and recombination overlays, plus Manhattan, QQ, Miami, eQTL, fine-mapping, PheWAS, forest, LD heatmap and colocalization plots. Built-in canine and feline reference data, Ensembl gene annotation for any species, and matplotlib, plotly and bokeh backends."
authors:
- family-names: Denyer
given-names: Michael
email: code.denyer@gmail.com
version: 3.1.0
date-released: 2026-09-08
license: GPL-3.0-or-later
repository-code: https://github.com/michael-denyer/pyLocusZoom
url: https://github.com/michael-denyer/pyLocusZoom
keywords:
- gwas
- genetics
- visualization
- locuszoom
- regional-plot
- linkage-disequilibrium
- canine
- feline
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,19 @@ Optional:
- [Example Notebook](examples/getting_started.ipynb) - Interactive tutorial
- [CHANGELOG](CHANGELOG.md) - Version history

## Citation

If you use pyLocusZoom in your research, please cite it. GitHub's "Cite this repository" button reads [CITATION.cff](CITATION.cff), and each GitHub release is archived on Zenodo with its own DOI.

```bibtex
@software{denyer_pylocuszoom,
author = {Denyer, Michael},
title = {pyLocusZoom: Python library for multi-species GWAS visualization},
url = {https://github.com/michael-denyer/pyLocusZoom},
license = {GPL-3.0-or-later}
}
```

## License

GPL-3.0-or-later
8 changes: 5 additions & 3 deletions docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,13 @@ For a concrete example, see `prepare_manhattan_frames` in
description covering *what* changed and *why*, and reference any related GitHub
issues. Do not include AI-assistant attribution in commit messages or PR bodies.
9. Releases are cut from `main` by bumping `version` in `pyproject.toml`, running `uv lock`,
changing the `## [Unreleased]` CHANGELOG heading to `## [X.Y.Z] - YYYY-MM-DD`, committing
`pyproject.toml`, `uv.lock`, and `CHANGELOG.md` together, and creating a GitHub release
changing the `## [Unreleased]` CHANGELOG heading to `## [X.Y.Z] - YYYY-MM-DD`, setting
`version` and `date-released` in `CITATION.cff` to match, committing
`pyproject.toml`, `uv.lock`, `CHANGELOG.md`, and `CITATION.cff` together, and creating a GitHub release
with tag `vX.Y.Z`. `.github/workflows/publish.yml` then publishes to PyPI via Trusted
Publishing. BiocondaBot opens a follow-up PR against bioconda-recipes automatically once
the PyPI release is detected.
the PyPI release is detected. Zenodo archives the release and mints a version DOI from
`.zenodo.json`; the concept DOI in the README badge covers every version.

Two things that catch people out:
- `uv.lock` does not regenerate itself on a version bump. Skipping `uv lock` leaves a
Expand Down
Loading