diff --git a/crates/binstalk/src/errors.rs b/crates/binstalk/src/errors.rs
index a1abe80d..19b8554b 100644
--- a/crates/binstalk/src/errors.rs
+++ b/crates/binstalk/src/errors.rs
@@ -114,7 +114,7 @@ pub enum BinstallError {
         help("Check that the crate name you provided is correct.\nYou can also search for a matching crate at: https://lib.rs/search?q={crate_name}")
     )]
     CratesIoApi {
-        crate_name: String,
+        crate_name: CompactString,
         #[source]
         err: crates_io_api::Error,
     },
@@ -153,7 +153,7 @@ pub enum BinstallError {
     #[error("version string '{v}' is not semver")]
     #[diagnostic(severity(error), code(binstall::version::parse))]
     VersionParse {
-        v: String,
+        v: CompactString,
         #[source]
         err: semver::Error,
     },
@@ -170,7 +170,7 @@ pub enum BinstallError {
     #[error("version requirement '{req}' is not semver")]
     #[diagnostic(severity(error), code(binstall::version::requirement))]
     VersionReq {
-        req: String,
+        req: CompactString,
         #[source]
         err: semver::Error,
     },
@@ -194,7 +194,7 @@ pub enum BinstallError {
     #[error("no crate information available for '{crate_name}' version '{v}'")]
     #[diagnostic(severity(error), code(binstall::version::unavailable))]
     VersionUnavailable {
-        crate_name: String,
+        crate_name: CompactString,
         v: semver::Version,
     },
 
diff --git a/crates/binstalk/src/ops/install.rs b/crates/binstalk/src/ops/install.rs
index ea834d65..658758be 100644
--- a/crates/binstalk/src/ops/install.rs
+++ b/crates/binstalk/src/ops/install.rs
@@ -1,6 +1,5 @@
 use std::{borrow::Cow, env, ffi::OsStr, sync::Arc};
 
-use cargo_toml::Package;
 use compact_str::CompactString;
 use log::{debug, error, info};
 use tokio::{process::Command, task::block_in_place};
@@ -10,10 +9,7 @@ use crate::{
     bins,
     errors::BinstallError,
     helpers::jobserver_client::LazyJobserverClient,
-    manifests::{
-        cargo_toml_binstall::Meta,
-        crate_info::{CrateInfo, CrateSource},
-    },
+    manifests::crate_info::{CrateInfo, CrateSource},
 };
 
 pub async fn install(
@@ -25,26 +21,18 @@ pub async fn install(
         Resolution::AlreadyUpToDate => Ok(None),
         Resolution::Fetch {
             fetcher,
-            package,
+            new_version,
             name,
             version_req,
             bin_files,
         } => {
-            let current_version =
-                package
-                    .version()
-                    .parse()
-                    .map_err(|err| BinstallError::VersionParse {
-                        v: package.version().to_string(),
-                        err,
-                    })?;
             let target = fetcher.target().into();
 
             install_from_package(opts, bin_files).await.map(|option| {
                 option.map(|bins| CrateInfo {
                     name,
                     version_req,
-                    current_version,
+                    current_version: new_version,
                     source: CrateSource::cratesio_registry(),
                     target,
                     bins,
@@ -52,21 +40,26 @@ pub async fn install(
                 })
             })
         }
-        Resolution::InstallFromSource { package } => {
+        Resolution::InstallFromSource { name, version } => {
             let desired_targets = opts.desired_targets.get().await;
             let target = desired_targets
                 .first()
                 .ok_or(BinstallError::NoViableTargets)?;
 
             if !opts.dry_run {
-                install_from_source(&package, target, jobserver_client, opts.quiet, opts.force)
-                    .await
-                    .map(|_| None)
+                install_from_source(
+                    &name,
+                    &version,
+                    target,
+                    jobserver_client,
+                    opts.quiet,
+                    opts.force,
+                )
+                .await
+                .map(|_| None)
             } else {
                 info!(
-                    "Dry-run: running `cargo install {} --version {} --target {target}`",
-                    package.name,
-                    package.version()
+                    "Dry-run: running `cargo install {name} --version {version} --target {target}`",
                 );
                 Ok(None)
             }
@@ -103,7 +96,8 @@ async fn install_from_package(
 }
 
 async fn install_from_source(
-    package: &Package<Meta>,
+    name: &str,
+    version: &str,
     target: &str,
     lazy_jobserver_client: LazyJobserverClient,
     quiet: bool,
@@ -116,18 +110,16 @@ async fn install_from_source(
         .unwrap_or_else(|| Cow::Borrowed(OsStr::new("cargo")));
 
     debug!(
-        "Running `{} install {} --version {} --target {target}`",
+        "Running `{} install {name} --version {version} --target {target}`",
         cargo.to_string_lossy(),
-        package.name,
-        package.version()
     );
 
     let mut cmd = Command::new(cargo);
 
     cmd.arg("install")
-        .arg(&package.name)
+        .arg(name)
         .arg("--version")
-        .arg(package.version())
+        .arg(version)
         .arg("--target")
         .arg(target);
 
diff --git a/crates/binstalk/src/ops/resolve.rs b/crates/binstalk/src/ops/resolve.rs
index 61b090e3..c56dfc87 100644
--- a/crates/binstalk/src/ops/resolve.rs
+++ b/crates/binstalk/src/ops/resolve.rs
@@ -34,13 +34,14 @@ pub use version_ext::VersionReqExt;
 pub enum Resolution {
     Fetch {
         fetcher: Arc<dyn Fetcher>,
-        package: Package<Meta>,
+        new_version: Version,
         name: CompactString,
         version_req: CompactString,
         bin_files: Vec<bins::BinFile>,
     },
     InstallFromSource {
-        package: Package<Meta>,
+        name: CompactString,
+        version: CompactString,
     },
     AlreadyUpToDate,
 }
@@ -154,13 +155,13 @@ async fn resolve_inner(
         .package
         .ok_or_else(|| BinstallError::CargoTomlMissingPackage(crate_name.name.clone()))?;
 
-    if let Some(curr_version) = curr_version {
-        let new_version =
-            Version::parse(package.version()).map_err(|err| BinstallError::VersionParse {
-                v: package.version().to_string(),
-                err,
-            })?;
+    let new_version =
+        Version::parse(package.version()).map_err(|err| BinstallError::VersionParse {
+            v: package.version().to_compact_string(),
+            err,
+        })?;
 
+    if let Some(curr_version) = curr_version {
         if new_version == curr_version {
             info!(
                 "{} v{curr_version} is already installed, use --force to override",
@@ -246,7 +247,7 @@ async fn resolve_inner(
                         if !bin_files.is_empty() {
                             return Ok(Resolution::Fetch {
                                 fetcher,
-                                package,
+                                new_version,
                                 name: crate_name.name,
                                 version_req: version_req.to_compact_string(),
                                 bin_files,
@@ -279,7 +280,10 @@ async fn resolve_inner(
         }
     }
 
-    Ok(Resolution::InstallFromSource { package })
+    Ok(Resolution::InstallFromSource {
+        name: crate_name.name,
+        version: package.version().to_compact_string(),
+    })
 }
 
 ///  * `fetcher` - `fetcher.find()` must return `Ok(true)`.