SOFA v20.12


What’s new in SOFA v20.12

New: SofaPython3 plugin integration

Python3 and SOFA are meeting in one plugin: SofaPython3. This first integration of the plugin opens up new perspectives. Not only can a SOFA simulation be described using a Python script with the embedded Python interpreter, but one or several SOFA instances can now created from a Python environment. Even more powerful, you can create new components (e.g. forcefields) in Python using the bindings provided in the plugin. Python-scripted simulations have no limit anymore!

See the SofaPython3 GitHub repository for technical details.


A dedicated documentation has been written to guide you in your first steps with SofaPython3 up to the implementation of your own bindings. Discover the SofaPython3 ReadTheDocs!

Technical support

A dedicated forum has been set up to welcome any compilation issue or technical question on SofaPython3!

New features

Callback in SOFA

A new callback system is introduced in the SOFA v20.12. This mechanism offers the possibility to add a callback function in any SOFA component so that outputs can be updated upon changes on their input data.
The callback function returns a component state (e.g. Valid, Invalid) which guarantees the component state coherency.

Polynomial springs

A new model of spring is added by sergeiNikolaev which allows for a polynomial stress-strain behavior. The order of the polynom and the coefficients can be freely defined by the user. Discover the PolynomialSpringsForceField and PolynomialRestShapeSpringsForceField with their example scenes!


  • Clarify MeshbarycentricMapperEngine input names and add label description by coolteemf in #1487
  • Exposing Data in ContactListener by ScheiklP in #1678
  • Replacement of Qwt by QtCharts and remove internal library by epernod in #1512
  • Make SOFA compatible with CGAL5+ by courtecuisse in #1522

New: Marketplace items!

Check out the SOFA marketplace, new plugins and tutorials were recently added! These code will be compatible with this v20.12 release.

Pluginization: SOFA-NG project

With the intensive work of fredroy, the SOFA NG project and its pluginization tasks are progressing quicly. As a reminder, the objective of SOFA-NG is to refactorize the current modules and components by moving them into plugins, in order to have a fully customable version of SOFA.


  • Many fixes of warnings as in PR #1682
  • Headers of SOFA classes are being cleaned to lighten includes and decrease compilation time
  • Integration of the issofa_bugfix branch
  • Compilation without OpenGL cleaned in #1478

Breaking changes

New features have also some consequences in the SOFA API:

  • Ongoing SOFA-NG project generate several breaking changes due to modularization. It currently targets SOFA packages: SofaMisc, SofaGeneral, SofaCommon, as well as SofaKernel. Follow the progress of the project online!
  • Standardization of types for indices and sizes in #1539, propagated in all SOFA code base
  • Cleaning of the DataLink implementation in #1526 and the ongoing work on Link in #1722
  • Clean in BoxROI, breaking because of the removal of aliases & deprecated datafields in #1482
  • Refactoring of SofaMacro for better target and package management in #1433, may impact your plugin CMakeLists.txt file
  • Deletion of deprecated plugins in #1439

SOFA v20.12 contributors

579 posts on forum
200 merged pull-requests
1191 clones of the repository
14 contributors on GitHub

Back to Top