diff --git a/pyproject.toml b/pyproject.toml
index 6619e1c75..129a4dfb8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry]
name = "writer"
-version = "0.8.0rc7"
+version = "0.8.0rc8"
description = "An open-source, Python framework for building feature-rich apps that are fully integrated with the Writer platform."
authors = ["Writer, Inc."]
readme = "README.md"
diff --git a/src/ui/public/components/workflows_writeraddtokg.svg b/src/ui/public/components/workflows_writeraddtokg.svg
new file mode 100644
index 000000000..2ef070cb9
--- /dev/null
+++ b/src/ui/public/components/workflows_writeraddtokg.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/ui/src/builder/BuilderApp.vue b/src/ui/src/builder/BuilderApp.vue
index d1980d562..5f4162a71 100644
--- a/src/ui/src/builder/BuilderApp.vue
+++ b/src/ui/src/builder/BuilderApp.vue
@@ -105,31 +105,34 @@ import { isPlatformMac } from "../core/detectPlatform";
import BuilderHeader from "./BuilderHeader.vue";
import BuilderTooltip from "./BuilderTooltip.vue";
import BuilderComponentShortcuts from "./BuilderComponentShortcuts.vue";
+import BuilderAsyncLoader from "./BuilderAsyncLoader.vue";
+import BuilderCodePanel from "./BuilderCodePanel.vue";
+import BuilderLogPanel from "./BuilderLogPanel.vue";
-const BuilderSettings = defineAsyncComponent(
- () => import("./BuilderSettings.vue"),
-);
-const BuilderSidebar = defineAsyncComponent(
- () => import("./BuilderSidebar.vue"),
-);
-const ComponentRenderer = defineAsyncComponent(
- () => import("@/renderer/ComponentRenderer.vue"),
-);
-const BuilderInstanceTracker = defineAsyncComponent(
- () => import("./BuilderInstanceTracker.vue"),
-);
-const BuilderInsertionOverlay = defineAsyncComponent(
- () => import("./BuilderInsertionOverlay.vue"),
-);
-const BuilderInsertionLabel = defineAsyncComponent(
- () => import("./BuilderInsertionLabel.vue"),
-);
-const BuilderCodePanel = defineAsyncComponent(
- () => import("./BuilderCodePanel.vue"),
-);
-const BuilderLogPanel = defineAsyncComponent(
- () => import("./BuilderLogPanel.vue"),
-);
+const BuilderSettings = defineAsyncComponent({
+ loader: () => import("./BuilderSettings.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
+const BuilderSidebar = defineAsyncComponent({
+ loader: () => import("./BuilderSidebar.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
+const ComponentRenderer = defineAsyncComponent({
+ loader: () => import("@/renderer/ComponentRenderer.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
+const BuilderInstanceTracker = defineAsyncComponent({
+ loader: () => import("./BuilderInstanceTracker.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
+const BuilderInsertionOverlay = defineAsyncComponent({
+ loader: () => import("./BuilderInsertionOverlay.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
+const BuilderInsertionLabel = defineAsyncComponent({
+ loader: () => import("./BuilderInsertionLabel.vue"),
+ loadingComponent: BuilderAsyncLoader,
+});
const wf = inject(injectionKeys.core);
const ssbm = inject(injectionKeys.builderManager);
diff --git a/src/ui/src/builder/BuilderAsyncLoader.vue b/src/ui/src/builder/BuilderAsyncLoader.vue
new file mode 100644
index 000000000..27fb46e68
--- /dev/null
+++ b/src/ui/src/builder/BuilderAsyncLoader.vue
@@ -0,0 +1,19 @@
+
+