diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml
index 85ded1df4..1fdc83fb3 100644
--- a/embassy-nrf/Cargo.toml
+++ b/embassy-nrf/Cargo.toml
@@ -5,6 +5,13 @@ authors = ["Dario Nieuwenhuis <dirbaio@dirbaio.net>"]
 edition = "2018"
 
 [features]
+
+# Reexport the PAC for the currently enabled chip at `embassy_nrf::pac`.
+# This is unstable because semver-minor (non-breaking) releases of embassy-nrf may major-bump (breaking) the PAC version.
+# If this is an issue for you, you're encouraged to directly depend on a fixed version of the PAC.
+# There are no plans to make this stable.
+unstable-pac = []
+
 defmt-trace = [ ]
 defmt-debug = [ ]
 defmt-info = [ ]
diff --git a/embassy-nrf/src/lib.rs b/embassy-nrf/src/lib.rs
index c2e461cf1..35815f792 100644
--- a/embassy-nrf/src/lib.rs
+++ b/embassy-nrf/src/lib.rs
@@ -65,7 +65,11 @@ mod chip;
 #[path = "chips/nrf52840.rs"]
 mod chip;
 
+#[cfg(feature = "unstable-pac")]
+pub use chip::pac;
+#[cfg(not(feature = "unstable-pac"))]
 pub(crate) use chip::pac;
+
 pub use chip::{peripherals, Peripherals};
 
 pub mod interrupt {
diff --git a/embassy-rp/Cargo.toml b/embassy-rp/Cargo.toml
index ba9984a80..c61b8c997 100644
--- a/embassy-rp/Cargo.toml
+++ b/embassy-rp/Cargo.toml
@@ -5,6 +5,13 @@ authors = ["Dario Nieuwenhuis <dirbaio@dirbaio.net>"]
 edition = "2018"
 
 [features]
+
+# Reexport the PAC for the currently enabled chip at `embassy_rp::pac`.
+# This is unstable because semver-minor (non-breaking) releases of embassy-nrf may major-bump (breaking) the PAC version.
+# If this is an issue for you, you're encouraged to directly depend on a fixed version of the PAC.
+# There are no plans to make this stable.
+unstable-pac = []
+
 defmt-trace = [ ]
 defmt-debug = [ ]
 defmt-info = [ ]
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs
index aefc86c00..c53d2e58d 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -5,7 +5,10 @@
 #![feature(never_type)]
 #![allow(incomplete_features)]
 
+#[cfg(feature = "unstable-pac")]
 pub use rp2040_pac2 as pac;
+#[cfg(not(feature = "unstable-pac"))]
+pub(crate) use rp2040_pac2 as pac;
 
 // This mod MUST go first, so that the others see its macros.
 pub(crate) mod fmt;
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index 654bc98ef..4e4d7ff82 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -43,6 +43,12 @@ defmt-error = [ ]
 sdmmc-rs = ["embedded-sdmmc"]
 net = ["embassy-net", "vcell"]
 
+# Reexport stm32-metapac at `embassy_stm32::pac`.
+# This is unstable because semver-minor (non-breaking) releases of embassy-stm32 may major-bump (breaking) the stm32-metapac version.
+# If this is an issue for you, you're encouraged to directly depend on a fixed version of the PAC.
+# There are no plans to make this stable.
+unstable-pac = []
+
 # BEGIN GENERATED FEATURES
 # Generated by gen_features.py. DO NOT EDIT.
 stm32f030c6 = [ "stm32-metapac/stm32f030c6",]
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
index 4b2826ae8..22999a69e 100644
--- a/embassy-stm32/src/lib.rs
+++ b/embassy-stm32/src/lib.rs
@@ -6,6 +6,9 @@
 #![feature(type_alias_impl_trait)]
 #![allow(incomplete_features)]
 
+#[cfg(feature = "unstable-pac")]
+pub use stm32_metapac as pac;
+#[cfg(not(feature = "unstable-pac"))]
 pub(crate) use stm32_metapac as pac;
 
 // This must go FIRST so that all the other modules see its macros.