NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #52 most downloaded on crates.io
A lightweight version of pin-project written with declarative macros.
Last release 7 months ago
27 Feb 2026
Release timing varies
gaps range from 3 weeks to 1.2 years
Nearly every release is documented
notes for 14 of 14 stable releases
17 versions withdrawn
withdrawn after publishing
7 years old
31 releases · first in 2019
Enable release immutability .
Suppress clippy::absolute_paths , clippy::min_ident_chars , and clippy::single_char_lifetime_names lints in generated code.
clippy::absolute_paths, clippy::min_ident_chars, and clippy::single_char_lifetime_names lints in generated code.One column per quarter.
Work around an issue on negative_impls that allows unsound overlapping Unpin implementations.
Unpin implementations. (#84)Document PinnedDrop . ( #83 , thanks @jbr )
Allow attributes in impl and method of PinnedDrop implementation.
PinnedDrop implementation.Work around an issue where the projected types/methods appear in the documentation as if they were part of the public API if the visibility is not cor
Add support for #[project(!Unpin)] . This is equivalent to pin-project's !Unpin option. ( #76 , thanks @matheus-consoli )
#[project(!Unpin)]. This is equivalent to pin-project's !Unpin option. (#76, thanks @matheus-consoli)Inline project methods. ( #74 , thanks @EFanZh )
Improve compile time of pin_project! calls. ( #71 , thanks @nnethercote )
pin_project! calls. (#71, thanks @nnethercote)Fix handling of trailing commas in PinnedDrop impl. ( #64 , thanks @Michael-J-Ward )
PinnedDrop impl. (#64, thanks @Michael-J-Ward)Support custom Drop implementation. See #25 for details.
Support item attributes in any order. (#57, thanks @SabrinaJewson)
Prepare for removal of `safe_packed_borrows` lint. See #55 for details.
safe_packed_borrows lint. See #55 for details.Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked.** See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
pin_project! macro now supports enums.
To use pin_project! on enums, you need to name the projection type returned from the method.
use pin_project_lite::pin_project;
use std::pin::Pin;
pin_project! {
#[project = EnumProj]
enum Enum<T, U> {
Variant { #[pin] pinned: T, unpinned: U },
}
}
impl<T, U> Enum<T, U> {
fn method(self: Pin<&mut Self>) {
match self.project() {
EnumProj::Variant { pinned, unpinned } => {
let _: Pin<&mut T> = pinned;
let _: &mut U = unpinned;
}
}
}
}
Support naming the projection types.
By passing an attribute with the same name as the method, you can name the projection type returned from the method:
use pin_project_lite::pin_project;
use std::pin::Pin;
pin_project! {
#[project = StructProj]
struct Struct<T> {
#[pin]
field: T,
}
}
fn func<T>(x: Pin<&mut Struct<T>>) {
let StructProj { field } = x.project();
let _: Pin<&mut T> = field;
}
Prepare for removal of `safe_packed_borrows` lint. See #55 for details.
safe_packed_borrows lint. See #55 for details.Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Suppress clippy::redundant_pub_crate lint in generated code.
Documentation improvements.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
drop_bounds lint, which will be added to rustc in the future. See taiki-e/pin-project#272 for more details.Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Fix compatibility of generated code with forbid(future_incompatible).
Note: This does not guarantee compatibility with forbid(future_incompatible) in the future.
If rustc adds a new lint, we may not be able to keep this.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Fix lifetime inference error when an associated type is used in fields.
Suppress clippy::used_underscore_binding lint in generated code.
Documentation improvements.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Documentation improvements.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Note: This release has been yanked. See #55 for details.
Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →