pin-project-internal
Implementation detail of the `pin-project` crate.
1.1.13
548M downloads/mo
#182 most downloaded on crates.io
taiki-e/pin-project
What this package is like to depend on
Last release 3 months ago
13 May 2026
Release timing varies
gaps range from 8 days to 12 months
Nearly every release is documented
notes for 58 of 58 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
71 releases · first in 2019
3 releases in the last 12 months
see the full history below
Release timeline
71 releases · Aug 2019 to May 2026Releases
latest 60 of 71-
1.1.1313 May 2026 -
1.1.1205 May 2026 -
1.1.1127 Feb 2026 -
1.1.1003 Mar 2025 -
1.1.903 Feb 2025 -
1.1.806 Jan 2025Release notes
Open source →- Suppress
unnameable_types,clippy::absolute_paths,clippy::min_ident_chars,clippy::pub_with_shorthand,clippy::single_call_fn,clippy::single_char_lifetime_nameslints in generated code.
Release notes
Open source →- Suppress
unnameable_types,clippy::absolute_paths,clippy::min_ident_chars,clippy::pub_with_shorthand,clippy::single_call_fn,clippy::single_char_lifetime_nameslints in generated code.
- Suppress
-
1.1.724 Oct 2024Release notes
Open source →- Work around an issue on negative_impls that allows unsound overlapping
Unpinimplementations. (#357)
Release notes
Open source →- Work around an issue on negative_impls that allows unsound overlapping
Unpinimplementations. (#357)
- Work around an issue on negative_impls that allows unsound overlapping
-
1.1.605 Oct 2024Release notes
Open source →-
Suppress
clippy::needless_lifetimeslint in generated code. -
Disable
derivefeature ofsyndependency.
Release notes
Open source →-
Suppress
clippy::needless_lifetimeslint in generated code. -
Disable
derivefeature ofsyndependency.
-
-
1.1.505 Mar 2024 -
1.1.425 Jan 2024Release notes
Open source →- Suppress
clippy::missing_docs_in_private_itemsandclippy::missing_inline_in_public_itemslints in generated code. (#356, thanks @daxpedda)
- Suppress
-
1.1.306 Aug 2023Release notes
Open source →- Hide documentation of the
Unpinimplementation for!Unpinoption to work around rustdoc issue. (#355, thanks @matheus-consoli)
- Hide documentation of the
-
1.1.202 Jul 2023 -
1.1.129 Jun 2023 -
1.1.013 May 2023 -
1.0.1215 Aug 2022 -
1.0.1102 Jul 2022 -
1.0.1031 Dec 2021Release notes
Open source →- Revert the increase of the minimal version of
synthat was done in 1.0.9.
- Revert the increase of the minimal version of
-
1.0.926 Dec 2021 -
1.0.821 Jul 2021 -
1.0.716 Apr 2021 -
1.0.625 Mar 2021 -
1.0.503 Feb 2021 -
1.0.409 Jan 2021 -
1.0.305 Jan 2021 -
1.0.218 Nov 2020 -
1.0.115 Oct 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
1.0.013 Oct 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Remove deprecated
#[project],#[project_ref], and#[project_replace]attributes.Name the projected type by passing an argument with the same name as the method to the
#[pin_project]attribute instead:- #[pin_project] + #[pin_project(project = EnumProj)] enum Enum<T> { Variant(#[pin] T), } - #[project] fn func<T>(x: Pin<&mut Enum<T>>) { - #[project] match x.project() { - Enum::Variant(_) => { /* ... */ } + EnumProj::Variant(_) => { /* ... */ } } } -
Remove deprecated
Replaceargument from#[pin_project]attribute. Useproject_replaceargument instead. -
Raise the minimum supported Rust version of this crate from Rust 1.34 to Rust 1.37.
-
Suppress
explicit_outlives_requirements,box_pointers,clippy::large_enum_variant,clippy::pattern_type_mismatch,clippy::implicit_return, andclippy::redundant_pub_cratelints in generated code. (#276, #277, #284) -
Diagnostic improvements.
Changes since the 1.0.0-alpha.1 release:
-
Update minimal version of
synto 1.0.44.
-
-
1.0.0-alpha.122 Sep 2020 pre-releaseRelease notes
Open source →-
Remove deprecated
#[project],#[project_ref], and#[project_replace]attributes.Name the projected type by passing an argument with the same name as the method to the
#[pin_project]attribute instead:- #[pin_project] + #[pin_project(project = EnumProj)] enum Enum<T> { Variant(#[pin] T), } - #[project] fn func<T>(x: Pin<&mut Enum<T>>) { - #[project] match x.project() { - Enum::Variant(_) => { /* ... */ } + EnumProj::Variant(_) => { /* ... */ } } } -
Remove deprecated
Replaceargument from#[pin_project]attribute. Useproject_replaceargument instead. -
Suppress
explicit_outlives_requirements,box_pointers,clippy::large_enum_variant,clippy::pattern_type_mismatch, andclippy::implicit_returnlints in generated code. (#276, #277) -
Diagnostic improvements.
See also tracking issue for 1.0 release.
-
-
0.4.3002 Jul 2022 -
0.4.2926 Dec 2021 -
0.4.2828 Mar 2021Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Fix
unused_must_usewarning on unused borrows, which will be added to rustc in the future. See #322 for more details.(Note: 1.0 does not have this problem.)
-
-
0.4.2711 Oct 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
- Update minimal version of
synto 1.0.44.
- Update minimal version of
-
0.4.2604 Oct 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.2501 Oct 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Suppress
drop_boundslint, which will be added to rustc in the future. See #272 for more details.(Note: 1.0.0-alpha.1 already contains this change.)
-
-
0.4.2426 Sep 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
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.
-
-
0.4.2327 Jul 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.2214 Jun 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
- Documentation improvements.
-
0.4.2113 Jun 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Consider naming the projected type by passing an argument with the same name as the method to the
#[pin_project]attribute instead.#[pin_project(project = EnumProj)] enum Enum<T> { Variant(#[pin] T), } fn func<T>(x: Pin<&mut Enum<T>>) { match x.project() { EnumProj::Variant(y) => { let _: Pin<&mut T> = y; } } }See #225 for more details.
-
Diagnostic improvements.
-
-
0.4.2006 Jun 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
You can now use
project_replaceargument without Replace argument. This used to require you to specify both.- #[pin_project(Replace, project_replace = EnumProjOwn)] + #[pin_project(project_replace = EnumProjOwn)] enum Enum<T> { Variant(#[pin] T) } -
Make
project_replaceargument an alias forReplaceargument so that it can be used without a value.#[pin_project(project_replace)] enum Enum<T> { Variant(#[pin] T) }The
Replaceargument will be deprecated in the future.
-
-
0.4.1904 Jun 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.1804 Jun 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Support
Selfin more syntax positions inside#[pinned_drop]impl. -
Documentation improvements.
-
Diagnostic improvements.
-
-
0.4.1718 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Support naming the projection types.
By passing an argument with the same name as the method to the attribute, you can name the projection type returned from the method:
#[pin_project(project = EnumProj)] enum Enum<T> { Variant(#[pin] T), } fn func<T>(x: Pin<&mut Enum<T>>) { match x.project() { EnumProj::Variant(y) => { let _: Pin<&mut T> = y; } } }
-
-
0.4.1611 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.1510 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.1409 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Add
!Unpinoption to#[pin_project]attribute for guarantee the type is!Unpin.#[pin_project(!Unpin)] struct Struct<T, U> { field: T, }This is equivalent to use
#[pin]attribute forPhantomPinnedfield.#[pin_project] struct Struct<T, U> { field: T, #[pin] // Note that using `PhantomPinned` without `#[pin]` attribute has no effect. _pin: PhantomPinned, }Note: This raises the minimum supported Rust version of this crate from Rust 1.33 to Rust 1.34.
-
Fix an issue where duplicate
#[project]attributes were ignored. -
Hide generated items from --document-private-items. See #211 for details.
-
Documentation improvements.
-
-
0.4.1307 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.1207 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
- A release to avoid a regression in 0.4.11. No code changes from 0.4.10.
-
0.4.1107 May 2020 -
0.4.1004 May 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
Add
project_replacemethod and#[project_replace]attribute.project_replacemethod is optional and can be enabled by passing theReplaceargument to#[pin_project]attribute. See the documentation for more details. -
Support
Selfandselfin more syntax positions inside#[pinned_drop]impl. -
Hide all generated items except for projected types from calling code. See #192 for details.
-
-
0.4.914 Apr 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.827 Jan 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.720 Jan 2020Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.620 Nov 2019Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.521 Oct 2019Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.417 Oct 2019Release notes
Open source →Note: This release has been yanked because it failed to compile with syn 1.0.84 and later.
-
0.4.314 Oct 2019 -
0.4.229 Sep 2019 -
0.4.126 Sep 2019 -
0.4.025 Sep 2019Release notes
Open source →Note: This release has been yanked. See #148 for details.
-
Pin projection has become a safe operation. In the absence of other unsafe code that you write, it is impossible to cause undefined behavior.
-
#[unsafe_project]attribute has been replaced with#[pin_project]attribute. (#18, #33) -
The
Unpinargument has been removed - anUnpinimpl is now generated by default. -
Drop impls must be specified with
#[pinned_drop]instead of via a normalDropimpl. (#18, #33, #86) -
#[pin_project]can now be used for public type with private field types. -
Remove "project_attr" feature and always enable
#[project]attribute.
Changes since the 0.4.0-beta.1 release:
-
-
0.4.0-beta.122 Sep 2019 pre-release