- Fix multilayer routing [PR](https://github.com/gdsfactory/gdsfactory/pull/707)
- Add tests and examples for multilayer routing [PR](https://github.com/gdsfactory/gdsfactory/pull/714)
[5.29.0](https://github.com/gdsfactory/gdsfactory/pull/704)
- add sweep_neff, sweep_width, sweep_group_index gtidy3d.modes and ring model
- Absorption from DEVSIM [PR](https://github.com/gdsfactory/gdsfactory/pull/701)
- DEVSIM PIN waveguides now return imaginary neff
- Changes to tidy3D mode solver to allow running in a different interpreter for compatibility
- Added support for None orientation ports for get_bundle_from_steps. [PR](https://github.com/gdsfactory/gdsfactory/pull/702)
- bend_euler returns wire_corner if radius = None
- upgrade to tidy3d-beta 1.6.3
[5.28.1](https://github.com/gdsfactory/gdsfactory/pull/698)
- upgrade to tidy3d-beta 1.6.2
- add functions to write a complete technology package for KLayout using the KLayoutTechnology class [PR](https://github.com/gdsfactory/gdsfactory/pull/696)
- remove unnamed layers
[5.28.0](https://github.com/gdsfactory/gdsfactory/pull/691)
- Add avoid_layers, distance, and cost addition for turns for routing.get_route_astar [PR](https://github.com/gdsfactory/gdsfactory/pull/690)
- cross_sections `metal1`, `metal2`, `metal3` have `radius = None`
- routing.get_bundle uses `wire_corner` if `cross_section.radius=None`
- routing.get_route_astar uses `wire_corner` if `cross_section.radius=None`
[5.27.1](https://github.com/gdsfactory/gdsfactory/pull/686)
- fix devsim TCAD units and examples.
[5.27.0](https://github.com/gdsfactory/gdsfactory/pull/684)
- add A* router [PR](https://github.com/gdsfactory/gdsfactory/pull/683)