diff --git a/sdk-extensions/incubator/README.md b/sdk-extensions/incubator/README.md
index 3dc539bf0d2..2aa38ea3d0e 100644
--- a/sdk-extensions/incubator/README.md
+++ b/sdk-extensions/incubator/README.md
@@ -33,6 +33,9 @@ Notes:
## View File Configuration
+> [!WARNING]
+> This mechanism is superseded by declarative config, which is now stable (spec and schema at [opentelemetry-configuration](https://github.com/open-telemetry/opentelemetry-configuration)) and will be removed after the 1.62.0 release. Please use [declarative configuration](#declarative-configuration) instead.
+
Adds support for file based YAML configuration of Metric SDK Views.
For example, suppose `/Users/user123/view.yaml` has the following content:
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfig.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfig.java
index 9c08770d072..0eb7239984a 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfig.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfig.java
@@ -71,7 +71,15 @@
* .setAttributesFilter(key -> new HashSet<>(Arrays.asList("foo", "bar")).contains(key))
* .build());
* }
+ *
+ * @deprecated this mechanism is superseded by declarative config, which is now stable (spec and
+ * schema at opentelemetry-configuration.
+ * Please uses {@link
+ * io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration#parseAndCreate(InputStream)}
+ * instead.
*/
+@Deprecated
public final class ViewConfig {
private ViewConfig() {}
diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizer.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizer.java
index 4c3acfe30d0..76af81d7c12 100644
--- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizer.java
+++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizer.java
@@ -15,9 +15,21 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
+import java.util.logging.Logger;
-/** SPI implementation for loading view configuration YAML. */
+/**
+ * SPI implementation for loading view configuration YAML.
+ *
+ * @deprecated this mechanism is superseded by declarative config, which is now stable (spec and
+ * schema at opentelemetry-configuration)
+ * and will be removed after the 1.62.0 release. Please uses {@link
+ * io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration#parseAndCreate(InputStream)}
+ * instead.
+ */
+@Deprecated
public final class ViewConfigCustomizer implements AutoConfigurationCustomizerProvider {
+ private static final Logger LOGGER = Logger.getLogger(ViewConfigCustomizer.class.getName());
@Override
public void customize(AutoConfigurationCustomizer autoConfiguration) {
@@ -29,6 +41,10 @@ static SdkMeterProviderBuilder customizeMeterProvider(
SdkMeterProviderBuilder meterProviderBuilder, ConfigProperties configProperties) {
List configFileLocations =
configProperties.getList("otel.experimental.metrics.view.config");
+ if (!configFileLocations.isEmpty()) {
+ LOGGER.warning(
+ "otel.experimental.metrics.view.config is deprecated and will be removed after 1.62 release. Please use declarative config instead.");
+ }
for (String configFileLocation : configFileLocations) {
if (configFileLocation.startsWith("classpath:")) {
String classpathLocation = configFileLocation.substring("classpath:".length());
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizerTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizerTest.java
index 25950b2b898..0a742ee96e5 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizerTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigCustomizerTest.java
@@ -22,6 +22,7 @@
import java.util.UUID;
import org.junit.jupiter.api.Test;
+@SuppressWarnings("deprecation") // Testing deprecated methods
class ViewConfigCustomizerTest {
@Test
diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigTest.java
index a62204e1180..68c7b87d99b 100644
--- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigTest.java
+++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/metric/viewconfig/ViewConfigTest.java
@@ -35,6 +35,7 @@
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
+@SuppressWarnings("deprecation") // Testing deprecated methods
class ViewConfigTest {
@Test