diff --git a/kayak_font/src/ttf/loader.rs b/kayak_font/src/ttf/loader.rs
index 7eb6d3e4e3fa6c4cf6367b8834fdc6ba9b00986c..e45706bf460270a6a30a76359325000641c2fb3d 100644
--- a/kayak_font/src/ttf/loader.rs
+++ b/kayak_font/src/ttf/loader.rs
@@ -32,11 +32,9 @@ impl AssetLoader for TTFLoader {
         load_context: &'a mut LoadContext,
     ) -> BoxedFuture<'a, Result<(), anyhow::Error>> {
         Box::pin(async move {
-            #[cfg(not(target_family = "wasm"))]
             let asset_io = load_context
                 .asset_io()
-                .downcast_ref::<FileAssetIo>()
-                .unwrap();
+                .downcast_ref::<FileAssetIo>();
 
             let kttf: KTTF =
                 nanoserde::DeJson::deserialize_json(std::str::from_utf8(bytes).unwrap()).unwrap();
@@ -196,9 +194,13 @@ impl AssetLoader for TTFLoader {
 
             let image_bytes = if cache_image.is_err() {
                 #[cfg(not(target_family = "wasm"))]
-                image_builder
-                    .save(asset_io.root_path().join(cache_path))
-                    .unwrap();
+                {
+                    if let Some(asset_io) = asset_io {
+                        image_builder
+                            .save(asset_io.root_path().join(cache_path))
+                           .unwrap();
+                    }
+                }
                 image_builder.as_bytes().to_vec()
             } else {
                 let cache_image = cache_image.unwrap();