We are pleased to announce the Avogadro 2.1, with new features, performance improvements, and piles of bug fixes. A particular effort was made to improve testing and code quality.
Thanks to everyone who made suggestions, bug reports, translations, and discussions. Avogadro is built from the community, and we appreciate all the help.
Avogadro v2 was designed as a platform to make it easy to build the next generation of molecular and materials visualization, including fast modern rendering and improved stability. With this release, we mark 30 plugins and will offer tutorials on making your tools easily available as plugins.
Highlights (tldr)
- New Z-matrix editor: view and edit internal coordinates, including constraints, dummy atoms for linear molecules, and drag-and-drop to reorder atoms. Input generators can now write Z-matrix coordinates.
- Faster, smoother geometry optimization using the ABC-FIRE method and a hybrid mode that is now the default for Optimize and AutoOpt.
- Much faster orbitals and surfaces: Gaussian basis set calculations are up to 20-25× faster, large ORCA files load much faster too.
- Improved conformer and dynamics plot including geometry parameters, velocities, temperature, etc.
- Batch energies and forces: recalculate energies and forces for every conformer or frame at once, in batches suited to ML potentials.
- New building tools
- An initial polymer builder - feedback welcome
- D-amino acids in the peptide builder.
- Edit distances, angles, and dihedrals directly in the Measure tool.
- PDB biological assemblies (tested to ~1 million atoms).
- Fractional supercells.
- Better support for CIF files, including space group perception from transforms.
- New camera controls: virtual trackball rotation for all tools, keyboard shortcuts for rotating, and click-and-drag to focus on an atom.
- Custom properties: atom, bond, residue, and conformer properties are kept and can be viewed and edited in the property tables.
- Better vibrations: each step of an optimization or scan can now have its own vibrations, displaced geometries can be generated, and ORCA symmetry labels are read.
- Scripting and automation
- Many tools can now be controlled through a JSON-RPC interface, including selection, measurement, force fields, constraints, symmetry, spectra, colors, and hydrogens.
- The
avogadro.connectPython module can now list the available commands, making it easy to drive Avogadro from Jupyter, scripts, or AI agents. - A new
avogadro-mcpproject for connecting local LLM models and agents to Avogadro.
- Transparent compression support read and write compressed files directly (e.g.,
.gz,.xzand.zstd). - Plugin improvements: progress bars and a cancel button for plugin scripts, plus authors, download counts, and bug tracker links in the plugin window. Installs are more reliable.
- More stable: continuous fuzz testing on Linux and Windows found and fixed a large number of bugs and potential crashes in file readers and editing.
Features
- Refactor PLY export with scene tesselation @ghutchis (#3107)
- Add content patterns for file format detection @ghutchis (#3093)
- Initial support for z-matrix coordinates in input generators @ghutchis (#3015)
- Set the default filename in input generators @ghutchis (#3013)
- Add authors, download count and bug tracker link to plugin window @ghutchis (#3012)
- Add constraints to the z-matrix editor @ghutchis (#3010)
- Add support for time, velocities and temperature to the conformer chart @ghutchis (#3006)
- Add shared camera controls for all tools / modes @ghutchis (#2972)
- Add support for fractional ranges for supercells @ghutchis (#2955)
- Extend PlotConformer scan coordinate support @ghutchis (#2998)
- Add support for transparent compression IO @ghutchis (#2994)
- Allow drag-and-drop to reorder atoms in the property table @ghutchis (#2993)
- Add a z matrix editor window @ghutchis (#2990)
- Rework the internal <=> Cartesian conversions @ghutchis (#2988)
- Add support in RWMolecule for swapAtoms @ghutchis (#2989)
- Ensure player, plotconformer and properties agree on active conformer @ghutchis (#2986)
- Insert the modelView and camera projection matrix into CJSON @ghutchis (#2977)
- Camera Controls with Virtual Trackball @vaclavhanzl (#2962)
- Reworking vibrations to allow per-conformer (step) Hessians @ghutchis (#2956)
- Add progress reporting (and cancel) for plugin scripts @ghutchis (#2939)
- Add internal support for SMILES @ghutchis (#2919)
- Add batch calculations for energies and forces @ghutchis (#2867)
- Allow display and editing of atom, bond, residue, conformer properties @ghutchis (#2864)
- When “center” is selected, insert with geometry @ghutchis (#2865)
- Add an initial polymer builder @ghutchis (#2789)
- Switch GUI actions and AutoOpt to hybrid optimization & adaptive chunk size @ghutchis (#2858)
- Add optimizer state, including E & grad, plus hybrid mode @ghutchis (#2857)
- Store custom atom, bond, residue, and conformer properties @ghutchis (#2774)
- Enable “D” stereo by inverting all dihedral angles for side-chains @ghutchis (#2837)
- Add key shortcuts for rotations (shift for x/y, control for z) @ghutchis (#2827)
- Add initial support for reading PDB assembly e.g. 9MB0 @ghutchis (#2799)
Accessibility Improvements
- Fix text rendering resolution @ghutchis (#3087)
- Pick label contrast color by WCAG luminance @ghutchis (#3185)
- Accessibility keyboard fixes @ghutchis (#3183)
Performance Improvements
- Improve AO rendering efficiency @ghutchis (#3009)
- Improve speed of numeric parsing using the fast_float library for text to number conversion
- Fix fairly slow parsing of ORCA files with lots of orbitals @ghutchis (#2907)
- Switch GUI actions and AutoOpt to hybrid optimization & adaptive chunk size @ghutchis (#2858)
- Add optimizer state, including E & grad, plus hybrid mode @ghutchis (#2857)
- Update L-BFGS and Implement FIRE and ABC-FIRE2 optimizer @ghutchis (#2855)
- Improve Gaussian basis performance (25x faster!) @ghutchis (#2726)
Bug Fixes
- Let Ctrl/Meta-click pan in the Draw and Template tools @ghutchis (#3192)
- Orbitals: respect resolution quality selection from orbital window @Tyagiquamar (#3111)
- Fix GAMESS-US fuzz test failure @ghutchis (#3182)
- Fix drag-to-existing atom bond editor action @ghutchis (#3180)
- Reject Gaussian basis sets with inconsistent shell data @ghutchis (#3179)
- Check that AppImage programs run without LD_LIBRARY_PATH @ghutchis (#3175)
- Fix cif primitive and expansion @ghutchis (#3174)
- Register obmm force fields only when obmm is available @ghutchis (#3170)
- Stop re-prompting for plugin installs that failed @ghutchis (#3146)
- Fix gromacs residue atoms @ghutchis (#3136)
- Fix DCD header decoding @ghutchis (#3132)
- Make the unit cell render default to enabled @ghutchis (#3131)
- Vibration IR and Raman intensities now use 2-decimal format @ghutchis (#3129)
- Disconnect only the GLWidget’s own molecule connections @ghutchis (#3128)
- Skip unsupported h/i shells when computing cutoffs @ghutchis (#3127)
- Deduce space group Hall numbers from the CIF operation loop @ghutchis (#3126)
- Enforce a minimum distance for edits @ghutchis (#3119)
- Keep unique ids when undoing a molecule replacement @ghutchis (#3120)
- Add tests for scene plugin settings @ghutchis (#3117)
- Fix non-rectangular cube files with rescaling @ghutchis (#3116)
- Fix selection and color changes @ghutchis (#3106)
- Fix a potential thread race in EDT surfaces @ghutchis (#3098)
- Fix plugin launch fallbacks @ghutchis (#3095)
- Fix script commands replacing molecules @ghutchis (#3094)
- Fix label offset with orthographic projection @ghutchis (#3089)
- Clear AlignTool’s molecule on setMolecule(nullptr) @ghutchis (#3088)
- Fix select command errors @ghutchis (#3086)
- Fix bonding and wrapAtoms undo behavior @ghutchis (#3085)
- Fix locale number parsing @ghutchis (#3084)
- Add qtplugins tests via RPC commands @ghutchis (#3081)
- Fix format bugs @ghutchis (#3080)
- Fix neighborperceiver outliers @ghutchis (#3078)
- Fix rwmolecule bugs from fuzz testing @ghutchis (#3075)
- Fix a bug with readProperties not freeing an existing basis @ghutchis (#3068)
- Use core getline @ghutchis (#3066)
- Share toLower and startsWith through Core utilities @ghutchis (#3067)
- Fix unclamped acos in angle measurements @ghutchis (#3060)
- Fix force field gradient convergence test @ghutchis (#3062)
- Fix template tool rotation for antiparallel vectors @ghutchis (#3061)
- Fix molecule (and Array) move-from code @ghutchis (#3048)
- Fix potential crash on malformed scene-plugin layer settings @ghutchis (#3047)
- Replace invalid UTF-8 when writing CJSON instead of failing @ghutchis (#3044)
- Add more calc unit tests and fuzz test @ghutchis (#3040)
- Add more qtgui tests and layer fuzz test @ghutchis (#3039)
- Add new core tests including layer (and fuzz_core_layer test) @ghutchis (#3037)
- Rather than create duplicate constraints, edit the existing one @ghutchis (#3034)
- Fix fuzz format crashes @ghutchis (#3032)
- Fix fuzz failure in RWMolecule::addBond @ghutchis (#3027)
- Fix possible layer crashes @ghutchis (#3021)
- Fix a fuzz bug in XYZ reading via perceive bond orders @ghutchis (#3017)
- Add a try / catch guard for file IO in production builds @ghutchis (#3016)
- Fix a crash with the measure tool when deleting atoms @ghutchis (#3011)
- Add a button to insert dummy atoms for linear molecules @ghutchis (#3007)
- Add a checkbox for adjusting bond lengths during edit @ghutchis (#3008)
- Added tests to check basis set normalization and orthogonality @ghutchis (#3000)
- Read Molden Occup as a double and lround into the electron count @shaneraphel (#3025)
- Add a blur step to the ambient occlusion @ghutchis (#2995)
- Fix bug with underflow on reading a Q-Chem cube file @ghutchis (#2987)
- Some fixes for the ‘generic output’ failures on Windows @ghutchis (#2985)
- Improve support for QCSchema v2 JSON files @ghutchis (#2914)
- Fix handling of several atom properties under edits @ghutchis (#2923)
- Change the identifier for generic output based on the format (e.g., .out => ORCA output) @ghutchis (#2909)
- Allow the number of MOs to differ from the basis set side @ghutchis (#2906)
- Force UTF-8 mode for Windows Python scripts @aouxwoux (#2894)
- Run plugin setup command with pixi @matterhorn103 (#2877)
- Keep labels aligned with their anchors in screen space @soakleyvfx (#2856)
- Rework the internal <=> Cartesian conversions @ghutchis (#2988)
- Fix zoomScene delta sign to match its documentation @ghutchis (#2978)
- Normalize QSettings key casing in label and cartoons plugins @ghutchis (#2980)
- Add some more bullet-proof code for installing packages @ghutchis (#2976)
- Fix potential crash from uninitialized OB member variables @ghutchis (#2971)
- Fix table type for plugin JSON @ghutchis (#2966)
- Fix a few minor issues in the PyPI connect module for JSON-RPC @ghutchis (#2967)
- Fix a bug when dragging a window to a new monitor @ghutchis (#2970)
- Add an idealBondLength method to correct covalent radii sum @ghutchis (#2969)
- More hardening, particularly obmm for forcefields and charges @ghutchis (#2959)
- Fix potential crashes @ghutchis (#2953)
- For now, use Open Babel as higher priority than cclib @ghutchis (#2952)
- Two fixes for potential MMFF94 AutoOpt / Edit problems on Windows @ghutchis (#2951)
- Fix bug that would register two clicks to the same atom @ghutchis (#2950)
- Fix fuzz failures in Gaussian FCHK, Molden and ORCA reading @ghutchis (#2949)
- Fix bug with coordinate generation for input generators @ghutchis (#2943)
- Fix some bugs in which pixi was installed after first launch @ghutchis (#2942)
- Fix parsing issue with numbers causing underflow 1.0e-500 @ghutchis (#2941)
- Ensure Windows wheels run delvewheel correctly @ghutchis (#2938)
- Support symmetry when reading vibrations from Orca @jcerezochem (#2866)
- Fix for reading Gaussian through Open Babel @ghutchis (#2937)
- Fix bug with torsion (and angular) constraints @ghutchis (#2934)
- Fix conformers with Open Babel via CML @ghutchis (#2933)
- Fix script bugs @ghutchis (#2926)
- Fix bug with OB-3.2.x data directory not found @ghutchis (#2921)
- Set the identifier for generic output based on the format @ghutchis (#2909)
- Allow the number of MOs to differ from the basis set side @ghutchis (#2906)
- Fix render artifact on translucent orbitals / surfaces @ghutchis (#2893)
- Fix auto opt dynamics - optimize & rescale velocities @ghutchis (#2859)
- Keep labels aligned with their anchors in screen space @soakleyvfx (#2856)
- When changing atoms, bonds, etc. invalidate surfaces, spectra, etc. @ghutchis (#2752)
- Several fixes aimed at crash reported on forum with xtb plugin @ghutchis (#2816)
- Fix skipped frames in player tool playback @sohocine (#2846)
- Fix issue with inserting SMILES with whitepace - just trim first @ghutchis (#2853)
- Fix an issue with extra H atoms on proline residues @ghutchis (#2830)
- Make sure to zero the density and spin matrix and ensure symmetry @ghutchis (#2831)
- Use one transparent blend function for OpenGL @ghutchis (#2828)
- Add additional ionic parameters to MMFF94 @ghutchis (#2815)
- Fix bug with NIH resolver returning 2D geometries @ghutchis (#2808)
- Fix minor bug - plot conformers wouldn’t update after OB search @ghutchis (#2807)
- Fix Molden parsing with sparse MO reporting @ghutchis (#2792)
- Fix cartoon render bug @ghutchis (#2801)
- Don’t mark the molecule dirty for selection-only changes @ghutchis (#888)
- Give the layer model the activated view’s molecule @ghutchis (#884)
- After undo / redo check if the stack is empty @ghutchis (#875)
- Make sure the fileName property is written as UTF-8 @ghutchis (#874)
- Fix a crash on quit when plugins report being destroyed @ghutchis (#858)
- Improve QtTesting record/playback coverage @sohocine (#829)
- Reset the background color to transparent black before export @ghutchis (#821)
- Make sure to update “open recent” list after save @ghutchis (#814)
- Fix the version check so that “ignore” works for users @ghutchis (#807)
Automation Improvements
- Add selectAtoms and edit RPC commands @ghutchis (#3135)
- Enhance Select JSON-RPC command to return selection payloads @SamuelAyibatarri (#3077)
- Add RPC commands for Spectra, Properties, PDF, and XRD plugins @SamuelAyibatarri (#3073)
- Add more forcefield RPC calls @ghutchis (#3063)
- Add RPC commands for ForceField plugin @SamuelAyibatarri (#3059)
- Add RPC commands for layer commands @ghutchis (#3055)
- Add RPC commands to the constraints extension @ghutchis (#3056)
- Add RPC support for frame increment / count in the player tool @ghutchis (#3054)
- Add RPC commands for ApplyColors plugin @SamuelAyibatarri (#3053)
- Add edit distance, angle and dihedral to measure tool @ghutchis (#3042)
- Add RPC commands for focus and unfocus @SamuelAyibatarri (#3036)
- Add support for RPC commands detectSymmetry and symmetrize @ghutchis (#3030)
- Add fetchPDB command @ghutchis (#3029)
- Add RPC commands for Hydrogens plugin @SamuelAyibatarri (#3092)
- Add RPC commands for Centroid plugin @SamuelAyibatarri (#3045)
- Add RPC commands for Select plugin @SamuelAyibatarri (#3041)
- Add support to avogadro.connect for introspection @ghutchis (#2984)
- Add fetchByName RPC command to NetworkDatabases @ghutchis (#2983)
- Hold file RPC requests until plugin file formats are registered @ghutchis (#892)
Maintenance
- Fail plugin commands up front when no molecule is active @ghutchis (#881)
- Fix typos in avogadro/ and tests/ (#3103) @minutechreview (#3125)
- Fix typos elsewhere (README, CMake, CI, python, utilities) (#3103) @O1sumitkumar (#3109)
- Add a fuzz target for the NWChem log reader @ian0318git (#3105)
- fix: add forgotten virtual specifier to destructor @e-kwsm (#3171)
- refactor(label): Refactor old SLOT/SIGNALs into new-style in label pl… @emirtkgz (#3177)
- Check that AppImage programs run without LD_LIBRARY_PATH @ghutchis (#3175)
- Add fuzz target for GAMESS output file reader @berquist (#3166)
- Drop a pointer-arithmetic warning @ghutchis (#3163)
- Add fuzz target for MOPAC AUX file reader @berquist (#3160)
- Fix ‘performance-avoid-endl’ in core, calc, command and qtplugins @Tommao12345 (#3159)
- Fix more compile warnings @ghutchis (#3161)
- Fix a few more clang-tidy warnings: @ghutchis (#3151)
- Remove unused parameter warnings with clang-tidy @ghutchis (#3148)
- Replace std::endl with ‘\n’ using clang-tidy @ghutchis (#3147)
- Use a date in the version when git describe fails @ghutchis (#3145)
- Fix ‘readability-container-size-empty’ in avogadro/quantumio @ghutchis (#3141)
- refactor: apply modernize-use-emplace @e-kwsm (#3143)
- refactor!: apply clang-tidy modernize-pass-by-value @e-kwsm (#3142)
- Fix ‘readability-container-size-empty’ in avogadro/core @ghutchis (#3140)
- Add DCD fuzz target with small generated seeds @ghutchis (#3139)
- Decode TRR floats exactly via shared Core unpack functions @ghutchis (#3138)
- Update moved test data @ghutchis (#3137)
- Use new-style connections in bonding plugin @AADITYA007x (#3133)
- Fix parsers that use at() syntax to avoid exceptions @ghutchis (#3122)
- Fix string connects @ghutchis (#3123)
- Fuzz qtplugin commands @ghutchis (#3121)
- Fix readability-container-size-empty warnings in avogadro/io @ian0318git (#3118)
- Add tests for scene plugin settings @ghutchis (#3117)
- Use atomic coverage counters in the coverage workflow @ghutchis (#3115)
- Fail tests when test data is missing @ghutchis (#3113)
- Add a weekly Linux coverage workflow @ghutchis (#3114)
- Refactor PLY export with scene tesselation @ghutchis (#3107)
- Add codespell to the pre-commit checks to avoid typos @ghutchis (#3102)
- Fix locale number parsing @ghutchis (#3084)
- Add qtplugins tests via RPC commands @ghutchis (#3081)
- Expand sccache builds to Windows and Mac @ghutchis (#3079)
- Build: bring back sccache with help from Claude @ghutchis (#3076)
- Improve GitHub cache usage @ghutchis (#3074)
- Improve Linux fuzz tests with sanitizers and stack dump @ghutchis (#3071)
- Build trim GitHub builds @ghutchis (#3072)
- Share helper methods for building energy unit conversions @ghutchis (#3069)
- Use core getline @ghutchis (#3066)
- Share toLower and startsWith through Core utilities @ghutchis (#3067)
- Remove dead code @ghutchis (#3065)
- Add more calc unit tests and fuzz test @ghutchis (#3040)
- Add more qtgui tests and layer fuzz test @ghutchis (#3039)
- Fix hang in Windows ASAN build - currently using incorrect GLEW @ghutchis (#3035)
- Add a Windows fuzz test using clang @ghutchis (#3023)
- Add a Windows AddressSanitizer run to check for issues @ghutchis (#3022)
- Added tests to check basis set normalization and orthogonality @ghutchis (#3000)- Update command scripts progress to use timed progress bar @ghutchis (#2999)
- fix(tests): fix include directory for bundled test @e-kwsm (#2981)
- Sync the GitHub build action with the regular Windows one @ghutchis (#2973)
- Add a warning if the build attempts to sign on Mac @ghutchis (#2963)
- Add a Windows sentry / crashpad build @ghutchis (#2961)
- Build: Run fuzz tests on all pull requests @ghutchis (#2945)
- Cherry-pick fixes from WebAssembly patch @ghutchis (#2944)
- Chore: Refactor json options formats @ghutchis (#2928)
- Add a shared action for updating vcpkg to fix break @ghutchis (#2924)
- Force UTF-8 mode for Windows Python scripts @aouxwoux (#2894)
- Run plugin setup command with pixi run if pixi available @matterhorn103 (#2877)
- build: toml++ is only for qtgui @PPN-SD (#2874)
- chore(GaussianFchk): improve messages when no MO coefficients are found @e-kwsm (#2832)
- test: fix invocation of enable_testing @e-kwsm (#2823)
- Fix test failures @ghutchis (#2829)
- Add RPC tests for selectAtoms and the Editor edit verbs @ghutchis (#908)
- Keep the AppImage’s libraries out of child processes @ghutchis (#905)
- Use a date in the version when git describe fails @ghutchis (#898)
- Add RPC tests to the GitHub workflows @ghutchis (#894)
- Test the Sentry crash diagnostics in CI @ghutchis (#895)
- Add RPC app tests @ghutchis (#891)
- Update flatpak manifest for Eigen 5.0.1 @ghutchis (#873)
- Update with ASAN / LSAN rules from avogadrolibs @ghutchis (#857)
- Update Flatpak manifest to use KDE SDK v6.11 @matterhorn103 (#864)
- Update Flatpak manifest to match Flathub one as of 2.0 release @matterhorn103 (#820)
- Add an optional Windows build with sentry / crashpad @ghutchis (#846)
- Fix broken link for ‘Build’ in README.md @exergonic (#839)
Translations
- Translations update from Hosted Weblate @weblate
- Automated translation updates @github-actions[bot] (#2997)
- Fix text for install and remove plugins (no checkboxes) @ghutchis (#2810)
Credits
Thanks to many contributors, including: @AADITYA007x, @aouxwoux, @berquist, @e-kwsm, @emirtkgz, @exergonic, @ghutchis, @ian0318git, @jcerezochem, @matterhorn103, @minutechreview, @O1sumitkumar, @PPN-SD, @SamuelAyibatarri, @shaneraphel, @soakleyvfx, @sohocine, @Tommao12345, @Tyagiquamar, @vaclavhanzl, @weblate, @dependabot[bot], @github-actions[bot], @alevtina-karashokova, Alexandre R Soares, @andibing, Àngel Oliveras Rovira, @arifpedia, @claude, @Copilot, @cyphra, Daniel Nylander, David D., @DumKhunt, Eisuke Kawashima, eNoWater, @felix2336, @flytothehighest, @GansasOnGithup, @hooray804, Jusef, @Laksan99, Languages add-on, @LeistDev, Li Chaoyu, Libre, LibreTranslate, @majklvi, Michal Várady, @milotype, @nbehrnd, @NorwayFun, Norwid Behrnd, @oersen, @ramses-70, Remus-Gabriel Chelu, @sabbir-nipu, @SantosSi, @TamilNeram, @timvdm, Weblate Translation Memory, Werner Kremen and @coderabbitai[bot]