diff --git a/.idea/modules.xml b/.idea/modules.xml
index 56a614dd0437..df415fce7604 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1194,6 +1194,7 @@
+
diff --git a/xml/xml-frontend-split/BUILD.bazel b/xml/xml-frontend-split/BUILD.bazel
new file mode 100644
index 000000000000..aba1a9f31e61
--- /dev/null
+++ b/xml/xml-frontend-split/BUILD.bazel
@@ -0,0 +1,29 @@
+### auto-generated section `build intellij.xml.frontend.split` start
+load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources")
+
+jvm_resources(
+ name = "frontend-split_resources",
+ files = glob(["resources/**/*"]),
+ strip_prefix = "resources"
+)
+
+jvm_library(
+ name = "frontend-split",
+ module_name = "intellij.xml.frontend.split",
+ visibility = ["//visibility:public"],
+ srcs = glob(["src/**/*.kt", "src/**/*.java"], allow_empty = True),
+ deps = [
+ "@lib//:kotlin-stdlib",
+ "//platform/core-api:core",
+ "//platform/core-impl",
+ "//platform/util/base",
+ "//xml/xml-parser:parser",
+ "//platform/projectModel-api:projectModel",
+ "//platform/analysis-api:analysis",
+ "//platform/util",
+ "//platform/editor-ui-api:editor-ui",
+ "//xml/xml-frontback-impl:frontback-impl",
+ ],
+ runtime_deps = [":frontend-split_resources"]
+)
+### auto-generated section `build intellij.xml.frontend.split` end
\ No newline at end of file
diff --git a/xml/xml-frontend-split/intellij.xml.frontend.split.iml b/xml/xml-frontend-split/intellij.xml.frontend.split.iml
new file mode 100644
index 000000000000..969d86c816cc
--- /dev/null
+++ b/xml/xml-frontend-split/intellij.xml.frontend.split.iml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml b/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml
new file mode 100644
index 000000000000..ff343bd90e40
--- /dev/null
+++ b/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt
new file mode 100644
index 000000000000..fc990c16925c
--- /dev/null
+++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt
@@ -0,0 +1,21 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.xml.frontend.split.editor
+
+import com.intellij.openapi.fileTypes.FileType
+import com.intellij.psi.FileViewProvider
+import com.intellij.psi.PsiElementVisitor
+import com.intellij.psi.impl.source.PsiFileImpl
+import com.intellij.psi.tree.IElementType
+
+abstract class FrontendFileImpl(
+ viewProvider: FileViewProvider,
+ elementType: IElementType,
+) : PsiFileImpl(elementType, elementType, viewProvider) {
+
+ override fun getFileType(): FileType =
+ viewProvider.fileType
+
+ override fun accept(visitor: PsiElementVisitor) {
+ visitor.visitFile(this)
+ }
+}
diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt
new file mode 100644
index 000000000000..477e21fc32a3
--- /dev/null
+++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt
@@ -0,0 +1,23 @@
+package com.intellij.xml.frontend.split.editor
+
+import com.intellij.extapi.psi.ASTWrapperPsiElement
+import com.intellij.html.embedding.BasicHtmlRawTextElementFactory
+import com.intellij.lang.ASTNode
+import com.intellij.lang.html.BasicHtmlElementFactory
+import com.intellij.psi.FileViewProvider
+import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiFile
+
+class FrontendHtmlElementFactory :
+ BasicHtmlElementFactory,
+ BasicHtmlRawTextElementFactory {
+
+ override fun createFile(viewProvider: FileViewProvider): PsiFile =
+ FrontendHtmlFileImpl(viewProvider)
+
+ override fun createElement(node: ASTNode): PsiElement =
+ ASTWrapperPsiElement(node)
+
+ override fun createRawTextElement(node: ASTNode): PsiElement =
+ ASTWrapperPsiElement(node)
+}
diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt
new file mode 100644
index 000000000000..d98a5df8a2a2
--- /dev/null
+++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt
@@ -0,0 +1,12 @@
+package com.intellij.xml.frontend.split.editor
+
+import com.intellij.psi.FileViewProvider
+import com.intellij.psi.xml.XmlElementType
+
+class FrontendHtmlFileImpl(
+ viewProvider: FileViewProvider,
+) : FrontendFileImpl(viewProvider, XmlElementType.HTML_FILE) {
+
+ override fun toString(): String =
+ "HtmlFile:$name"
+}
diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt
new file mode 100644
index 000000000000..2faeec045b8e
--- /dev/null
+++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt
@@ -0,0 +1,22 @@
+package com.intellij.xml.frontend.split.editor
+
+import com.intellij.extapi.psi.ASTWrapperPsiElement
+import com.intellij.lang.ASTNode
+import com.intellij.lang.xml.BasicXmlElementFactory
+import com.intellij.psi.FileViewProvider
+import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiFile
+import com.intellij.psi.tree.IElementType
+import com.intellij.psi.tree.IFileElementType
+
+class FrontendXmlElementFactory :
+ BasicXmlElementFactory {
+ override fun createFile(
+ viewProvider: FileViewProvider,
+ elementType: IElementType,
+ ): PsiFile =
+ FrontendXmlFileImpl(viewProvider, IFileElementType(viewProvider.baseLanguage))
+
+ override fun createElement(node: ASTNode): PsiElement =
+ ASTWrapperPsiElement(node)
+}
diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt
new file mode 100644
index 000000000000..0c9816ee16d9
--- /dev/null
+++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt
@@ -0,0 +1,13 @@
+package com.intellij.xml.frontend.split.editor
+
+import com.intellij.psi.FileViewProvider
+import com.intellij.psi.tree.IElementType
+
+class FrontendXmlFileImpl(
+ viewProvider: FileViewProvider,
+ elementType: IElementType,
+) : FrontendFileImpl(viewProvider, elementType) {
+
+ override fun toString(): String =
+ "XmlFile:$name"
+}