NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1383 most downloaded on crates.io
A 2D curves library
Last release 4 months ago
13 May 2026
Release timing varies
gaps range from 2 weeks to 8 months
Rarely documented
notes for 8 of 45 stable releases
2 versions withdrawn
withdrawn after publishing
8 years old
47 releases · first in 2018
This release has an MSRV of 1.85.
This release has an MSRV of 1.85.
Stroke::is_finite and Stroke::is_nan. (#545 by @waywardmonkeys)Insets::min/max methods. (#548 by @xStrom)Insets from other Insets. (#549 by @xStrom)Arc now implements ParamCurve. (#378 by @waywardmonkeys)Affine::{pre,then}_skew and Affine::{pre,then}_reflect fluent composition helpers. (#563 by @waywardmonkeys)Affine::{nuclear_norm_squared,frobenius_norm_squared,spectral_norm}. (#569 by @tomcur)StrokeOpts::stable_dash_order to keep dashes at fixed path-relative positions instead of merging the first/last dash across. (#550 by @RobertBrewitz)expand_path anisotropic path expansion. (#575 by @raphlinus)RoundedRect::winding and RoundedRect::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_caps are all now const. (#536 by @xStrom, #539 and #561 by @tomcur)Ellipse::area. Note: for non-finite ellipses, this method may now return f64::INFINITY where it returned f64::NAN before. (#559 by @tomcur)Affine::pre_rotate_about calculation. (#567 by @dannymcgee)dash_offset increases. (#585 by @Keavon)Full Changelog: v0.13.0...v0.13.1
One column per quarter.
This release has an MSRV of 1.85.
This release has an MSRV of 1.85.
BezPath::into_elements method allows getting all path elements as a Vec without allocating, consuming the original path. This is the counterpart of BezPath::from_vec. (#504 by @cmyr)Hash to the Axis type. (#527 by @jrmoulton)Ellipse::radii by reworking the singular value decomposition expression. (#499 by @tomcur)Line::nearest method to calculate the projection of a point onto a line segment has been made more performant. (#505 by @tomcur)QuadBez::arclen calculation has been made more numerically stable (#503 by @jneem).SvgParseError now implements core::error:Error. It previously implemented std::error::Error in std-enabled builds. (#517 by @Bombaninha)BezPath::extend (extending Bezier paths using an iterator over PathEl) has been clarified. #523 by @DJMcNab)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}is_finite and is_nan methods on the following types are now const: Affine, Circle, ConstPoint, CubicBez, Ellipse, Insets, Line, Point, QuadBez, Rect, RoundedRect, RoundedRectRadii, Size, Triangle, Vec2.Full Changelog: v0.12.0...v0.13.0
Breaking change: The deprecated offset::CubicOffset has been removed, and replaced by offset::offset_cubic . ( #489 by @jneem )
This release has an MSRV of 1.82. It was increased to support floating point math in const functions.
StrokeCtx allows for reusing allocations when stroking multiple paths. (#475 by @LaurenzV)Axis type. (#476 by @PoignardAzur)Ellipse::major_radius and Ellipse::minor_radius methods. (#497 by @tomcur)Vec2 methods can now be called in const contexts. (#479 by @tomcur)aspect_ratio on Rect and Size has been deprecated and replaced with aspect_ratio_width.aspect_ratio used the ratio of height to width, whereascontained_rect_with_aspect_ratio, replaced with inscribed_rect_with_aspect_ratio, whichoffset::CubicOffset has been removed, and replaced byoffset::offset_cubic. (#489 by @jneem)#[inline]. (#472, #480, #496 by @tomcur)DashIterator has been removed. Replace DashIterator::new with dash. (#488 by @DJMcNab)BezPath::flatten, Ellipse::[with_]x_rotation, {Rect, Size}::is_empty, Shape::[in]to_bez_path,TranslateScale::as_tuple have been removed. (#487 by @DJMcNab)Full Changelog: v0.11.3...v0.12.0
This release has an MSRV of 1.65.
This release has an MSRV of 1.65.
current_position method to BezPath. (#462 by @sagudev)From conversions between euclid and kurbo types behind the euclid feature. (#463 by @sagudev)Vec2::splat public. (#469 by @xorgy)Let more methods take Into<Point> instead of Point. (#466 by @sagudev)
Note: this can impact type inference.
Inline the Mul<PathEl> implementation for Affine. (#461 by @LaurenzV)
Inline the next method of the ToQuads iterator. (#460 by @LaurenzV)
Avoid calling f64::hypot, as it calls a slow library function. (#448 by @beholdnec, #451 by @raphlinus)
RoundedRect no longer incorrectly specifies the corner radii are equal. (#447 by @tomcur)PathSeg. (#465 by @jneem)Full Changelog: v0.11.2...v0.11.3
This release has an [MSRV][] of 1.65.
current_position method to BezPath. ([#462][] by [@sagudev][])From conversions between euclid and kurbo types behind the euclid feature. ([#463][] by [@sagudev][])Vec2::splat public. ([#469][] by [@xorgy][])Let more methods take Into<Point> instead of Point. ([#466][] by [@sagudev][])
Note: this can impact type inference.
Inline the Mul<PathEl> implementation for Affine. ([#461][] by [@LaurenzV][])
Inline the next method of the ToQuads iterator. ([#460][] by [@LaurenzV][])
Avoid calling f64::hypot, as it calls a slow library function. ([#448][] by [@beholdnec][], [#451][] by [@raphlinus][])
RoundedRect no longer incorrectly specifies the corner radii are equal. ([#447][] by [@tomcur][])PathSeg. ([#465][] by [@jneem])This release has an MSRV of 1.65.
This release has an MSRV of 1.65.
Stroke is now PartialEq, StrokeOpts is now Clone, Copy, Debug, Eq, PartialEq. (#379 by @waywardmonkeys)Sum for Vec2. (#399 by @Philipp-M)Div<f64> and Mul<f64> for Insets. (#384 by @liferooter)Vec2::turn_90 and Vec2::rotate_scale methods (#409 by @raphlinus)min and max methods to Size. (#412 by @nils-mathieu)INFNITY constant to Size. (#413 by @nils-mathieu)BezPath::with_capacity method (#418 by @LaurenzV)Affine::scale_about and Affine::then_scale_about. (#429 by @xorgy)Triangle::circumscribed_circle. (#390 by @tomcur)Affine::svd. (#388 by @tomcur)Full Changelog: v0.11.1...v0.11.2
This release has an [MSRV][] of 1.65.
Stroke is now PartialEq, StrokeOpts is now Clone, Copy, Debug, Eq, PartialEq. ([#379][] by [@waywardmonkeys][])Sum for Vec2. ([#399][] by [@Philipp-M][])Div<f64> and Mul<f64> for Insets. ([#384][] by [@liferooter][])Vec2::turn_90 and Vec2::rotate_scale methods ([#409][] by [@raphlinus][])min and max methods to Size. ([#412][] by [@nils-mathieu][])INFNITY constant to Size. ([#413][] by [@nils-mathieu][])BezPath::with_capacity method ([#418][] by [@LaurenzV][])Affine::scale_about and Affine::then_scale_about. ([#429][] by [@xorgy][])Triangle::circumscribed_circle. ([#390][] by [@tomcur][])Affine::svd. ([#388][] by [@tomcur][])Add Rect::is_zero_area and Size::is_zero_area and deprecate their is_empty methods. ( #370 by @waywardmonkeys )
This release has an MSRV of 1.65.
From (f32, f32) for Point. (#339 by @rsheeter)Rect::overlaps and Rect::contains_rect. (#347 by @nils-mathieu)CubicBez::tangents (#288 by @raphlinus)Arc::reversed. (#367 by @waywardmonkeys)CircleSegment::inner_arc and CircleSegment::outer_arc (#368 by @waywardmonkeys)Rect::is_zero_area and Size::is_zero_area and deprecate their is_empty methods. (#370 by @waywardmonkeys)Line::reversed and Line::midpoint. (#375 by @waywardmonkeys)Line from (Point, Point) and (Point, Vec2). (#376 by @waywardmonkeys)Self: Sized bound from Shape to methods. (#340 by @waywardmonkeys)no_std builds. (#356 by @waywardmonkeys)BezPath::flatten, prefer flatten. (#361 by @waywardmonkeys)mindist was fixed. (#334 by @platlas)Arc.perimeter was corrected. (#354 by @simoncozens)Full Changelog: v0.11.0...v0.11.1
This release has an [MSRV][] of 1.65.
From (f32, f32) for Point. ([#339][] by [@rsheeter][])Rect::overlaps and Rect::contains_rect. ([#347][] by [@nils-mathieu][])CubicBez::tangents ([#288][] by [@raphlinus][])Arc::reversed. ([#367][] by [@waywardmonkeys][])CircleSegment::inner_arc and CircleSegment::outer_arc ([#368][] by [@waywardmonkeys][])Rect::is_zero_area and Size::is_zero_area and deprecate their is_empty methods. ([#370][] by [@waywardmonkeys][])Line::reversed and Line::midpoint. ([#375][] by [@waywardmonkeys][])Line from (Point, Point) and (Point, Vec2). ([#376][] by [@waywardmonkeys][])Self: Sized bound from Shape to methods. ([#340][] by [@waywardmonkeys][])no_std builds. ([#356][] by [@waywardmonkeys][])BezPath::flatten, prefer flatten. ([#361][] by [@waywardmonkeys][])mindist was fixed. ([#334][] by [@platlas][])Arc.perimeter was corrected. ([#354][] by [@simoncozens][])This release has an [MSRV][] of 1.65.
This release has an MSRV of 1.65.
Note: A changelog was not kept for or before this release
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This release has an MSRV of 1.85. It is the first release since polycool was transferred to the Linebender organization.
This release has an MSRV of 1.85.
It is the first release since polycool was transferred to the Linebender organization.
DynPoly::deriv (#502 by @jneem)Note: A changelog was not kept before this release
Full Changelog: v0.12.0...polycool-v0.4.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →