Skip to content

Release v0.4.0 — Patinae

Choose a tag to compare

@github-actions github-actions released this 13 Jun 22:01

Patinae v0.4.0

PyMOL-RS is now Patinae.

With 0.4.0 the project gets a new name and a reorganized codebase. The GPU-first remake is no longer a prototype living inside another project; it now stands on its own as a native desktop app, a reusable rendering stack, a plugin platform, a Python package, and a WebGPU viewer, all under one name.

The rename is the visible change. The bigger one is structural. The old egui desktop shell and the pymol-* crates are gone, replaced by a Patinae platform with fully recreated renderer. Scene, commands, framework, settings, plugins, Python, and web are still dedicated crates that can be used independently. The molecular workflows you already know still work; the machinery underneath them has been rebuilt to achieve the greatest perfomance.

Patinae interface


Highlights

PyMOL-RS is now Patinae

The rename runs across the whole product surface:

  • The desktop app and binary are now patinae
  • Rust crates now live under the patinae-* namespace
  • The Python package is now patinae
  • The notebook widget imports from patinae.widget
  • The web viewer package is now @patinae/viewer
  • Icons, launchers, README text, workflows, release assets, packaging metadata, and screenshots have all been updated for the new name

Patinae stays compatible with familiar command and session workflows where that helps. It is not a wrapper around PyMOL and not an official PyMOL project. It is an independent rendering and application stack.

A native desktop app

The desktop experience is rebuilt as a native Slint application. The new shell owns the application kernel, renderer bridge, shared GPU device handling, native menu and file actions, docked panels, object and selection lists, representation and color popovers, sequence and movie panels, command output, rich completions, fetch dialog, recent files, recent thumbnails, clipboard integration, theme detection, titlebar color integration, and direct REPL focus routing.

The result feels like an application rather than a renderer with panels bolted on.

Renderer and scene stack rebuilt

The rendering system now sits behind a dedicated patinae-render and patinae-scene boundary. The new frame flow includes:

  • Representation catalogs and scene-store synchronization
  • GPU build and culling flows
  • Depth prepass, shadows, WBOIT transparency, FXAA, SSAO, marking, and silhouette post-processing
  • Picking readback and reprojection
  • Capture and geometry export paths
  • Shader-source validation

The renderer covers dots, lines, sticks, spheres, cartoons, ellipsoids, maps, surfaces, and mesh wireframes through this same frame architecture.

Large scenes

Expensive work now runs on reusable GPU paths: atom-instance dots, viewport-aware sphere and stick Auto-LOD, tiled surface rebuilds, fast representation toggles, cached render bridge data, async GPU color-ID picking, and stable hover and selection overlays.

Tested heavily on 3J3Q.

Commands, models, and molecular semantics

The command and runtime layer now has structured help, source tracking, richer completion items, setting-value hints, native command routing, startup rc handling through Patinae paths, lifecycle quit handling, trajectory loading, PNG export, map commands, timing badges, and safer preservation of raw Python-backed command arguments.

The molecular model gained stronger foundations too: CCD-backed and covalent bonding, altloc-aware bond handling, natural subchain ordering, bond-aware HET grouping, subchain modeling, dirty tracking, atom iterators, spectrum and color helpers, scene models, sequence models, movie models, settings storage, and recent-file storage.

Plugin platform

Patinae has a new plugin SDK. The plugin crates define FFI and wire protocols, registration, host loading, runtime paths, panel events, generated plugin UI controls, panel snapshots, panic isolation, and tests.

Reference plugins moved with the platform:

  • hello is still the minimal lifecycle and command-registration example
  • ipc is still available for external process integration
  • python now has a real panel and runtime split inside the native app
  • raytracer keeps its BVH-accelerated GPU ray tracing, shadows, transparency, and edge detection, but runs on new GPU-based geometry

Python, notebooks, and web

The Python surface is now:

pip install patinae
from patinae import cmd
from patinae.widget import Viewer

The notebook widget still ships the WebGPU viewer into Jupyter through anywidget. The browser viewer moves to the new renderer and bridge APIs with wgpu 28, cached picking parity, local performance examples, TypeScript API updates, and the @patinae/viewer package name.


New features

  • Native Patinae app: new Slint desktop shell with docked panels, object list, sequence viewer, movie panel, plugin panels, fetch dialog, REPL output, completions, native menus, and native file actions
  • Patinae renderer: explicit frame, pass, pipeline, compute, picking, post-process, capture, and geometry-export flows
  • Plugin SDK and host: new patinae-plugin and patinae-plugin-host crates with dynamic plugin loading, panel UI, event routing, FFI and wire protocols, runtime paths, and panic isolation
  • Map rendering commands: isomesh, isosurface, and isodot are part of the command and rendering surface
  • Python package rename: pymol-rs / pymol_rs becomes patinae
  • Web package rename: the embeddable web viewer is now @patinae/viewer
  • Notebook widget alignment: widget assets are built from the same web bundle and included in Python wheels
  • Native package identity: macOS and Windows launchers, icons, app metadata, release asset names, and packaging workflows now use Patinae branding

Breaking changes and renames

This release deliberately changes public names:

Old New
pymol-rs executable patinae
pymol_rs Python import patinae
pip install pymol-rs pip install patinae
pymol-* Rust crates patinae-* Rust crates
PyMOL-RS app/bundle names Patinae app/bundle names

0.3.x is the final PyMOL-RS-branded release line. 0.4.0 is the first Patinae release.


Downloads

Bundles (recommended)

Self-contained packages with the app, plugins, and runtime pieces. Unzip or mount and run.

Platform Architecture Download
macOS Apple Silicon Patinae.dmg
Windows x86_64 patinae-bundle-windows-x86_64.zip
Windows ARM64 patinae-bundle-windows-arm64.zip

Standalone executables

Bare binaries for advanced users. Plugins can be installed separately.

Platform Architecture Executable Plugins
macOS Apple Silicon patinae-macos-arm64.tar.gz patinae-plugins-macos-arm64.tar.gz
Windows x86_64 patinae-windows-x86_64.zip patinae-plugins-windows-x86_64.zip
Windows ARM64 patinae-windows-arm64.zip patinae-plugins-windows-arm64.zip
Linux x86_64 patinae-linux-x86_64.tar.gz patinae-plugins-linux-x86_64.tar.gz
Linux ARM64 patinae-linux-arm64.tar.gz patinae-plugins-linux-arm64.tar.gz

Python and web

Package Download
Python wheels pip install patinae or see release assets below
Web viewer (WASM + JS) patinae-web.tar.gz

Full Changelog: v0.3.3...v0.4.0