Release v0.4.0 — Patinae
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.
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:
hellois still the minimal lifecycle and command-registration exampleipcis still available for external process integrationpythonnow has a real panel and runtime split inside the native appraytracerkeeps 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 patinaefrom patinae import cmd
from patinae.widget import ViewerThe 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-pluginandpatinae-plugin-hostcrates with dynamic plugin loading, panel UI, event routing, FFI and wire protocols, runtime paths, and panic isolation - Map rendering commands:
isomesh,isosurface, andisodotare part of the command and rendering surface - Python package rename:
pymol-rs/pymol_rsbecomespatinae - 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
