Jupyter Scatter v1.0 is out! 🥳
Jupyter Scatter v1.0 is out! 🥳
It’s been a minute since the last update and quite the journey since 2020. The API has been stable for a while now, and I finally addressed the last remaining things on my list, so it felt like the right moment to cut a v1.0.
→ Code: https://github.com/flekschas/jupyter-scatter → Docs: https://jupyter-scatter.dev
Three things in particular made this version feel ready:
Arrow PyCapsule support. Jupyter Scatter now accepts any DataFrame that implements the Arrow PyCapsule interface (Polars, DuckDB, etc.). Thanks Kyle Barron for bringing this to my attention! The integration ended up being super easy thanks to the well-designed protocol.
Full Marimo support. The toolbar UI moved from Python ipywidgets to TS+React, which means Jupyter Scatter now also fully works inside Marimo notebooks. 🎉
Point draw ordering via
order(). Useful when overplotting otherwise hides the points you actually want to see or when you want to move NA/noise points to the back.
Other goodies:
- Categorical color encoding in the histogram bars
- Mostly Python 3.14 support (the one gap is label placement, since geoindex-rs doesn’t have 3.14 wheels yet)
- The usual bunch of bug fixes (mostly around categorical color encoding)
Full changelog: https://github.com/flekschas/jupyter-scatter/blob/main/CHANGELOG.md
Reflecting back, the most critical part of Jupyter Scatter has always been the ease of its API, and the most profound step toward that happened 5 years ago in PR #4 (https://github.com/flekschas/jupyter-scatter/pull/4). Everything since has felt like candy on top. Not a new insight, but worth saying out loud: getting the foundational interface right is what matters most.
Huge shoutout to Trevor Manz for years of continued support, and to Nezar Abdennur for critical feedback at the very beginning that shaped the now-stable API. 🙏
A secondary goal was that Jupyter Scatter would be useful beyond a standalone widget. I.e., that other tools could build on top of it. I’m happy that this has worked out, e.g., in Ozette’s comparative-embedding-visualization (https://github.com/OzetteTech/comparative-embedding-visualization - Let’s gooo Trevor Manz!) and scSketch (https://github.com/colabobio/scsketch - More soon from Askar Temirbek and Andres Colubri 🎉). Hopefully others will follow.
Jupyter Scatter also inspired a new tool that goes beyond the fundamental limitation of single 2D projection scatters… 🫣🤫
Anyway, thanks for reading until the end! If Jupyter Scatter has been useful to you, I’m happy. Keep scatter plotting 💪