diff --git a/plugins/ide-features-trainer/onboarding/intellij.featuresTrainer.onboarding.iml b/plugins/ide-features-trainer/onboarding/intellij.featuresTrainer.onboarding.iml
index 931dd35c6198..c1d7e23d6e48 100644
--- a/plugins/ide-features-trainer/onboarding/intellij.featuresTrainer.onboarding.iml
+++ b/plugins/ide-features-trainer/onboarding/intellij.featuresTrainer.onboarding.iml
@@ -12,5 +12,6 @@
+
\ No newline at end of file
diff --git a/plugins/ide-features-trainer/onboarding/resources/intellij.featuresTrainer.onboarding.xml b/plugins/ide-features-trainer/onboarding/resources/intellij.featuresTrainer.onboarding.xml
index 47822a040b59..885c8a900727 100644
--- a/plugins/ide-features-trainer/onboarding/resources/intellij.featuresTrainer.onboarding.xml
+++ b/plugins/ide-features-trainer/onboarding/resources/intellij.featuresTrainer.onboarding.xml
@@ -1,9 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/ide-features-trainer/onboarding/src/com/intellij/featuresTrainer/onboarding/NewUsersOnboardingExperimentAccessorImpl.kt b/plugins/ide-features-trainer/onboarding/src/com/intellij/featuresTrainer/onboarding/NewUsersOnboardingExperimentAccessorImpl.kt
new file mode 100644
index 000000000000..13714c1ffd2e
--- /dev/null
+++ b/plugins/ide-features-trainer/onboarding/src/com/intellij/featuresTrainer/onboarding/NewUsersOnboardingExperimentAccessorImpl.kt
@@ -0,0 +1,10 @@
+package com.intellij.featuresTrainer.onboarding
+
+import com.intellij.platform.ide.newUsersOnboarding.NewUsersOnboardingExperiment
+import training.learn.NewUsersOnboardingExperimentAccessor
+
+internal class NewUsersOnboardingExperimentAccessorImpl : NewUsersOnboardingExperimentAccessor {
+ override fun isExperimentEnabled(): Boolean {
+ return NewUsersOnboardingExperiment.getInstance().isEnabled()
+ }
+}
\ No newline at end of file
diff --git a/plugins/ide-features-trainer/res/META-INF/plugin.xml b/plugins/ide-features-trainer/res/META-INF/plugin.xml
index 9d2c7116b125..cdcb2a4a5cbc 100644
--- a/plugins/ide-features-trainer/res/META-INF/plugin.xml
+++ b/plugins/ide-features-trainer/res/META-INF/plugin.xml
@@ -48,6 +48,8 @@
+
+
diff --git a/plugins/ide-features-trainer/src/training/learn/NewUsersOnboardingExperimentAccessor.kt b/plugins/ide-features-trainer/src/training/learn/NewUsersOnboardingExperimentAccessor.kt
new file mode 100644
index 000000000000..07fd45969951
--- /dev/null
+++ b/plugins/ide-features-trainer/src/training/learn/NewUsersOnboardingExperimentAccessor.kt
@@ -0,0 +1,25 @@
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package training.learn
+
+import com.intellij.openapi.extensions.ExtensionPointName
+import org.jetbrains.annotations.ApiStatus
+
+/**
+ * Temporary extension point to access the New Users Onboarding experiment state in the Features Trainer logic.
+ * Can't access [com.intellij.platform.ide.newUsersOnboarding.NewUsersOnboardingExperiment] directly
+ * because IFT can't strictly depend on New Users Onboarding.
+ * So, if there is no New Users Onboarding, then there are no implementations of this extension point,
+ * and we consider that experiment is disabled.
+ *
+ * It should be removed once the experiment is finished and default is determined.
+ */
+@ApiStatus.Internal
+interface NewUsersOnboardingExperimentAccessor {
+ fun isExperimentEnabled(): Boolean
+
+ companion object {
+ internal val EP_NAME: ExtensionPointName = ExtensionPointName("training.ift.newUsersOnboardingExperimentAccessor")
+
+ fun isExperimentEnabled(): Boolean = EP_NAME.findFirstSafe { it.isExperimentEnabled() } != null
+ }
+}
\ No newline at end of file
diff --git a/plugins/ide-features-trainer/src/training/ui/welcomeScreen/OnboardingLessonPromoter.kt b/plugins/ide-features-trainer/src/training/ui/welcomeScreen/OnboardingLessonPromoter.kt
index 9930e4ba7f60..1d7c9520049e 100644
--- a/plugins/ide-features-trainer/src/training/ui/welcomeScreen/OnboardingLessonPromoter.kt
+++ b/plugins/ide-features-trainer/src/training/ui/welcomeScreen/OnboardingLessonPromoter.kt
@@ -19,6 +19,7 @@ import training.dsl.dropMnemonic
import training.lang.LangManager
import training.learn.CourseManager
import training.learn.LearnBundle
+import training.learn.NewUsersOnboardingExperimentAccessor
import training.learn.OpenLessonActivities
import training.learn.lesson.LessonState
import training.learn.lesson.LessonStateManager
@@ -46,7 +47,8 @@ open class OnboardingLessonPromoter(@NonNls protected val lessonId: String,
!notificationScheduled &&
!PropertiesComponent.getInstance().getBoolean(PROMO_HIDDEN, false) &&
RecentProjectsManagerBase.getInstanceEx().getRecentPaths().size < 5 &&
- LessonStateManager.getStateFromBase(lessonId) == LessonState.NOT_PASSED
+ LessonStateManager.getStateFromBase(lessonId) == LessonState.NOT_PASSED &&
+ !NewUsersOnboardingExperimentAccessor.isExperimentEnabled()
}
override val headerLabel: String