---
title: Drake v1.22.0
date: 2023-10-16
released: 2023-10-16
---

# Announcements

* The EventStatus return value is now fully propagated through the System and
  Simulator API ([#20035][_#20035]).
  * This can be useful for systems that need to signal the "reached
    termination" condition from inside of a Diagram, or otherwise denote
    _recoverable_ failures (i.e., without throwing exceptions).
* Drake now provides Python 3.12 wheels for Ubuntu ([#20299][_#20299]).
  * macOS support for Python 3.12 is still in progress.
* Drake now provides a pip-compatible index for installing the nightly build
  into a virtual environment ([#20189][_#20189]).
  * Refer to [Installation via Pip](/pip.html#nightly-releases) for
    instructions.
* Drake's support for macOS Monterey (i.e., macOS 12) has reached end of life,
  as documented on our [OS Support](/stable.html#os-support) page and the
  [Supported Configurations](/installation.html#supported-configurations)
  table. This will be the last Drake release that supports macOS Monterey.

# Breaking changes since v1.21.0

* In MultibodyPlant, automatically-added floating joint names no longer have a
  ``$world_`` prefix ([#20253][_#20253]).
  * During the deprecation window ``GetJointByName()`` will strip the old prefix as
    partial compatibility support, but this does not cover all cases.
* The System class now officially disallows direct inheritance ([#20035][_#20035]).
  * The only direct descendants possible are LeafSystem and Diagram. Users must
    derive from those classes rather than directly from System. Likely this
    won't affect anyone.
* System event dispatch order may have changed ([#20035][_#20035])
  * If user code overrides a System dispatcher function (e.g., DoPublish()) but
    also invokes the base class default implementation, execution of the default
    dispatch code is now deferred until the user's DoPublish() returns;
    previously it was executed immediately at the invocation point.

Refer to our [Drake Stability Guidelines](/stable.html) for our policy
on API changes.

# Changes since v1.21.0

## Dynamical Systems

<!-- <relnotes for systems go here> -->

New features

* Propagate EventStatus through the System and Simulator API ([#20035][_#20035])
* Improve system Graphviz output substantially ([#20204][_#20204], [#20270][_#20270], [#20196][_#20196], [#20228][_#20228], [#20310][_#20310])
* Add DiagramBuilder num_input_ports and num_output_ports accessors ([#20239][_#20239])
* Add LcmBuses protocol for opting out of LCM messaging ([#20247][_#20247])

Fixes

* RgbdSensor now passes the correct camera pose ([#20305][_#20305])

## Mathematical Program

<!-- <relnotes for solvers go here> -->

New features

* Add more MathematicalProgram constraint types ([#20317][_#20317])
  * AddPositiveDiagonallyDominantDualConeMatrixConstraint
  * AddPositiveDiagonallyDominantDualConeMatrixConstraint
  * AddScaledDiagonallyDominantDualConeMatrixConstraint
  * AddScaledDiagonallyDominantDualConeMatrixConstraint

Fixes

* Improve HPolyhedron::FindRedundant() performance ([#20188][_#20188])
* MOSEK™ license acquisition failure prints more info ([#20262][_#20262])

## Multibody Dynamics and Geometry

<!-- <relnotes for geometry,multibody go here> -->

New features

* Add SapWeldConstraint ([#19608][_#19608])
* Add ability to disable gravity at a per-model-instance level ([#20264][_#20264])
* Floating joints for free bodies are given the same name as the free body, with underscores prepended if necessary to avoid name clashes ([#20253][_#20253])
* Split the inverse kinematics MinimumDistanceConstraint into MinimumDistanceLowerBoundConstraint and MinimumDistanceUpperBoundConstraint ([#20266][_#20266])
* Add SceneGraph::RemoveRenderer() ([#20319][_#20319]) 
* Add SceneGraph accessors for renderers in a Context ([#20355][_#20355])
* RenderEngineGl supports multiple meshes and materials in ``*.obj`` files ([#20272][_#20272])
* RenderEngineVtk supports multiple meshes and materials in ``*.obj`` files ([#20235][_#20235])

Fixes

* Calls to JointActuator::set_default_gear_ratio() and JointActuator::set_default_rotor_inertia() after Finalize() are now reflected in subsequently-created contexts ([#20307][_#20307])
* Fix uninitialized memory from disconnected actuation input ports ([#20215][_#20215])
* Fix duplicated account of actuation when using PD controllers ([#20259][_#20259])
* Fix segfault in SAP when caching is disabled ([#20177][_#20177])
* Fix crash when a deformable body is in contact ([#20209][_#20209])
* Meshcat sets Content-Type for HTML pages ([#20237][_#20237])
* Add more error checks when loading ``*.vtk`` files ([#20240][_#20240])
* RenderEngineGltfClient improves how input glTFs are handled w.r.t. scene merging and extensions ([#20184][_#20184])

## Planning

<!-- <relnotes for planning go here> -->

New features

* RobotDiagram exports its ports by default ([#20238][_#20238])

Fixes

* RobotDiagramBuilder fails fast on a missing MultibodyPlant or SceneGraph ([#20241][_#20241])

## Tutorials and examples

<!-- <relnotes for examples,tutorials go here> -->

* hardware_sim adds an option to output System Graphviz ([#20198][_#20198])

## Miscellaneous features and fixes

<!-- <relnotes for common,math,lcm,lcmtypes,manipulation,perception,visualization go here> -->

* Meldis offers ``--browser`` selection on the command line ([#20257][_#20257])
* The simulated IiwaDriver implements the protocol for opting out of LCM messaging ([#20182][_#20182], [#20247][_#20247])
* Add hash_append to RollPitchYaw/RotationMatrix/RigidTransform ([#20252][_#20252])

## pydrake bindings

<!-- <relnotes for bindings go here> -->

New features

* ColorizeDepthImage accepts either 32F or 16U depth images ([#20254][_#20254])

Fixes

* Improve error message for solver evaluator return type mistakes ([#20178][_#20178])
* Bind AffineSubspace::OrthogonalComplementBasis ([#20341][_#20341])

## Build system

<!-- <relnotes for cmake,doc,setup,third_party,tools go here> -->

* Add Python 3.12 manylinux wheel support ([#20299][_#20299])
* Add pip-compatible index for installing a nightly build ([#20189][_#20189])
* Fail-fast in miscofigured VTK build on macOS ([#20219][_#20219])
* Patch clang.cindex for compatibility with Clang 15 ([#20261][_#20261])
* Start adding XCode 15 compatibility (still incomplete) ([#20287][_#20287])
* Work around SNOPT 7.6 incompatibility with modern gfortran versions ([#20330][_#20330])

## Build dependencies

<!-- <relnotes for workspace go here> -->

* Add ``nasm`` to source prereqs ([#20353][_#20353])
* Add the ``@libpng_internal`` external to build libpng from source ([#20276][_#20276])
* Add the ``@libtiff_internal`` external to build libtiff from source ([#20331][_#20331])
* Add the ``@clarabel_cpp_internal`` external as an opt-in dependency ([#20246][_#20246], [#20325][_#20325])
  * Add supporting Rust externals (also as opt-in dependencies):
    * ``@build_bazel_apple_support``
    * ``@crate_universe``
      * ``@crate__amd-0.2.2``
      * ``@crate__autocfg-1.1.0``
      * ``@crate__cfg-if-1.0.0``
      * ``@crate__clarabel-0.6.0``
      * ``@crate__darling-0.14.4``
      * ``@crate__darling_core-0.14.4``
      * ``@crate__darling_macro-0.14.4``
      * ``@crate__derive_builder-0.11.2``
      * ``@crate__derive_builder_core-0.11.2``
      * ``@crate__derive_builder_macro-0.11.2``
      * ``@crate__either-1.9.0``
      * ``@crate__enum_dispatch-0.3.12``
      * ``@crate__fnv-1.0.7``
      * ``@crate__ident_case-1.0.1``
      * ``@crate__itertools-0.11.0``
      * ``@crate__lazy_static-1.4.0``
      * ``@crate__num-traits-0.2.16``
      * ``@crate__once_cell-1.18.0``
      * ``@crate__proc-macro2-1.0.67``
      * ``@crate__quote-1.0.33``
      * ``@crate__strsim-0.10.0``
      * ``@crate__syn-1.0.109``
      * ``@crate__syn-2.0.37``
      * ``@crate__thiserror-1.0.48``
      * ``@crate__thiserror-impl-1.0.48``
      * ``@crate__unicode-ident-1.0.12``
    * ``@rules_rust``
    * ``@rules_rust_tinyjson``
    * ``@rust_toolchain``
      * ``@rust_darwin_aarch64__aarch64-apple-darwin__stable``
      * ``@rust_darwin_aarch64__aarch64-apple-darwin__stable_tools``
      * ``@rust_darwin_x86_64__x86_64-apple-darwin__stable``
      * ``@rust_darwin_x86_64__x86_64-apple-darwin__stable_tools``
      * ``@rust_linux_aarch64__aarch64-unknown-linux-gnu__stable``
      * ``@rust_linux_aarch64__aarch64-unknown-linux-gnu__stable_tools``
      * ``@rust_linux_x86_64__x86_64-unknown-linux-gnu__stable``
      * ``@rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools``
* Upgrade ``@curl_internal`` to latest release 8.3.0 ([#20302][_#20302])
* Upgrade ``@dm_control_internal`` to latest commit ([#20304][_#20304])
* Upgrade ``@gz_utils_internal`` to latest release 2.1.0 ([#20303][_#20303])
* Upgrade ``@rules_rust`` to latest release 0.28.0 ([#20304][_#20304])
* Upgrade ``@sdformat_internal`` to latest release 14.0.0 ([#20303][_#20303])
* Upgrade ``@suitesparse_internal`` to latest release 7.2.0 ([#20304][_#20304])
* Upgrade ``@typing_extensions_internal`` to latest 4.8.0 ([#20304][_#20304])
* Upgrade ``@yaml_cpp_internal`` to latest release 0.8.0 ([#20304][_#20304])
* Remove the ``@libcmaes`` external ([#20245][_#20245])
* Remove dependency on ``bzip2`` ([#20352][_#20352])
* Improve symbol hiding in externals ([#20346][_#20346], [#20357][_#20357], [#20358][_#20358], [#20359][_#20359])

## Newly-deprecated APIs

* ``drake::multibody::MinimumDistanceConstraint`` ([#20282][_#20282])
  * Instead, use ``MinimumDistanceLowerBoundConstraint`` or ``MinimumDistanceUpperBoundConstraint``.
* ``drake::multibody::MinimumDistancePenaltyFunction`` ([#20282][_#20282])
  * Instead, use ``drake::solvers::MinimumValuePenaltyFunction``.
* ``drake::multibody::InverseKinematics::AddMinimumDistanceConstraint`` ([#20282][_#20282])
  * Instead, use ``AddMinimumDistanceLowerBoundConstraint``.
* ``drake::solvers::MinimumValueConstraint`` ([#20282][_#20282])
  * Instead, use ``MinimumValueLowerBoundConstraint`` or ``MinimumValueUpperBoundConstraint``.
* ``drake::systems::LeafSystem::DeclarePeriodicDiscreteUpdateNoHandler`` ([#20094][_#20094])
  * A handler callback is now required.
* ``drake::systems::LeafSystem::DeclarePeriodicPublishNoHandler`` ([#20094][_#20094])
  * A handler callback is now required.
* ``drake::systems::LeafSystem::DeclarePeriodicUnrestrictedUpdateNoHandler`` ([#20094][_#20094])
  * A handler callback is now required.
* ``drake::systems::LeafSystem::DoCalcDiscreteVariableUpdates`` ([#20094][_#20094])
  * Overriding the dispatcher to handle events is deprecated.
* ``drake::systems::LeafSystem::DoCalcUnrestrictedUpdate`` ([#20094][_#20094])
  * Overriding the dispatcher to handle events is deprecated.
* ``drake::systems::LeafSystem::DoPublish`` ([#20094][_#20094])
  * Overriding the dispatcher to handle events is deprecated.
* ``drake::systems::System::GetGraphvizFragment()`` ([#20204][_#20204])
  * Instead, override ``DoGetGraphvizFragment()``.
* ``drake::systems::System::GetGraphvizId()`` ([#20204][_#20204])
  * Instead, override ``DoGetGraphvizFragment()``.
* ``drake::systems::System::GetGraphvizInputPortToken()`` ([#20204][_#20204])
  * Instead, override ``DoGetGraphvizFragment()``.
* ``drake::systems::System::GetGraphvizOutputPortToken()`` ([#20204][_#20204])
  * Instead, override ``DoGetGraphvizFragment()``.
* The ``@expat`` external ([#20351][_#20351])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.
* The ``@libpng`` external ([#20276][_#20276])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.
* The ``@libtiff`` external ([#20331][_#20331])
  * The repository rule will continue to work during the deprecation window, but Drake no longer installs the Ubuntu package; if you need the package, ensure your project setup scripts install it.

## Removal of deprecated items

* `drake::geometry::optimization::CSpaceSeparatingPlane` five-argument constructor ([#19526][_#19526], [#20291][_#20291])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.22.0) named
``drake-20231016-{focal|jammy|mac|mac-arm64}.tar.gz``. See [Stable Releases](/from_binary.html#stable-releases) for instructions on how to use them.

Drake binary releases incorporate a pre-compiled version of [SNOPT](https://ccom.ucsd.edu/~optimizers/solvers/snopt/) as part of the
[Mathematical Program toolbox](https://drake.mit.edu/doxygen_cxx/group__solvers.html). Thanks to
Philip E. Gill and Elizabeth Wong for their kind support.

<!-- <begin issue links> -->
[_#19526]: https://github.com/RobotLocomotion/drake/pull/19526
[_#19608]: https://github.com/RobotLocomotion/drake/pull/19608
[_#20035]: https://github.com/RobotLocomotion/drake/pull/20035
[_#20094]: https://github.com/RobotLocomotion/drake/pull/20094
[_#20177]: https://github.com/RobotLocomotion/drake/pull/20177
[_#20178]: https://github.com/RobotLocomotion/drake/pull/20178
[_#20182]: https://github.com/RobotLocomotion/drake/pull/20182
[_#20184]: https://github.com/RobotLocomotion/drake/pull/20184
[_#20188]: https://github.com/RobotLocomotion/drake/pull/20188
[_#20189]: https://github.com/RobotLocomotion/drake/pull/20189
[_#20196]: https://github.com/RobotLocomotion/drake/pull/20196
[_#20198]: https://github.com/RobotLocomotion/drake/pull/20198
[_#20204]: https://github.com/RobotLocomotion/drake/pull/20204
[_#20209]: https://github.com/RobotLocomotion/drake/pull/20209
[_#20215]: https://github.com/RobotLocomotion/drake/pull/20215
[_#20219]: https://github.com/RobotLocomotion/drake/pull/20219
[_#20228]: https://github.com/RobotLocomotion/drake/pull/20228
[_#20235]: https://github.com/RobotLocomotion/drake/pull/20235
[_#20237]: https://github.com/RobotLocomotion/drake/pull/20237
[_#20238]: https://github.com/RobotLocomotion/drake/pull/20238
[_#20239]: https://github.com/RobotLocomotion/drake/pull/20239
[_#20240]: https://github.com/RobotLocomotion/drake/pull/20240
[_#20241]: https://github.com/RobotLocomotion/drake/pull/20241
[_#20245]: https://github.com/RobotLocomotion/drake/pull/20245
[_#20246]: https://github.com/RobotLocomotion/drake/pull/20246
[_#20247]: https://github.com/RobotLocomotion/drake/pull/20247
[_#20252]: https://github.com/RobotLocomotion/drake/pull/20252
[_#20253]: https://github.com/RobotLocomotion/drake/pull/20253
[_#20254]: https://github.com/RobotLocomotion/drake/pull/20254
[_#20257]: https://github.com/RobotLocomotion/drake/pull/20257
[_#20259]: https://github.com/RobotLocomotion/drake/pull/20259
[_#20261]: https://github.com/RobotLocomotion/drake/pull/20261
[_#20262]: https://github.com/RobotLocomotion/drake/pull/20262
[_#20264]: https://github.com/RobotLocomotion/drake/pull/20264
[_#20266]: https://github.com/RobotLocomotion/drake/pull/20266
[_#20270]: https://github.com/RobotLocomotion/drake/pull/20270
[_#20272]: https://github.com/RobotLocomotion/drake/pull/20272
[_#20276]: https://github.com/RobotLocomotion/drake/pull/20276
[_#20282]: https://github.com/RobotLocomotion/drake/pull/20282
[_#20287]: https://github.com/RobotLocomotion/drake/pull/20287
[_#20291]: https://github.com/RobotLocomotion/drake/pull/20291
[_#20299]: https://github.com/RobotLocomotion/drake/pull/20299
[_#20302]: https://github.com/RobotLocomotion/drake/pull/20302
[_#20303]: https://github.com/RobotLocomotion/drake/pull/20303
[_#20304]: https://github.com/RobotLocomotion/drake/pull/20304
[_#20305]: https://github.com/RobotLocomotion/drake/pull/20305
[_#20307]: https://github.com/RobotLocomotion/drake/pull/20307
[_#20310]: https://github.com/RobotLocomotion/drake/pull/20310
[_#20317]: https://github.com/RobotLocomotion/drake/pull/20317
[_#20319]: https://github.com/RobotLocomotion/drake/pull/20319
[_#20325]: https://github.com/RobotLocomotion/drake/pull/20325
[_#20330]: https://github.com/RobotLocomotion/drake/pull/20330
[_#20331]: https://github.com/RobotLocomotion/drake/pull/20331
[_#20341]: https://github.com/RobotLocomotion/drake/pull/20341
[_#20346]: https://github.com/RobotLocomotion/drake/pull/20346
[_#20351]: https://github.com/RobotLocomotion/drake/pull/20351
[_#20352]: https://github.com/RobotLocomotion/drake/pull/20352
[_#20353]: https://github.com/RobotLocomotion/drake/pull/20353
[_#20355]: https://github.com/RobotLocomotion/drake/pull/20355
[_#20357]: https://github.com/RobotLocomotion/drake/pull/20357
[_#20358]: https://github.com/RobotLocomotion/drake/pull/20358
[_#20359]: https://github.com/RobotLocomotion/drake/pull/20359
<!-- <end issue links> -->

<!--
  Current oldest_commit 877b7741f11bfa925fd16047230bc12130ae3ed6 (exclusive).
  Current newest_commit da969f5c8f97e661c6ca9450d0cff0b52a240619 (inclusive).
-->
