The latest published Kurbo release is 0.13.1 which was released on 2026-05-13. You can find its changes documented below.
This release has an MSRV of 1.85.
serdeandschemarssupport forAxis. (#591 by @waywardmonkeys)
0.13.1 (2026-05-13)
This release has an MSRV of 1.85.
Stroke::is_finiteandStroke::is_nan. (#545 by @waywardmonkeys)- Component-wise
Insets::min/maxmethods. (#548 by @xStrom) - Ability to add and subtract
Insetsfrom otherInsets. (#549 by @xStrom) Arcnow implementsParamCurve. (#378 by @waywardmonkeys)Affine::{pre,then}_skewandAffine::{pre,then}_reflectfluent composition helpers. (#563 by @waywardmonkeys)- Three transform matrix norms:
Affine::{nuclear_norm_squared,frobenius_norm_squared,spectral_norm}. (#569 by @tomcur) StrokeOpts::stable_dash_orderto keep dashes at fixed path-relative positions instead of merging the first/last dash across. (#550 by @RobertBrewitz)expand_pathanisotropic path expansion. (#575 by @raphlinus)
- Improved performance of
RoundedRect::windingandRoundedRect::contains. (#534 by @tomcur) Axis,Ellipse::from_affine,Insets,Line::reversed,Rect::min_x/max_x/min_y/max_y,RoundedRectRadii::abs/clamp/as_single_radius,RoundedRect::width/height/radii/rect/origin/center,Size::aspect_ratio,Stroke::new/with_join/with_miter_limit/with_start_cap/with_end_cap/with_capsare all nowconst. (#536 by @xStrom, #539 and #561 by @tomcur)- Improved performance of
Ellipse::area. Note: for non-finite ellipses, this method may now returnf64::INFINITYwhere it returnedf64::NANbefore. (#559 by @tomcur) - Improved numerical robustness of winding numbers for paths. (#537 by @jneem)
Affine::pre_rotate_aboutcalculation. (#567 by @dannymcgee)- Now closing subpaths when computing area for expansion. (#580 by @raphlinus)
- Odd-length dash patterns no longer swap dashes and gaps when
dash_offsetincreases. (#585 by @Keavon)
0.13.0 (2025-11-27)
This release has an MSRV of 1.85.
BezPath::into_elementsmethod which allows getting all path elements as aVecwithout allocating, consuming the original path. This is the counterpart ofBezPath::from_vec. (#504 by @cmyr)- A derive
Hashto theAxistype. (#527 by @jrmoulton)
- Sped up methods like
Ellipse::radiiby reworking the singular value decomposition expression. (#499 by @tomcur) Line::nearestmethod to calculate the projection of a point onto a line segment has been made more performant. (#505 by @tomcur)QuadBez::arclencalculation has been made more numerically stable (#503 by @jneem).SvgParseErrornow implementscore::error:Error. It previously implementedstd::error::Errorinstd-enabled builds. (#517 by @Bombaninha)- The behavior of open versus closed shapes when using
BezPath::extend(extending Bezier paths using an iterator overPathEl) has been clarified. (#523 by @DJMcNab) - More methods are marked
inline. (#506 by @LaurenzV, #509 by @tomcur)
The following functions are now callable from const contexts. (#510, #512, #521, #522, #524, #525, #526 by @tomcur)
Affine::{skew, then_translate, map_unit_square, as_coeffs, determinant, inverse, translation, with_translation}Point::midpointRect::{width, height, origin, size, area, is_zero_area, center, aspect_ratio_width, overlap, contains_rect, union, intersect, inscribed_rect_with_aspect_ratio, inflate, scale_from_origin, abs}Size::{max_side, min_side, area, is_zero_area, min, max, clamp, aspect_ratio_width}- In addition, the
is_finiteandis_nanmethods on the following types are nowconst:Affine,Circle,ConstPoint,CubicBez,Ellipse,Insets,Line,Point,QuadBez,Rect,RoundedRect,RoundedRectRadii,Size,Triangle,Vec2.
0.12.0 (2025-09-04)
This release has an MSRV of 1.82. It was increased to support floating point math in const functions.
- Newly public
StrokeCtxallows for reusing allocations when stroking multiple paths. (#475 by @LaurenzV) Axistype. (#476 by @PoignardAzur)Ellipse::major_radiusandEllipse::minor_radiusmethods. (#497 by @tomcur)
- The implementation of stroking is much faster. (#427 by @raphlinus)
- More
Vec2methods can now be called inconstcontexts. (#479 by @tomcur) aspect_ratioonRectandSizehas been deprecated and replaced withaspect_ratio_width. This is because the implementation ofaspect_ratioused the ratio of height to width, whereas aspect rations are otherwise always ratios of width to height. (#486 by @ErisianArchitect and @DJMcNab)- Deprecated
contained_rect_with_aspect_ratio, replaced withinscribed_rect_with_aspect_ratio, which incidentally also uses the usual definition of aspect ratio (where the old name didn't). (#486 by @DJMcNab) - Breaking change: The deprecated
offset::CubicOffsethas been removed, and replaced byoffset::offset_cubic. (#489 by @jneem) - Several methods marked
#[inline]. (#472, #480, #496 by @tomcur)
- Improved cubic to quadratic conversion handling for degenerate cubic curves with 3-4 consecutive equal control points. The approximation now correctly handles edge cases where cubics degenerate to lines or single points, matching fonttools' cu2qu behavior. (#485 by @anthrotype)
- Miter join in dashed strokes. (#490 by @gemberg)
- Breaking change:
DashIteratorhas been removed. ReplaceDashIterator::newwithdash. (#488 by @DJMcNab) - Breaking change: The previously deprecated
BezPath::flatten,Ellipse::[with_]x_rotation,{Rect, Size}::is_empty,Shape::[in]to_bez_path, andTranslateScale::as_tuplehave been removed. (#487 by @DJMcNab)
0.11.3 (2025-07-21)
This release has an MSRV of 1.65.
current_positionmethod toBezPath. (#462 by @sagudev)Fromconversions betweeneuclidandkurbotypes behind theeuclidfeature. (#463 by @sagudev)- Green's theorem moments. (#452 by @simoncozens)
- Made
Vec2::splatpublic. (#469 by @xorgy)
-
Let more methods take
Into<Point>instead ofPoint. (#466 by @sagudev)Note: this can impact type inference.
-
Inline the
Mul<PathEl>implementation forAffine. (#461 by @LaurenzV) -
Inline the
nextmethod of theToQuadsiterator. (#460 by @LaurenzV) -
Avoid calling
f64::hypot, as it calls a slow library function. (#448 by @beholdnec, #451 by @raphlinus)
- Documentation of
RoundedRectno longer incorrectly specifies the corner radii are equal. (#447 by @tomcur) - Negative dash offset by normalization. (#454 by @sagudev)
- Now using exact endpoints for
PathSeg. (#465 by @jneem)
0.11.2 (2025-04-28)
This release has an MSRV of 1.65.
Strokeis nowPartialEq,StrokeOptsis nowClone,Copy,Debug,Eq,PartialEq. (#379 by @waywardmonkeys)- Implemented
SumforVec2. (#399 by @Philipp-M) - Triangle shape. (#350 by @juliapaci, #387 by @tomcur)
- Implemented
Div<f64>andMul<f64>forInsets. (#384 by @liferooter) Vec2::turn_90andVec2::rotate_scalemethods (#409 by @raphlinus)minandmaxmethods toSize. (#412 by @nils-mathieu)INFNITYconstant toSize. (#413 by @nils-mathieu)BezPath::with_capacitymethod (#418 by @LaurenzV)Affine::scale_aboutandAffine::then_scale_about. (#429 by @xorgy)
- Reduced number of operations in
Triangle::circumscribed_circle. (#390 by @tomcur) - Numerically approximate ellipse perimeter. (#383, #407 by @tomcur)
- Always inline trivial casts, splats, and swizzles. (#428 by @xorgy)
- Documentation of
Affine::svd. (#388 by @tomcur) - Documentation of cross product. (#409 by @raphlinus)
0.11.1 (2024-09-12)
This release has an MSRV of 1.65.
From (f32, f32)forPoint. (#339 by @rsheeter)Rect::overlapsandRect::contains_rect. (#347 by @nils-mathieu)CubicBez::tangents(#288 by @raphlinus)Arc::reversed. (#367 by @waywardmonkeys)CircleSegment::inner_arcandCircleSegment::outer_arc(#368 by @waywardmonkeys)Rect::is_zero_areaandSize::is_zero_areaand deprecate theiris_emptymethods. (#370 by @waywardmonkeys)Line::reversedandLine::midpoint. (#375 by @waywardmonkeys)- Allowing construction of
Linefrom(Point, Point)and(Point, Vec2). (#376 by @waywardmonkeys)
- Moved
Self: Sizedbound fromShapeto methods. (#340 by @waywardmonkeys) - Enabled partial SVG path support in
no_stdbuilds. (#356 by @waywardmonkeys) - Deprecated
BezPath::flatten, preferflatten. (#361 by @waywardmonkeys)
- An edge case in
mindistwas fixed. (#334 by @platlas) - Allow lines in simplify input. (#343 by @raphlinus)
- Don't skip first dash in dash pattern. (#353 by @dominikh)
- Documentation for
Arc.perimeterwas corrected. (#354 by @simoncozens) - Parsing scientific notation in an SVG path was fixed. (#365 by @GabrielDertoni)
0.11.0 (2024-02-14)
This release has an MSRV of 1.65.
Note: A changelog was not kept for or before this release