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
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ repos:
- repo: https://github.com/ericmjl/webp-pre-commit
rev: v0.0.12
hooks:
# Convert blog and learn images
# img/logo is excluded on purpose: the media kit advertises PNG downloads.
- id: convert-to-webp
files: ^static/img/(blog|learn)/.*\.(png|jpe?g|gif|bmp|tiff)$
files: ^static/img/(blog|learn|events)/.*\.(png|jpe?g|gif|bmp|tiff)$
- repo: https://github.com/oxipng/oxipng
rev: v10.2.0
hooks:
Expand Down
148 changes: 90 additions & 58 deletions assets/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,13 @@ $additionalInfoColor: #666666;
// Font stack: these two have well matching cap- and x-heights
@font-face {
font-family: "Inter";
src: url("fonts/Inter/Inter-VariableFont_slnt,wght.ttf");
src: url("fonts/Inter/Inter-VariableFont_slnt,wght.woff2") format("woff2");
font-display: swap;
}
@font-face {
font-family: "JetBrains Mono";
src: url("fonts/JetBrainsMono/JetBrainsMono[wght].ttf");
src: url("fonts/JetBrainsMono/JetBrainsMono[wght].woff2") format("woff2");
font-display: swap;
}

// Global
Expand Down Expand Up @@ -367,6 +369,7 @@ body {
#title {
#title-text {
#title-name {
margin: 0;
font-size: 6rem;
font-weight: 900;
letter-spacing: 0.2rem;
Expand Down Expand Up @@ -532,6 +535,9 @@ body {
display: flex;
min-width: 6rem;
max-width: 6rem;
// Matches the img height below, so that a package
// without an icon still lines up with the others.
min-height: 4rem;
@media (max-width: 50rem) {
display: none;
}
Expand Down Expand Up @@ -763,62 +769,6 @@ body {
// }
}
}
.page-item {
display: flex;
flex-direction: row;

@media (max-width: 50rem) {
flex-direction: column;
align-items: flex-start;
justify-content: center;
h2 {
margin: 0.5rem 0 !important;
}
margin: 0 -0.5rem;
padding: 0.5rem;
padding-bottom: 1.3rem;
}

margin: 0 -1rem;
padding: 1rem;

background-color: #ff000000;
transition: all 200ms ease-in-out;
border-radius: 0.5rem;

&:hover {
cursor: pointer;
background-color: $tilebg3;
}

@media (max-width: 50rem) {
background-color: $tilebg4;
}

h2 {
color: $tiletext;
margin: 0 0 0.5rem 0;
line-height: 1.5rem;
}
span {
font-size: 1rem;
color: $greydesc;
line-height: 1.3rem;
}
.page-item-date {
flex: 1;
line-height: 1.3rem;
}
.page-item-content {
flex: 2;
display: flex;
flex-direction: column;
font-size: 1rem;
h2 {
font-size: 1.4rem;
}
}
}
// TODO: Much of this does nothing AFAICT
.post {
.post-subtitle {
Expand Down Expand Up @@ -1175,6 +1125,9 @@ $eco-hues:
}

.eco-card {
// All 120 registry entries are in the DOM so the filter can work offline.
content-visibility: auto;
contain-intrinsic-size: auto 14rem;
position: relative;
display: flex;
flex-direction: column;
Expand Down Expand Up @@ -2749,3 +2702,82 @@ $eco-hues:
transition: width 1s ease-in-out;
pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

.command-icon:focus-visible {
outline: 3px solid #1a73e8;
outline-offset: 2px;
}

// Hoisted out of #page-content: the landing page shows one of these and uses #cover.

.page-item {
display: flex;
flex-direction: row;

@media (max-width: 50rem) {
flex-direction: column;
align-items: flex-start;
justify-content: center;
h2 {
margin: 0.5rem 0 !important;
}
margin: 0 -0.5rem;
padding: 0.5rem;
padding-bottom: 1.3rem;
}

margin: 0 -1rem;
padding: 1rem;

background-color: #ff000000;
transition: all 200ms ease-in-out;
border-radius: 0.5rem;

&:hover {
cursor: pointer;
background-color: $tilebg3;
}

@media (max-width: 50rem) {
background-color: $tilebg4;
}

h2 {
color: $tiletext;
margin: 0 0 0.5rem 0;
line-height: 1.5rem;
}
span {
font-size: 1rem;
color: $greydesc;
line-height: 1.3rem;
}
.page-item-date {
flex: 1;
line-height: 1.3rem;
}
.page-item-content {
flex: 2;
display: flex;
flex-direction: column;
font-size: 1rem;
h2 {
font-size: 1.4rem;
}
}
}

.page-item-author {
font-weight: 600;
}
9 changes: 6 additions & 3 deletions config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ languageCode = "en-us"
title = "scverse"
description = "Foundational tools for omics data in the life sciences"

# CI publishes with --buildFuture so that events dated in the future are listed.
# Setting it here too keeps `hugo server` in step with production.
buildFuture = true
enableRobotsTXT = true

[params]
images = ["img/scverse-social-card.png"]

[taxonomies]
series = 'series'
description = "Foundational tools for omics data in the life sciences"

[markup.goldmark.renderer]
unsafe= true
Expand Down
2 changes: 1 addition & 1 deletion content/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ description = "Foundational tools for single-cell omics data analysis"
[[packages]]
name = "mudata"
description = "Multimodal data format"
url = "https://mudata.readthedocs.io/en/latest/"
url = "https://mudata.readthedocs.io/stable/"

[[packages]]
name = "spatialdata"
Expand Down
1 change: 1 addition & 0 deletions content/about/_index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
+++
title = "About scverse"
description = "Scverse is a consortium of foundational tools for the analysis of omics data in the life sciences."
+++

Scverse® is a consortium of foundational tools for analysis of omics data in life sciences. It has been founded to ensure the long-term maintenance of these core tools.
Expand Down
10 changes: 5 additions & 5 deletions content/about/code_of_conduct/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
title = "Code of Conduct"
+++

# NUMFOCUS CODE OF CONDUCT
## NUMFOCUS CODE OF CONDUCT

You can find the whole document [here][NumFOCUS Code of Conduct].

## THE SHORT VERSION
### THE SHORT VERSION

NumFOCUS is dedicated to providing a harassment-free community for everyone, regardless of gender, sexual orientation, gender identity and expression, disability, physical appearance, body size, race, or religion.
We do not tolerate harassment of community members in any form.
Expand All @@ -20,15 +20,15 @@ Sexual language and imagery is not appropriate.

Thank you for helping make this a welcoming, friendly community for all.

## LONG VERSION
### LONG VERSION

You can find the long version of the Code of Conduct on the [NumFOCUS Code of Conduct][] page.

## HOW TO REPORT
### HOW TO REPORT

If you feel that the Code of Conduct has been violated, feel free to submit a report, by using the [NumFOCUS Code of Conduct Reporting Form](https://forms.monday.com/forms/f130e8cddb99568fa86cf077b8912a60?r=use1).

## WHO WILL RECEIVE YOUR REPORT
### WHO WILL RECEIVE YOUR REPORT

Your report will be received and handled by NumFOCUS Code of Conduct Working Group; trained, and experienced contributors with diverse backgrounds.
The group is making decisions independently from the project, PyData, NumFOCUS or any other organization.
Expand Down
1 change: 1 addition & 0 deletions content/about/mission/_index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
+++
title = "Mission statement"
description = "The goals, organization and vision of the scverse consortium."
+++


Expand Down
1 change: 1 addition & 0 deletions content/about/roles/_index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
+++
title = "Roles and Decisions"
description = "How scverse is governed: the roles within the project and the process by which decisions are made."
+++

## Roles and Responsibilities
Expand Down
2 changes: 1 addition & 1 deletion content/blog/2025-07-biomni.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ draft = false

Single-cell and spatial omics have unlocked unprecedented insights into cellular diversity, tissue architecture, and drug responses.
Despite the remarkable progress in computational tools, the diversity and complexity of analyses can still pose challenges.
While the scverse ecosystem provides powerful and interoperable tools such as [Scanpy](https://scanpy.scverse.org/), [scvi-tools](https://scvi-tools.org/), [Squidpy](https://squidpy.readthedocs.io/), [AnnData](https://anndata.scverse.org/), [MuData](https://mudata.readthedocs.io/en/latest/), and [SpatialData](https://spatialdata.scverse.org/en/latest/), researchers can sometimes face a steep learning curve, particularly when integrating multiple analytical steps or modalities.
While the scverse ecosystem provides powerful and interoperable tools such as [Scanpy](https://scanpy.scverse.org/), [scvi-tools](https://scvi-tools.org/), [Squidpy](https://squidpy.readthedocs.io/), [AnnData](https://anndata.scverse.org/), [MuData](https://mudata.readthedocs.io/stable/), and [SpatialData](https://spatialdata.scverse.org/en/latest/), researchers can sometimes face a steep learning curve, particularly when integrating multiple analytical steps or modalities.

Scverse is a community-driven, open-source initiative behind many of the most widely adopted Python tools in single-cell biology, known for promoting modular, interoperable, and scalable analysis across diverse modalities—from transcriptomics to spatial and immune profiling.

Expand Down
8 changes: 4 additions & 4 deletions content/blog/2025-11-biocontextai.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ author = "Malte Kuehl, Lukas Heumos"
draft = false
+++

# scverse × BioContextAI: Community Infrastructure for Agentic Analysis
## scverse × BioContextAI: Community Infrastructure for Agentic Analysis

We're excited to announce that we are partnering with [BioContextAI][biocontextai], a new open-source initiative for building agentic systems in biomedical research.
BioContextAI provides a community registry for Model Context Protocol (MCP) servers.
Expand All @@ -15,21 +15,21 @@ This project was recently published as a [Nature Biotechnology correspondence][N

<img src="/img/blog/biocontextai_overview.webp" style="max-width: 100%;" alt="BioContextAI overview" />

## What we're building
### What we're building

BioContextAI currently hosts over 40 community-built biomedical MCP servers with hundreds of tools, including the BioContextAI Knowledgebase MCP with access to resources like UniProt, Open Targets, and pathway databases.
There's a natural synergy here: while scverse packages handle computational analyses, these knowledge resources support the hypothesis generation and interpretation work that happens around those analyses.
By jointly building best practice scverse MCP servers, we hope to facilitate exploration of omics data and provide improved code generation for scverse ecosystem-enabled analyses, all while maintaining reproducibility and transparency.
This is early work and we are actively evaluating patterns for building MCP servers that integrate well with existing workflows and best practices.

## How to get involved
### How to get involved

Check out the Registry at [biocontext.ai][biocontextai] to explore community-built MCP servers.
If you're interested in building new servers, try the [cookiecutter template][biocontextai-cookiecutter] to get started.
Join the conversation on the [BioContextAI channel][biocontextai-zulip] within the scverse Zulip to connect with other developers and researchers working in this space.
We're excited to see what the community builds together.

## Learn more
### Learn more

Learn more about BioContextAI in the [Nature Biotechnology correspondence][Nature Biotechnology correspondence] and on the [BioContextAI website][biocontextai].

Expand Down
8 changes: 4 additions & 4 deletions content/blog/2025-anndata-012.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ author = "Ilan Gold"
draft = false
+++

# 0.12 released
## 0.12 released

We're happy to announce that `anndata` 0.12 is out now!
Check out [the changelog](https://anndata.scverse.org/page/release-notes/index.html#v0-12-0) for a full list of changes.
Here, we want to give our users a bit of a deep dive into the new functionality.
We have lots of great features, like zarr v3 support (package and format), full lazy loading, and new API customisability! Let’s dive in!

## Zarr v3
### Zarr v3

[Zarr v3 as a file format](https://zarr-specs.readthedocs.io/en/latest/v3/core/index.html) provides improved cloud support, support for sharding to reduce the number of files created in a zarr store, and improved support for extensibility.
Check out the following graphic from the zarr docs:
Expand All @@ -36,7 +36,7 @@ And of course, all of this new functionality has not broken our backwards compat
Anndata 0.12 is still fully zarr v2 compatible, both with the package and the file format.
Upgrade fearlessly!

## Fully lazy file access
### Fully lazy file access

Moving on, we have also replaced `anndata.experimental.read_elem_as_dask` with [`anndata.experimental.read_elem_lazy`](https://anndata.scverse.org/page/generated/anndata.experimental.read_lazy.html) and [`anndata.experimental.read_lazy`](https://anndata.scverse.org/page/generated/anndata.experimental.read_elem_lazy.html).
Why? Because now your dataframes can be lazy too thanks to support from [xarray](https://docs.xarray.dev/en/stable/user-guide/index.html)!
Expand All @@ -47,7 +47,7 @@ Mix this with zarr v3 for performant, fully lazy, fully remote (if needed) acces
Check out [our notebook](https://anndata.scverse.org/page/tutorials/notebooks/read_lazy.html) to learn more about the API – thanks to [Nils Gehlenborg’s HIDIVE lab](https://hidivelab.org/) for hosting the data, and be sure to check out the [Vitessce visualisation](https://tinyurl.com/jtan4nx7) of the very same data backing the notebook.
This dual-access really showcases the power of smart remote data access!

## Customizable API
### Customizable API

And if that wasn’t enough, we now have [a new way of extending the anndata API](https://anndata.scverse.org/page/generated/anndata.register_anndata_namespace.html) contributed by one of our community members, Sri Varra.
This contribution lets users extend the `AnnData` API easily, great for tinkering with new APIs and features but also for writing new methods directly into the `AnnData` object:
Expand Down
2 changes: 1 addition & 1 deletion content/blog/2025-conference-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,6 @@ Each sponsor provided an outlook of the latest technologies in perturbation scre

### Conclusion

This was the second time we organized the scverse conference — you can read about [the first edition in Munich](/blog/2024-conference-summary/). We're looking forward to seeing you at future scverse events! In the meantime, you can engage with the community on [Zulip](https://scverse.zulipchat.com/) and at our community meetings. Look out for announcements on our social media channels ([X](https://x.com/scaboranova), [Bluesky](https://bsky.app/profile/scverse.bsky.social), [LinkedIn](https://www.linkedin.com/company/scverse/)).
This was the second time we organized the scverse conference — you can read about [the first edition in Munich](/blog/2024-conference-summary/). We're looking forward to seeing you at future scverse events! In the meantime, you can engage with the community on [Zulip](https://scverse.zulipchat.com/) and at our community meetings. Look out for announcements on our social media channels ([X](https://x.com/scverse_team), [Bluesky](https://bsky.app/profile/scverse.bsky.social), [LinkedIn](https://www.linkedin.com/company/scverse/)).

*Photo credits: Vivekanandan Ramalingam (Vivek), Research Scientist at Stanford Genetics.*
Loading