# Changelog
All notable changes to this crate will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.6] - 2026-05-16
### Changed
- Bump `link-section` dependency to 0.17.0.
- MSRV bumped to 1.85.0 (if `priority` feature is enabled), otherwise remains at
1.60.0.
- To restore MSRV to 1.60.0, use `ctor = { version = "1.0.6", default-features
= false, features = ["proc_macro", "std"] }` in your Cargo.toml.
### Fixed
- `#[ctor]` requires significantly less macro recursion.
## [1.0.5] - 2026-05-11
### Changed
- Repair MSRV breakage for WASM targets.
## [1.0.4] - 2026-05-08
### Added
- Support for win7, uwp and other windows targets
- Support for UEFI targets (`.init_array` matching gnu-efi)
- Fallback to `.init_array` for unsupported targets (with a warning)
### Changed
- `target_vendor = "pc"` is now `target_os = "windows"`. This should be a
strictly increasing set of support for windows targets.
## [1.0.3] - 2026-05-07
### Fixed
- A `default` priority value is now supported and is the default. This is
equivalent to a priority of 500 on most platforms. The previous `priority`
default of 0 was unsafe for C library access on some platforms.
- The `early` priority value is now equivalent to a priority of 101 on most platforms.
## [1.0.2] - 2026-05-06
### Changed
- Bump `link-section` dependency to 0.15.0.
- Use `const` rather than `static` items for collected constructors on macOS.
- Allow various forms of `&'static` for `#[ctor]` statics which desugar to
`&'static Static`.
- Static items delegate `Display` directly as well.
- Support for multiple `#[ctor]` items in a single `#[ctor]` block:
```rust
#[ctor]
static CTOR: &[fn()] = const {
}
```
## [1.0.1] - 2026-05-04
### Changed
- `wasm32-unknown-unknown` would run ctor items on each call of an exported
function.
## [1.0.0] - 2026-05-03
### Changed
- Stabilized (yay!). Identical to 0.13.1. Thanks to all the contributors who
helped along the way! Please file any upgrade issues in
<https://github.com/mmastrac/linktime/issues>.
- For those upgrading from earlier versions, the major changes for you to note
are:
- `dtor` was split into the `dtor` crate. You'll need to add it to your
dependencies like so:
```toml
[dependencies]
dtor = "1.0.0" # or later
```
- `#[ctor(unsafe)]` is now required for `#[ctor]` items. If you are building a
binary, you can use `RUSTFLAGS="--cfg linktime_no_fail_on_missing_unsafe"`
(or alternatively, specify this in your `config.toml` file) to bypass the
error.
- For those re-exporting `ctor` from their own crates: the
`ctor::declarative::ctor!` macro should be preferred over
`#[ctor(crate_path = ...)]`. The latter form will continue to work, but
the declarative macro is far more stable for most use cases. See
<https://docs.rs/ctor/latest/ctor/declarative/macro.ctor.html> for more
details.
## [0.13.1] - 2026-05-02
### Changed
- Crate examples were reorganized.
### Fixed
- Documentation fixes (`--cfg` flags were incorrect).
- Incorrect crate feature in docs.
## [0.13.0] - 2026-05-02
### Changed
- `#[ctor(priority = naked)]` is now `#[ctor(naked)]`.
- `unsafe` is now required for `#[ctor]` items and the
`no_warn_on_missing_unsafe` feature is gone.
- `RUSTFLAGS="--cfg linktime_no_fail_on_missing_unsafe"` can bypass the error.
- `used_linker` feature moved to `--cfg linktime_used_linker` flag.
### Added
- Re-added link section option for body of `#[ctor]` items (supported for Linux/Android/FreeBSD/Apple).
## [0.12.0] - 2026-04-30
### Added
- Support for `#[ctor]` on `impl` items. To be valid, the `fn` must have no
`self` parameter and must not access any generic parameters from the outer
item.
- Added `life before main` documentation to all crates.
- `early` and `late` priority values are now supported on all platforms.
### Removed
- Deprecated `dtor` feature and crate dependency from `ctor` crate (use the
`dtor` crate directly).
### Fixed
- AIX uses "standard" priority values from 0 to 999, early and late (mapped to
80000000 to 80000999).
### Changed
- If the `priority` feature is enabled, `ctor` priority sorting is now stable
and consistent across platforms: `early`/`0`/`unspecified`, then `1 <= N <
1000`, then `late`.
- If a `link_section` or `export_name_prefix` is specified, a `priority` value
must not be specified (now a compiler error).
- Migrated to using the `linktime-proc-macro` crate for proc-macro support.
## [0.11.1] - 2026-04-28
### Changed
- Deprecated `dtor` macros in favor of the `dtor` crate.
- Migrated to using the `linktime-proc-macro` crate for proc-macro support.
### Fixed
- Fixed some stray `dtor` references in ctor docs.
## [0.11.0] - 2026-04-28
### Added
- AIX support for `ctor`/`dtor` crates.
### Changed
- Significant rewrite to ctor/dtor macros and documentation.
- Macro attributes and crate features are auto-documented.
- Rewrote `statics` code in `ctor` to not require `std`.
## [0.10.1] - 2026-04-22
### Added
- Included licenses in all files.
- Bumped proc-macro dependency versions.
### Fixed
- Fix MSRV in ctor docs.
- Various hardening fixes under Miri.
- Adding priority to `ctor`s accidentally enabled the anonymous flag.
### Changed
- `ctor` exports all `dtor` macros from `dtor` crate rather than reimplementing them.