Skip to content

v0.20.0 (2026.10.30)

Enhancements

Desktop App

  • added a Qt desktop app (simmate desktop start) through the new desktop extra
  • added a compound dashboard with linked plots, a table, a detail card, and a Ketcher substructure filter
  • added loading of custom datasets (parquet, CSV, SDF, and SMILES)
  • added analyze, featurize, export, and chatbot panels
  • added a workers tab for launching containerized API workers (Podman or Docker)
  • added a CPU, memory, and disk usage monitor
  • added simmate desktop build and upload for single-file executables, plus in-app update notices
  • the desktop app can be rebranded and extended without forking

Website

  • added dashboards for compute, inventory, projects, lab automation, and dev tools (git, docker, and k8s)
  • added a customizable home dashboard with widgets
  • added a data quick search with a periodic table input
  • added a workflow quick-submit form and a calculations tab on user profiles
  • added Data Explorer views for crystal datasets (3D viewer, exports, and search forms)
  • added web reports for static energy and relaxation calculations
  • added htmx_structure_input and datetime inputs for htmx forms
  • added plotly data streaming
  • added update-many selection in tables
  • added social (OAuth) login
  • redesigned the home, about, FAQ, and contact pages
  • cleaned up dataset pages for ChEMBL, COD, Materials Project, JARVIS, BCPC, and more

Compute

  • added a REST API worker mode for workers without database access (is_api_worker_safe)
  • added a @schedule decorator and an on kwarg for weekly schedules
  • workers now shut down cleanly on SIGTERM (e.g. k8s and docker) and stale workers are detected
  • added nightly Postgres backups to S3 (database_backups setting)

Workflows

  • added upload_output and delete_output workflow parameters
  • added a draft accuracy_rating to help beginners pick settings
  • upgraded the Quantum Espresso and evolution apps
  • added QE SSSP potentials to docker images

Database & Datastores

  • added a Datastore base class for parquet datasets too large for the ORM
  • added MoleculeDatastore with similarity search (usearch HNSW and faiss IVF-PQ)
  • added Chemspace and ChEMBL datastores
  • added memory-safe repartitioning and parallel chunk loading
  • added a @batch_bulk_create decorator for load_source_data methods
  • added parquet support for data archives
  • added simmate database commands: snapshot, load-test-data, prebuild, and upload-prebuild
  • added --use-template to simmate database reset for fast resets
  • updated data loads for OQMD, COD, AFLOW, JARVIS, Materials Project, and PDB
  • updated the CAS Registry app to use the official API
  • added SSH directory syncing and a source kwarg for Trino connections

Inventory Management

  • added Molecule and Structure tables for substances
  • added a single entry point for substance registration (get_or_create_ids)
  • added a SubstanceDatastore for very large substance catalogs
  • added a SubstanceIdChange log for merges, promotions, and splits
  • added helper methods for batches, containers, and storage locations

Toolkit

  • added toolkit.modeling (ridge, random forest, gradient boosting, Tanimoto k-NN, and LinearFit)
  • updated fingerprint featurizers
  • improved SDF metadata parsing

Lab Automation

  • added OnOff, TimeProportional, FuzzyLogic, and PID controllers
  • added a StirringHotPlate device
  • added a draft lab dashboard with a task planner

CLI & Deployment

  • added one-line installers (curl -LsSf https://simmate.org/install.sh | sh) and an all extra
  • added simmate dev (lint, test, docs, and clean) with k8s and s3 subgroups
  • added simmate website start and download-ketcher
  • improved CLI help texts with rich markdown
  • added a Helm chart for single-node k3s deployments
  • added a draft VASP dockerfile (image not shared, since VASP is proprietary)
  • slimmed the main docker image to <500 MB

Refactors

  • Python 3.13 is now required
  • simmate engine is now simmate compute, with worker, cluster, scheduler, and workitems subgroups
  • simmate run-server is now simmate website start
  • simmate start-project is now simmate init
  • simmate database download is now simmate database load
  • removed simmate database dump-data and load-data
  • simmate utils archive-old-runs moved to simmate workflows archive-old-runs
  • simmate workflows list-all and show-config are now list and config
  • S3Workflow is now ShellWorkflow
  • use_database now defaults to False on workflows
  • compress_output no longer deletes the run folder (use delete_output)
  • run folders default to <scratch_dir>/<run_id>
  • moved workflows.execution and workflows.scheduler to simmate.compute
  • moved WorkItem and SimmateWorker to the new compute_management app (old rows are not migrated)
  • the scheduler now submits WorkItems instead of running tasks in-thread
  • DynamicTableForm is now TableComponent in data_explorer.components
  • substances now link to datasets (the relation was reversed)
  • reset the inventory_management migrations
  • moved Blender tools into a blender app
  • the simmate logger no longer configures the root logger (use from simmate.utils import logger)
  • switched the default molecule sketcher from ChemDoodle to Ketcher
  • switched docs from MkDocs to Zensical
  • switched linting from black and isort to ruff
  • removed the dask dependency and old example configs
  • the web server now runs multithreaded
  • static files are no longer date-stamped
  • removed unused web templates and assets

Fixes

  • fixed an extra $$$$ delimiter in bulk SDF exports
  • fixed a typo in the volume_change formula for relaxations
  • fixed htmx_molecule_input for non-ChemDraw sketchers
  • missing static files now return a 404
  • fixed connection closing in database.external_connectors
  • added a missing CAS Registry migration
  • patched status tracking, htmx forms, reports, and the project management mixin
  • used full image paths so Helm works with Podman
  • bumped dependencies (pandas, pymatgen, rdkit, plotly, rich, django-allauth, and more)