From 088aeb5f472e64d60543fc0fcbea30c8ddfa9993 Mon Sep 17 00:00:00 2001 From: Karsten <45654430+KMRH47@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:24:24 +0200 Subject: [PATCH] Drop the unused avif feature from the image dependency (#60897) # Objective Every build of zed (and of every downstream gpui consumer) currently compiles rav1e, a full AV1 video encoder, because `image`'s default `avif` feature is enabled. That feature only provides `AvifEncoder`; AVIF *decoding* requires the separate, non-default `avif-native` feature (dav1d). So AVIF files do not decode anywhere in zed today, nothing encodes AVIF (`AvifEncoder` has zero references in the repo), and rav1e plus its support crates are dead weight in every clean build. ## Solution Pin the workspace `image` dependency to its default feature set minus `avif`. No behavior changes: AVIF files fail to decode exactly as before, and `ImageFormat::Avif` still exists (the enum is not feature-gated), so the `image_viewer` match arm compiles unchanged. The `"avif"` entry in gpui's supported-extension list is deliberately left untouched to keep the diff minimal; loading such files fails identically before and after. ## Testing - `cargo metadata` node diff (before vs after, all 1832 resolved packages): the only change in the entire graph is `image` losing `avif`/`default`/`default-formats`. - `cargo tree -i rav1e` on the Linux host, plus `--target aarch64-apple-darwin` and `--target x86_64-pc-windows-msvc`: no reverse dependencies on any platform. - `rg -i avif crates/` finds only string labels (an extension list in `gpui`, a format name in `image_viewer`, an icon mapping in `theme`); `AvifEncoder` is never referenced. - `cargo check -p gpui` passes. - Isolated probe crate depending on image 0.25.10 alone (cold builds, Linux, 16 threads), default vs default-minus-avif: release drops from 191 to 122 CPU-seconds and 282 to 191 MB of `target/`; debug drops from 75 to 42 CPU-seconds and 549 to 342 MB. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments (n/a: manifest-only change) - [x] The content adheres to Zed's UI standards (n/a: no UI change) - [x] Tests cover the new/changed behavior (no behavior change; CI covers compilation) - [x] Performance impact has been considered and is acceptable (build-time improvement only) --- Release Notes: - N/A --- Cargo.lock | 1 - Cargo.toml | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a391ab085..5fec34525d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8938,7 +8938,6 @@ dependencies = [ "qoi", "ravif", "rayon", - "rgb", "tiff", "zune-core", "zune-jpeg", diff --git a/Cargo.toml b/Cargo.toml index c657ff1aef..90eb3c0c4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -617,7 +617,25 @@ http-body = "1.0" httparse = "1.10" idna = "1.0" ignore = "0.4.22" -image = "0.25.1" +# image's default features minus "avif", which only adds an encoder (rav1e); +# decoding AVIF would additionally need the non-default "avif-native" feature. +image = { version = "0.25.1", default-features = false, features = [ + "bmp", + "dds", + "exr", + "ff", + "gif", + "hdr", + "ico", + "jpeg", + "png", + "pnm", + "qoi", + "rayon", + "tga", + "tiff", + "webp", +] } imara-diff = "0.1.8" indexmap = { version = "2.7.0", features = ["serde"] } indoc = "2"