# \[ANN\] UnitTypes v3.0.0

**URL:** https://discourse.julialang.org/t/ann-unittypes-v3-0-0/137806
**Category:** Package Announcements
**Created:** [June 25, 2026, 5:17pm UTC](https://discourse.julialang.org/t/ann-unittypes-v3-0-0/137806 "2026-06-25T17:17:05Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![bcon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bcon/32/23495_2.png) [@bcon](https://discourse.julialang.org/u/bcon)
#### Post date: [June 25, 2026, 5:17pm UTC](https://discourse.julialang.org/t/ann-unittypes-v3-0-0/137806/1 "2026-06-25T17:17:05Z")

</div>

Version 3.0 brings the major addition of a Catchall type for operations that result in undefined units; explicit types are still preferred and will be chosen when available.

- Exponentiation works on UnitTypes
- UnitType ranges can be defined over any coherent unit
- Convenience (1:5)u"m" added
- Broadcasting implemented: 3.\*(1:5)u"m"
- @relateMeasures now accepts compound left hand expressions, intermediate types therein are defined
- Fixed non-const globals having Any type
- Test coverage on all new code
- Extended benchmark comparison suite
- Documentation updated

Breaking changes:

- @makeMeasure argument order changed to be more natural: `@makeMeasure 1e-3 Meter = 1 MilliMeter "mm"`

**Closed issues:**

- exponent handling ([#20](https://github.com/mechanomy/UnitTypes.jl/issues/20))
- Density \* Length = undefined? ([#21](https://github.com/mechanomy/UnitTypes.jl/issues/21))
- add getUnitAbbreviation(1u"mm") ([#25](https://github.com/mechanomy/UnitTypes.jl/issues/25))
- Catchall UnitType ([#26](https://github.com/mechanomy/UnitTypes.jl/issues/26))
- More complex unit handling ([#27](https://github.com/mechanomy/UnitTypes.jl/issues/27))

Prior to 3.0.0, the biggest limitation of UnitTypes was that every operation had to result in a defined UnitType. If the type did not exist, then the operation would error. This has been fixed by introducing a Catch-all type:

```julia
julia> Yard(2) * Lumen(3) # no named type with yd*lm
8.2296m*lm # ::Catchall with dimensions AbstractLength=1, AbstractLuminousFlux=1

```

The price of operations producing undefined UnitTypes is that Catchalls are allocated; these can be eliminated by defining the needed types.

Compound unit strings are also parsed `1u"mm*s/kg"`, returning an explicit type or a `Catchall` for that combination.

See the [v1.0.0 annoucement](https://discourse.julialang.org/t/ann-unittypes-v1-0-0/126351)
