diff --git a/src/binstall/install.rs b/src/binstall/install.rs
index 9df6013a..677423c9 100644
--- a/src/binstall/install.rs
+++ b/src/binstall/install.rs
@@ -112,22 +112,18 @@ async fn install_from_package(
         debug!("Writing .crates.toml");
         metafiles::v1::CratesToml::append(cvs.clone(), bins.clone())?;
 
-        {
-            debug!("Writing .crates2.json");
-            let mut c2 = metafiles::v2::Crates2Json::load().unwrap_or_default();
-            c2.insert(
-                cvs,
-                metafiles::v2::CrateInfo {
-                    version_req: Some(version),
-                    bins,
-                    profile: "release".into(),
-                    target: fetcher.target().to_string(),
-                    rustc: format!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")),
-                    ..Default::default()
-                },
-            );
-            c2.write()?;
-        }
+        debug!("Writing .crates2.json");
+        metafiles::v2::Crates2Json::append(
+            cvs,
+            metafiles::v2::CrateInfo {
+                version_req: Some(version),
+                bins,
+                profile: "release".into(),
+                target: fetcher.target().to_string(),
+                rustc: format!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")),
+                ..Default::default()
+            },
+        )?;
 
         Ok(())
     })
diff --git a/src/metafiles/v2.rs b/src/metafiles/v2.rs
index 70c4e46e..1501e238 100644
--- a/src/metafiles/v2.rs
+++ b/src/metafiles/v2.rs
@@ -63,6 +63,22 @@ impl Crates2Json {
         fs::write(path, &serde_json::to_vec(&self)?)?;
         Ok(())
     }
+
+    pub fn append_to_path(
+        path: impl AsRef<Path>,
+        cvs: CrateVersionSource,
+        info: CrateInfo,
+    ) -> Result<(), Crates2JsonParseError> {
+        let mut c2 = Self::load_from_path(path.as_ref()).unwrap_or_default();
+        c2.insert(cvs, info);
+        c2.write_to_path(path.as_ref())?;
+
+        Ok(())
+    }
+
+    pub fn append(cvs: CrateVersionSource, info: CrateInfo) -> Result<(), Crates2JsonParseError> {
+        Self::append_to_path(Self::default_path()?, cvs, info)
+    }
 }
 
 #[derive(Debug, Diagnostic, Error)]