bevy hates Rc
diff --git a/crates/encoding/src/glyph_cache.rs b/crates/encoding/src/glyph_cache.rs
index c871d8b..a3e3e2a 100644
--- a/crates/encoding/src/glyph_cache.rs
+++ b/crates/encoding/src/glyph_cache.rs
@@ -2,7 +2,7 @@
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 
 use std::collections::HashMap;
-use std::rc::Rc;
+use std::sync::Arc;
 
 use super::{Encoding, StreamOffsets};
 
@@ -13,7 +13,7 @@
 
 #[derive(Default)]
 pub struct GlyphCache {
-    free_list: Vec<Rc<Encoding>>,
+    free_list: Vec<Arc<Encoding>>,
     map: GlyphMap,
     var_map: HashMap<VarKey, GlyphMap>,
     cached_count: usize,
@@ -133,7 +133,7 @@
 }
 
 pub struct GlyphCacheSession<'a> {
-    free_list: &'a mut Vec<Rc<Encoding>>,
+    free_list: &'a mut Vec<Arc<Encoding>>,
     map: &'a mut GlyphMap,
     font_id: u64,
     font_index: u32,
@@ -149,7 +149,7 @@
 }
 
 impl<'a> GlyphCacheSession<'a> {
-    pub fn get_or_insert(&mut self, glyph_id: u32) -> Option<(Rc<Encoding>, StreamOffsets)> {
+    pub fn get_or_insert(&mut self, glyph_id: u32) -> Option<(Arc<Encoding>, StreamOffsets)> {
         let key = GlyphKey {
             font_id: self.font_id,
             font_index: self.font_index,
@@ -164,7 +164,7 @@
         }
         let outline = self.outlines.get(GlyphId::new(key.glyph_id as u16))?;
         let mut encoding = self.free_list.pop().unwrap_or_default();
-        let encoding_ptr = Rc::make_mut(&mut encoding);
+        let encoding_ptr = Arc::make_mut(&mut encoding);
         encoding_ptr.reset();
         let is_fill = match &self.style {
             Style::Fill(fill) => {
@@ -224,7 +224,7 @@
 
 #[derive(Clone, Default)]
 struct GlyphEntry {
-    encoding: Rc<Encoding>,
+    encoding: Arc<Encoding>,
     stream_sizes: StreamOffsets,
     /// Last use of this entry.
     serial: u64,
diff --git a/crates/encoding/src/resolve.rs b/crates/encoding/src/resolve.rs
index a8745a6..c627c20 100644
--- a/crates/encoding/src/resolve.rs
+++ b/crates/encoding/src/resolve.rs
@@ -14,7 +14,7 @@
     },
     peniko::{Extend, Image},
     std::ops::Range,
-    std::rc::Rc,
+    std::sync::Arc,
 };
 
 /// Layout of a packed encoding.
@@ -164,7 +164,7 @@
 #[derive(Default)]
 pub struct Resolver {
     glyph_cache: GlyphCache,
-    glyphs: Vec<Rc<Encoding>>,
+    glyphs: Vec<Arc<Encoding>>,
     ramp_cache: RampCache,
     image_cache: ImageCache,
     pending_images: Vec<PendingImage>,
@@ -438,11 +438,11 @@
                     };
                     let glyph_start = self.glyphs.len();
                     for glyph in glyphs {
-                        let Some((index, stream_sizes)) = session.get_or_insert(glyph.id) else {
+                        let Some((encoding, stream_sizes)) = session.get_or_insert(glyph.id) else {
                             continue;
                         };
                         run_sizes.add(&stream_sizes);
-                        self.glyphs.push(index);
+                        self.glyphs.push(encoding);
                     }
                     let glyph_end = self.glyphs.len();
                     run_sizes.path_tags += glyphs.len() + 1;