diff --git a/src/lib.rs b/src/lib.rs
index d6d80a3e89afb96ab2b908564c878da296105de8..51a430d9ddcd104e24aa3ee10d3787356ea8a765 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -21,7 +21,7 @@ use input::{input_kb, input_mouse, undo_redo, ClickTimer};
 use input::{poll_wasm_paste, WasmPaste, WasmPasteAsyncChannel};
 use render::{
     blink_cursor, cosmic_edit_redraw_buffer, freeze_cursor_blink, hide_inactive_or_readonly_cursor,
-    on_scale_factor_change, CursorBlinkTimer, CursorVisibility, SwashCacheState,
+    on_scale_factor_change, set_initial_scale, CursorBlinkTimer, CursorVisibility, SwashCacheState,
 };
 
 #[cfg(feature = "multicam")]
@@ -73,6 +73,8 @@ pub enum CosmicTextPosition {
 pub struct CosmicTextChanged(pub (Entity, String));
 
 // TODO docs
+const DEFAULT_SCALE_PLACEHOLDER: f32 = 0.696969;
+
 #[derive(Clone, Component)]
 pub struct CosmicMetrics {
     pub font_size: f32,
@@ -85,7 +87,7 @@ impl Default for CosmicMetrics {
         Self {
             font_size: 12.,
             line_height: 12.,
-            scale_factor: 1.,
+            scale_factor: DEFAULT_SCALE_PLACEHOLDER,
         }
     }
 }
@@ -291,9 +293,13 @@ impl Plugin for CosmicEditPlugin {
         app.add_systems(
             First,
             (
-                cosmic_editor_builder,
-                placeholder_builder,
-                on_scale_factor_change,
+                set_initial_scale,
+                (
+                    cosmic_editor_builder,
+                    placeholder_builder,
+                    on_scale_factor_change,
+                )
+                    .after(set_initial_scale),
                 render::cosmic_ui_to_canvas,
                 render::cosmic_sprite_to_canvas,
             ),
diff --git a/src/render.rs b/src/render.rs
index 4f0b93547773fa756c667b29de190bb9cdb774f3..d7033a2f8da3c9555882aa10340b31abf74d1e92 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -2,7 +2,7 @@ use std::time::Duration;
 
 use bevy::{
     asset::HandleId,
-    prelude::*,
+    prelude::*;
     render::render_resource::Extent3d,
     window::{PrimaryWindow, WindowScaleFactorChanged},
 };
@@ -12,7 +12,7 @@ use image::{imageops::FilterType, GenericImageView};
 use crate::{
     get_text_size, get_x_offset_center, get_y_offset_center, CosmicAttrs, CosmicBackground,
     CosmicCanvas, CosmicEditor, CosmicFontSystem, CosmicMetrics, CosmicMode, CosmicTextPosition,
-    FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset,
+    FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset, DEFAULT_SCALE_PLACEHOLDER
 };
 
 #[derive(Resource)]
@@ -452,6 +452,19 @@ pub(crate) fn hide_inactive_or_readonly_cursor(
     }
 }
 
+pub(crate) fn set_initial_scale(
+    window_q: Query<&Window, With<PrimaryWindow>>,
+    mut metrics_q: Query<&mut CosmicMetrics, Added<CosmicMetrics>>,
+) {
+    let scale = window_q.single().scale_factor() as f32;
+
+    for mut metrics in metrics_q.iter_mut() {
+        if metrics.scale_factor == DEFAULT_SCALE_PLACEHOLDER {
+            metrics.scale_factor = scale;
+        }
+    }
+}
+
 pub(crate) fn on_scale_factor_change(
     mut scale_factor_changed: EventReader<WindowScaleFactorChanged>,
     mut cosmic_query: Query<(&mut CosmicEditor, &CosmicMetrics, &mut XOffset)>,