NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2254 most downloaded on crates.io
Delaunay triangulations for the rust ecosystem
Last release 6 months ago
24 Mar 2026
Release timing varies
gaps range from 8 days to 7 months
Nearly every release is documented
notes for 38 of 40 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
40 releases · first in 2016
chore: Release spade version 2.15.1
chore: Release spade version 2.15.1
RefinementParameters::keep_constraint_edges was used (#134)chore: Release spade version 2.15.0
One column per quarter.
ConstrainedDelaunayTriangulation::try_bulk_load_cdt for loading CDTs without panicking
if any constraints intersect (#137)ConstrainedDelaunayTriangulation::bulk_load_cdt does load all vertices in order by default ("stable").ConstrainedDelaunayTriangulation::bulk_load_cdt_stable is deprecated. Use ...::bulk_load_cdt instead which
behaves exactly the same.ConstrainedDelaunayTriangulation::bulk_load_cdt. It is nearly as fast
as its unstable alternative, Triangulation::bulk_load.HierarchyHintGenerator does not load the hierarchy sequentially but uses
bulk loading. This should speed up creating such triangulations.chore: Release spade version 2.14.0
chore: Release spade version 2.14.0
Nothing published for this version
(cargo-release) spade version 2.13.0
(cargo-release) spade version 2.13.0
Fixes #113. This could lead to rare crashes when calling ConstrainedDelaunayTriangulation::add_constraint_and_split
ConstrainedDelaunayTriangulation::add_constraint_and_split(cargo-release) spade version 2.12.0
(cargo-release) spade version 2.12.0
ConstrainedDelaunayTriangulation::add_constraint_and_split. This could
only happen in rare situations if a newly inserted split point would lie very close to other vertices or edges of the
triangulation. See #111Triangulation::locate, Triangulation::locate_with_hint,
Triangulation::locate_vertex and Triangulation::locate_and_remove will all panic if called with a position with a
NAN coordinate. The previous behavior was inconsistent - the methods would either crash or return a nonsensical
result.Added ConstrainedDelaunayTriangulation::remove_constraint_edge(edge)
ConstrainedDelaunayTriangulation::remove_constraint_edge(edge)ConstrainedDelaunayTriangulation::add_constraint_and_split. See #109Added basic mint support via the mint feature
mint support via the mint featureTriangulation::get_vertex(FixedVertexHandle) (See #106)Added ConstrainedDelaunayTriangulation::try_add_constraint
ConstrainedDelaunayTriangulation::try_add_constraintConstrainedDelaunayTriangulation::add_constraint_and_splitAdded LineIntersectionIterator and Intersection
LineIntersectionIterator and IntersectionCdt::get_conflicting_edges_between_vertices and Cdt::get_conflicting_edges_between_pointsImplements ConstrainedDelaunayTriangulation::bulk_load_cdt
ConstrainedDelaunayTriangulation::bulk_load_cdtConstrainedDelaunayTriangulation::bulk_load_cdt_stable(cargo-release) spade version 2.6.0
(cargo-release) spade version 2.6.0
DelaunayTriangulation::bulk_load_stable (See #77)FixedVertexHandle::from_index(usize)(cargo-release) spade version 2.5.1
(cargo-release) spade version 2.5.1
(cargo-release) spade version 2.5.0
(cargo-release) spade version 2.5.0
NaturalNeighbor for more on this!PointProjection::reversed() - the method would return a projection that gives sometimes incorrect results.(cargo-release) spade version 2.4.1
(cargo-release) spade version 2.4.1
(cargo-release) spade version 2.4.0
(cargo-release) spade version 2.4.0
ConstrainedDelaunayTriangulation::refine, along with RefinementParameters to
modify the refinement behavior.ConstrainedDelaunayTriangulation::add_constraint_edges for simpler creation of strips and loops of
connected constraint edges.impl From<DelaunayTriangulation<...>> for ConstrainedDelaunayTriangulation<...> for converting regular
triangulations into CDTs.Fixes compilation issues when using serde together with --no-default-features
serde together with --no-default-features (#95)Adds no_std support (when using default-features = false, #92)
no_std support (when using default-features = false, #92)Specializes nth and nth_back for any vertex, face and edge iterator
nth and nth_back for any vertex, face and edge iteratoroptional dependency (#91)robust crate to 1.1.0 (#90)Added DirectedEdgeHandle::center and UndirectedEdgeHandle::center
DirectedEdgeHandle::center and UndirectedEdgeHandle::centerUndirectedEdgeHandle::nearest_pointUndirectedEdgeHandle::is_constraint_edge and DirectedEdgeHandle::is_constraint_edge (only implemented for
edge handles of a CDT)nearest_neighbor hintingAdded crate::FloatTriangulations for additional methods of triangulations over f32 or f64
crate::FloatTriangulations for additional methods of triangulations over f32 or f64FloatTriangulation::get_edges_in_rectangleFloatTriangulation::get_edges_in_circleFloatTriangulation::get_vertices_in_rectangleFloatTriangulation::get_vertices_in_circleindex function for any fixed and dynamic handle, returning the internal index of the element.DelaunayTriangulation::Clone implementationDirectedEdgeHandle::positionsTriangulation::clearConstrainedDelaunayTriangulation::can_add_constraint_edge accidentally returned the wrong
result (true when it should have returned false and vice versa) #75This release is focussed on API refinement, performance improvements and usability improvements.
This release is focussed on API refinement, performance improvements and usability improvements.
Many features of Spade 1 showed too little benefit to legitimize keeping them. Spade 2.0 attempts to slim down the API surface to a few important functions and types and leaves out the more complicated bits to make it more simple to use.
f64 and f32 can be used as scalar types.cgmath and nalgebra crate to slim down the crate dependencies.PointN. Using Spade now requires to convert any position into Spade::Point2.rstar crate)SimpleCircle, SimpleEdge, SimpleTriangle)FloatKernel).HierarchyHintGenerator
instead.DelaunayTriangulation)HierarchyHintGenerator, a hint generator with small performance and memory overhead which is optimized
for uniformly distributed data.handles module for more information):
UndirectedEdgeHandle to refer to undirected edges of the triangulationFaceHandle is now parameterized to denote if it refers to an inner face or to the single outer facehandles module)reversedDelaunayTriangulation and CDT now allow to also annotate undirected edges with arbitrary dataTriangulation::convex_hull which allows to directly iterate over the triangulation's convex hullTriangulation::bulk_load for efficient bulk creation of triangulations.HierarchyHintGenerator should outperform the r-tree based hint generator consistently for
uniformly distributed data sets (2x - 3x times faster)LastUsedVertexHintGenerator and its predecessor DelaunayWalkLocate are still comparable.Triangulation::bulk_load will be more efficient for creating triangulations from a given set of vertices
compared to inserting them incrementally.o_next / o_prev function to next / prev.sym to revKeep in mind that not all features have been preserved before attempting to upgrade. Other than that, upgrading should be mostly consist of renaming:
FloatDelaunayTriangulation and FloatCdt have been replaced by DelaunayTriangulation
and ConstrainedDelaunayTriangulationIntDelaunayTriangulation is not supported anymore. Use f64 or f32 as scalar type instead if possible.DelaunayWalkLocate has been renamed to LastUsedVertexHintGeneratorDelaunayTreeLocate has been replaced by HierarchyHintGeneratorRemoving elements from an rtree could leave the tree in an inconsistent state (#55). This made some nearest neighbor queries return incorrect results.
Nothing published for this version
Bumped compatible nalgebra version to 0.18
Merge #41: Use smallvec in barycentric interpolation
Bumped compatible num version to >=0.1, <=0.2.*. This may be a breaking change due to the way cargo resolves dependencies. An upgrade to num 0.2 is re…
SimpleEdge, SimpleCircle, BoundingRect now derive Clone, Copy, PartialEq, Eq, PartialOrd, Ord
and HashCdtEdge is now public - the type cannot be used, but may be necessary for method signatures containing CDTs.derives for various other types that are applicable.>=0.1, <=0.2.*. This may be a breaking change due to the way cargo resolves
dependencies. An upgrade to num 0.2 is recommended.nearest_neighbor sometimes incorrectly returned None
nearest_neighbor sometimes incorrectly returned NoneAdded RTree::nearest_neighbor_iterator
RTree::nearest_neighbor_iteratorAdded cargo feature 'serde_serialize', rtrees, triangulations and primitives now support serialization with serde!
RTrees implement DebugBoundingRect::from_pointsBoundingRect now implements SpatialObjectspade::DelaunayTriangulation::lookup is deprecated, use locate_vertex instead
spade::delaunay::DelaunayTriangulation::lookup is deprecated, use locate_vertex insteadspade::delaunay::DelaunayTriangulation::lookup_and_remove is deprecated, use locate_and_remove insteadcgmath and nalgebra versions.Clone.locate and nearest_neighbor now also work with degenerate triangulationsDelaunayTriangulation now implements Cloneget_edge_from_neighbors to get an existing edge from its two adjacent points.SimpleCircle distance calculation for more than 2 dimensions.…and nalgebra Points), this must be considered a breaking change.
cgmath and nalgebra versions. Unfortunately, due to the way Cargo handles "external
dependencies" (thus, dependencies whose types are part of spade's public API like cgmath and nalgebra Points),
this must be considered a breaking change.FloatKernel now works happily with f32 coordinates. They will be cast to double precision before the kernel
evaluates any query, thus, no performance gain results from this. Only the space requirements will differ.spade::RTreeDelaunayLocate is deprecated, use spade::DelaunayTreeLocate instead
spade::delaunay::RTreeDelaunayLocate<T> is deprecated, use spade::delaunay::DelaunayTreeLocate<T> insteadspade::delaunay::TriangulationWalkLocate<T> is deprecated, use spade::delaunay::DelaunayWalkLocate instead (
without any type argument)SmallVec from the smallvec crate for better performance.spade::delaunay::DelaunayWalkLocate. The struct will now keep track of the last query made and use it
for the next query. A query can be an interpolation, lookup, locate or nearest neighbor query, insertion will also
update the hint to the inserted vertex. This means: Subsequent queries that are close to each other will run in O(1)
without the need of giving an explicit hint. This behaviour was only implemented for insertion until now.spade::delaunay::DelaunayTriangulation::nearest_neighborspade::delaunay::DelaunayTriangulation::locate_vertexspade::primitives::SimpleEdge::length2A lot has changed for the 1.0. release, only larger changes are shown.
A lot has changed for the 1.0. release, only larger changes are shown.
VectorN renamed to PointN0.11.*Point2, Point3 ... from cgmath and nalgebra crates do implement VectorNVector2, Vector3 ... from cgmath and nalgebra crates do not implement VectorNspade::kernelsspade::delaunayspade::rtree::RTreeDelaunayTriangulation::lookup_in_triangulation to locateDelaunayTriangulation::handle(..) to vertex(..)DelaunayTriangulation::barycentric_interpolation(..)DelaunayLookupStructure)locate and lookup can now be used with a hint (see {insert|locate}_with_hint)spade::delaunay::{Float|Int}Triangulation and quick creation methods with_tree_lookup
and with_walk_lookupEdgeHandle and type FixedEdgeHandle.FaceHandle and type FixedFaceHandle.DelaunayTriangulation::edge(..) and ::face(..)DelaunayTriangulation::infinite_face()DelaunayTriangulation::is_degenerate()DelaunayTriangulation::num_{edges|triangles|faces}()CCWIterator and ONextIterator now both implement DoubleEndedIteratorBox<Point2<_>>) to simplify type signatures.DelaunayTriangulation::lookup_in_circle(..) and lookup_in_rect(..). These methods will likely be added
again in a later release.VectorN trait trimmed down, now contains only a small set of functions.
VectorN trait trimmed down, now contains only a small set of functions.[S; 2], [S; 3] and [S; 4] now implement VectorN and TwoDimensional or ThreeDimensional when appropriate.
This change allows to insert fixed size arrays that encode positions directly into RTree or DelaunayInterpolation.rand and crate noiseFunction signatures of nn_interpolation_c1_* slightly modified.
nn_interpolation_c1_* slightly modified.estimate_normal and estimate_gradientDelaunayTriangulation: estimate_normal, estimate_normals, estimate_gradient, estimate_gradients
DelaunayTriangulation: estimate_normal, estimate_normals, estimate_gradient, estimate_gradientsDelaunayTriangulation::nn_interpolation_c1_sibsonDelaunayTriangulation::nn_interpolation_c1_farinThreeDimensionalRTree and DelaunayTriangulation have now an additional parameter, B.
This allows to insert pointer like objects (that is, an object B: Borrow<T>) into the tree.Documentaion to all functions and types intended for public use
RTree::lookup_mut(..)RTree::contains(..)DelaunayTriangulation::handle_mut(..)DelaunayTriangulation::lookup_mut(..)DelaunayKernel::point_on_edge(..)SimpleTriangle::nearest_point_on_edge(..)TwoDimensional, HasPosition2DSimpleEdge::point_on_edge(..)SimpleTriangle::is_ordered_ccw(..)DelaunayTriangulation,
even though FloatKernel was used.[2.15.1]: https://github.com/Stoeoef/spade/compare/v2.15.0...v2.15.1
Initial commit
Your coding agent can read these notes before it upgrades. Set up the MCP server →