---
title: Drake v1.27.0
date: 2024-03-18
released: 2024-03-18
---

# Announcements

* Drake no longer supports Ubuntu 20.04 ("Focal") ([#20952][_#20952]).
  * End of life timelines are documented as part of the
    [Supported Configurations](https://drake.mit.edu/installation.html#supported-configurations).
  * As a result, we have some new lower bounds on supported tool versions ([#21107][_#21107]):
    * C++ standard >= 20
    * GCC >= 11
    * Clang >= 14
    * Bazel >= 6.0
  * Remove drake_visualizer ([#20963][_#20963])
* On macOS our primary Python version is now 3.12 ([#21013][_#21013])
  * Building from source via Bazel defaults to 3.12, but is configurable.
  * Drake wheels are still supported and distributed for both 3.11 and 3.12.
  * The drake binaries tarballs (``*.tgz``) are 3.12 only.
* On macOS, some support has reached end of life:
  * Drake's support for Monterey (i.e., macOS 12) reached end of life in Drake
    v1.22.0. We have continued to ship some Monterey packages as a courtesy, but
    this be the last release to do so.
  * Drake's support for running on ``x86_64`` reached end of life in Drake
    v1.22.0. We have continued to ship x86 packages as a courtesy, but this will
    be the last release to do so. In the future, we will only ship ``*.whl``
    packages for macOS x86_64 (not ``*.tgz`` packages), and only for stable
    releases (no more nightly builds).
  * We are no longer running CI testing on macOS ``x86_64``, except for the
    minimal recipe that compiles the wheel packages.

# Breaking changes since v1.26.0

* The ``drake_bazel_installed`` installation workflow is deprecated and no
  longer tested in CI ([#21057][_#21057])
  * This particular workflow for using Drake binaries via Bazel is characterized
    by a line like this in your ``WORKSPACE`` file:
    ```py
load("@drake_binary//:share/drake/repo.bzl", "drake_repository")
```
  * During the deprecation window we will continue to install the code in case
    it still happens to work for you, but we are no longer testing it in our CI
    so it will probably bitrot at some point.
  * For Bazel users who only need pydrake, note that the rules_python support
    for pip wheel is pretty good these days; using the pydrake wheels via
    rules_python is a good option.

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

# Changes since v1.26.0

## Dynamical Systems

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

New features

* Add System::IsDifferentialEquationSystem ([#20976][_#20976])
* Add batch (multithreaded) evaluation of system dynamics ([#20979][_#20979])

Fixes

* Disable unused dependency trackers for better performance ([#21134][_#21134])
* Fail-fast when given a mismatched context for primitive systems ([#20958][_#20958])

## Mathematical Program

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

New features

* Add serialization for GraphOfConvexSetsOptions ([#20946][_#20946])
* Add mixing_steps to IrisOptions ([#20974][_#20974])
* Make PairwiseIntersectionsContinuousJoints Non-Internal ([#21011][_#21011])
* Implement a constructor for HPolyhedron that takes in a linear program, and outputs its feasible set ([#21027][_#21027])
* Add support for LorentzConeConstraint and RotatedLorentzConeConstraint in GraphOfConvexSets edges and vertices ([#21001][_#21001])
* Add support of intersection of hyperrectangles ([#21076][_#21076])

Fixes

* Prevent segfaults in `VPolytope` by checking square matrix ([#21060][_#21060])
* Add finite check to linear constraints ([#21049][_#21049])
* Fix a logic bug when constructing an AffineSubspace as the affine hull of a ConvexSet did not find all basis vectors ([#21009][_#21009])

## Multibody Dynamics and Geometry

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

New features

* Collision filter group can be named as a member of another collision filter group when parsing ([#20925][_#20925])
* Add RpyFloatingJoint (providing alternative to QuanternionFloatingJoint) ([#20912][_#20912])
* Add shadow maps in RenderEngineVtk ([#20944][_#20944])
* Add MultibodyPlant::MakeActuationMatrixPseudoinverse ([#20975][_#20975])
* Implements PackageMap::ResolveUrl() ([#21042][_#21042])
* Add methods for detecting extremely erroneous spatial inertial values ([#20897][_#20897])
* Drake-generated meshes render faceted in meshcat ([#21021][_#21021])
* Add support for <include> tags in the mujoco parser ([#21087][_#21087])
* Visualization makes use of the convex hull for visualization when appropriate ([#21061][_#21061])
* Allow tiny compliant primitives to vanish ([#21100][_#21100])
* Make joint damping a system parameter ([#20947][_#20947])

Fixes

* Fix behavior of lights expressed in the camera frame for RenderEngineVtk ([#20930][_#20930])
* Defining a collision filter group multiple times no longer allows later definitions to supplant earlier definitions ([#20925][_#20925])
* Mujoco parser assigns unique names to default geometries ([#21045][_#21045])
* Obey extensionsUsed and extensionsRequired in glTF files in RenderEngineVtk ([#21090][_#21090])

## Planning

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

New features

* Unwrap GraphOfConvexSets trajectories with continuous revolute joints to continuous Euclidean space ([#21137][_#21137])
* Enable solving a path via convex restriction ([#20895][_#20895])
* Return bindings from KinematicTrajectoryOptimization Add* methods ([#21014][_#21014])
* Add new algorithm, IrisInConfigurationSpaceFromCliqueCover, for efficiently placing IRIS regions ([#20831][_#20831])
* Implement wraparound edges together with the subspace machinery ([#20886][_#20886])
* Enable removal of subgraphs ([#21006][_#21006])
* Implement MaxCliqueSolverViaGreedy, a greedy heuristic for obtaining large maximal cliques ([#21097][_#21097])

Fixes

* None

## Tutorials and examples

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

* Add tutorial for hydroelastic contact with a nonconvex mesh ([#20774][_#20774])

## Miscellaneous features and fixes

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

* Improve variant support for primitive types in yaml serialization ([#20937][_#20937])
* Move `tri_homecart` to `drake_models` package ([#21004][_#21004])
* Add `trajectories::DerivativeTrajectory` ([#21036][_#21036])
* Promote `manipulation::kuka_iiwa::SimIiwaDriver` to public API ([#21040][_#21040])
* Adjust `FindResource` on installed Drake to chase symlinks ([#21092][_#21092])

## pydrake bindings

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


New features

* Convert Drake `ExpressionKind.Constant` to `Sympy` `Integer` and `Float` ([#20996][_#20996])
* Allow `visualization.AddFrameTriadIllustration` to accept a multibody Frame ([#21064][_#21064])

Fixes

* Bind `MultibodyPlant::GetVisualGeometriesForBody` ([#21153][_#21153])
* Bind `SpatialInertia::CalcPrincipalSemiDiametersAndPoseForSolidEllipsoid` ([#21149][_#21149])
* Avoid `runpy` warning due to import order ([#20968][_#20968])
* Warn about implausible scale in `mesh_to_model` tool ([#20966][_#20966])
* Handle `UnionType` hints in yaml serialization ([#21108][_#21108])

## Build system

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

* Drop Ubuntu 20.04 ("Focal") as a supported platform ([#20952][_#20952])
* Simplify CMakeLists to use whatever OS codename for bazel customizations ([#21089][_#21089])
* Bump minimum supported versions ([#21107][_#21107])
* Update MacOS Python to 3.12 ([#21013][_#21013])
* CMake only installs during the install step (not the build step) ([#20916][_#20916])
* Disable legacy_create_init by default ([#21126][_#21126])
* Fix linker options for building on arm64 ([#21047][_#21047])

## Build dependencies

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

* Remove drake_visualizer ([#20963][_#20963])
* Remove determine_os logic ([#21089][_#21089])
* Add boost_internal ([#21037][_#21037])
  * This is not used by default; it is only used when --WITH_USD=ON is enabled.
* Add com_github_nelhage_rules_boost_internal ([#21037][_#21037]
  * This is not used by default; it is only used when --WITH_USD=ON is enabled.
* Upgrade Bazel to latest release 7.0.2 ([#21103][_#21103])
  * Fix apple_support for Bazel 7 compatibility ([#21116][_#21116])
  * Fix rules_rust for Bazel 7 compatibility ([#21104][_#21104])
  * Fix gflags for Bazel 7 compatibility ([#21106][_#21106])
* Upgrade abseil_cpp_internal to latest commit ([#21072][_#21072])
* Upgrade build_bazel_apple_support to latest release 1.14.0 ([#21072][_#21072])
* Upgrade com_github_nelhage_rules_boost_internal to latest commit ([#21072][_#21072])
* Upgrade crate_universe to latest ([#21072][_#21072])
* Upgrade crate_universe to latest ([#21083][_#21083])
* Upgrade drake_models to latest commit ([#21039][_#21039])
* Upgrade intel_realsense_ros to latest commit ([#20960][_#20960])
* Upgrade libpng_internal to latest release v1.6.43 ([#21072][_#21072])
* Upgrade meshcat to latest commit ([#21080][_#21080])
* Upgrade openusd_internal to latest release v24.03 ([#21078][_#21078])
* Upgrade ros_xacro to latest commit ([#20960][_#20960])
* Upgrade rules_python to latest release 0.31.0 ([#21072][_#21072])
* Upgrade rules_rust to latest release 0.40.0 ([#21083][_#21083])
* Upgrade rust_toolchain to latest ([#21083][_#21083])
* Upgrade typing_extensions_internal to latest release 4.10.0 ([#21072][_#21072])
* Upgrade vtk_internal to latest commit ([#21072][_#21072])
* Upgrade xmlrunner_py to latest release 3.2.0 ([#21071][_#21071])
* Fix github.bzl for extracting attachments without a prefix ([#21111][_#21111])

## Newly-deprecated APIs

* The ``drake_bazel_installed`` installation workflow ([#21057][_#21057])
* `drake::multibody::BallRpyJoint::damping()` ([#20947][_#20947])
* `drake::multibody::DifferentialInverseKinematicsIntegrator` input port `X_WE_desired` input port ([#20973][_#20973])
* `drake::multibody::Joint::damping_vector()` ([#20947][_#20947])
* `drake::multibody::PlanarJoint::damping()` ([#20947][_#20947])
* `drake::multibody::PrismaticJoint::damping()` ([#20947][_#20947])
* `drake::multibody::QuaternionFloatingJoint::angular_damping()` ([#20947][_#20947])
* `drake::multibody::QuaternionFloatingJoint::translational_damping()` ([#20947][_#20947])
* `drake::multibody::RevoluteJoint::damping()` ([#20947][_#20947])
* `drake::multibody::RpyFloatingJoint::angular_damping()` ([#20947][_#20947])
* `drake::multibody::RpyFloatingJoint::translational_damping()` ([#20947][_#20947])
* `drake::multibody::ScrewJoint::damping()` ([#20947][_#20947])
* `drake::multibody::UniversalJoint::damping()` ([#20947][_#20947])

## Removal of deprecated items

* Remove drake_visualizer ([#20963][_#20963])
* `drake::multibody::Body::node_index` ([#20603][_#20603], [#21075][_#21075])
* The `@drake_detected_os` external ([#20600][_#20600], [#21075][_#21075])

# Notes


This release provides [pre-compiled binaries](https://github.com/RobotLocomotion/drake/releases/tag/v1.27.0) named
``drake-1.27.0-{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> -->
[_#20600]: https://github.com/RobotLocomotion/drake/pull/20600
[_#20603]: https://github.com/RobotLocomotion/drake/pull/20603
[_#20774]: https://github.com/RobotLocomotion/drake/pull/20774
[_#20831]: https://github.com/RobotLocomotion/drake/pull/20831
[_#20886]: https://github.com/RobotLocomotion/drake/pull/20886
[_#20895]: https://github.com/RobotLocomotion/drake/pull/20895
[_#20897]: https://github.com/RobotLocomotion/drake/pull/20897
[_#20912]: https://github.com/RobotLocomotion/drake/pull/20912
[_#20916]: https://github.com/RobotLocomotion/drake/pull/20916
[_#20925]: https://github.com/RobotLocomotion/drake/pull/20925
[_#20930]: https://github.com/RobotLocomotion/drake/pull/20930
[_#20937]: https://github.com/RobotLocomotion/drake/pull/20937
[_#20944]: https://github.com/RobotLocomotion/drake/pull/20944
[_#20946]: https://github.com/RobotLocomotion/drake/pull/20946
[_#20947]: https://github.com/RobotLocomotion/drake/pull/20947
[_#20952]: https://github.com/RobotLocomotion/drake/pull/20952
[_#20958]: https://github.com/RobotLocomotion/drake/pull/20958
[_#20960]: https://github.com/RobotLocomotion/drake/pull/20960
[_#20963]: https://github.com/RobotLocomotion/drake/pull/20963
[_#20966]: https://github.com/RobotLocomotion/drake/pull/20966
[_#20968]: https://github.com/RobotLocomotion/drake/pull/20968
[_#20973]: https://github.com/RobotLocomotion/drake/pull/20973
[_#20974]: https://github.com/RobotLocomotion/drake/pull/20974
[_#20975]: https://github.com/RobotLocomotion/drake/pull/20975
[_#20976]: https://github.com/RobotLocomotion/drake/pull/20976
[_#20979]: https://github.com/RobotLocomotion/drake/pull/20979
[_#20996]: https://github.com/RobotLocomotion/drake/pull/20996
[_#21001]: https://github.com/RobotLocomotion/drake/pull/21001
[_#21004]: https://github.com/RobotLocomotion/drake/pull/21004
[_#21006]: https://github.com/RobotLocomotion/drake/pull/21006
[_#21009]: https://github.com/RobotLocomotion/drake/pull/21009
[_#21011]: https://github.com/RobotLocomotion/drake/pull/21011
[_#21013]: https://github.com/RobotLocomotion/drake/pull/21013
[_#21014]: https://github.com/RobotLocomotion/drake/pull/21014
[_#21021]: https://github.com/RobotLocomotion/drake/pull/21021
[_#21027]: https://github.com/RobotLocomotion/drake/pull/21027
[_#21033]: https://github.com/RobotLocomotion/drake/pull/21033
[_#21036]: https://github.com/RobotLocomotion/drake/pull/21036
[_#21037]: https://github.com/RobotLocomotion/drake/pull/21037
[_#21039]: https://github.com/RobotLocomotion/drake/pull/21039
[_#21040]: https://github.com/RobotLocomotion/drake/pull/21040
[_#21042]: https://github.com/RobotLocomotion/drake/pull/21042
[_#21045]: https://github.com/RobotLocomotion/drake/pull/21045
[_#21047]: https://github.com/RobotLocomotion/drake/pull/21047
[_#21049]: https://github.com/RobotLocomotion/drake/pull/21049
[_#21057]: https://github.com/RobotLocomotion/drake/pull/21057
[_#21060]: https://github.com/RobotLocomotion/drake/pull/21060
[_#21061]: https://github.com/RobotLocomotion/drake/pull/21061
[_#21064]: https://github.com/RobotLocomotion/drake/pull/21064
[_#21071]: https://github.com/RobotLocomotion/drake/pull/21071
[_#21072]: https://github.com/RobotLocomotion/drake/pull/21072
[_#21075]: https://github.com/RobotLocomotion/drake/pull/21075
[_#21076]: https://github.com/RobotLocomotion/drake/pull/21076
[_#21078]: https://github.com/RobotLocomotion/drake/pull/21078
[_#21080]: https://github.com/RobotLocomotion/drake/pull/21080
[_#21083]: https://github.com/RobotLocomotion/drake/pull/21083
[_#21087]: https://github.com/RobotLocomotion/drake/pull/21087
[_#21089]: https://github.com/RobotLocomotion/drake/pull/21089
[_#21090]: https://github.com/RobotLocomotion/drake/pull/21090
[_#21092]: https://github.com/RobotLocomotion/drake/pull/21092
[_#21097]: https://github.com/RobotLocomotion/drake/pull/21097
[_#21100]: https://github.com/RobotLocomotion/drake/pull/21100
[_#21103]: https://github.com/RobotLocomotion/drake/pull/21103
[_#21104]: https://github.com/RobotLocomotion/drake/pull/21104
[_#21106]: https://github.com/RobotLocomotion/drake/pull/21106
[_#21107]: https://github.com/RobotLocomotion/drake/pull/21107
[_#21108]: https://github.com/RobotLocomotion/drake/pull/21108
[_#21111]: https://github.com/RobotLocomotion/drake/pull/21111
[_#21116]: https://github.com/RobotLocomotion/drake/pull/21116
[_#21126]: https://github.com/RobotLocomotion/drake/pull/21126
[_#21134]: https://github.com/RobotLocomotion/drake/pull/21134
[_#21137]: https://github.com/RobotLocomotion/drake/pull/21137
[_#21149]: https://github.com/RobotLocomotion/drake/pull/21149
[_#21153]: https://github.com/RobotLocomotion/drake/pull/21153
<!-- <end issue links> -->

<!--
  Current oldest_commit ddb32f9dba9db9984b9292ad5227a8911a5950e7 (exclusive).
  Current newest_commit 38728a99103e0c057e512a701a4df43960d12e19 (inclusive).
-->
