Files
zed/crates/gpui/Cargo.toml
T
Lukas Wirth ab1c37a4ef gpui_web: Let applications provide fonts (#63493)
`gpui_web` currently embeds IBM Plex Sans and Lilex into every browser
application during platform construction. Applications such as Delta
already provide their own fonts, so those binaries contain overlapping
font bundles and register the same faces twice.

This change starts the web platform with an empty font database,
matching the ownership boundary used by native applications: the
application selects and registers its fonts before opening a window.
Delta already follows that sequence. GPUI's browser-capable examples now
load the former eight-face bundle explicitly through shared example
support, while the standalone `hello_web` example demonstrates
registering a minimal application font directly.

Testing performed:

- `cargo check -p gpui --examples --target wasm32-unknown-unknown`
- `cargo check -p gpui --examples`
- `cargo check -p gpui_web --target wasm32-unknown-unknown`
- `cargo check --manifest-path
crates/gpui_web/examples/hello_web/Cargo.toml --target
wasm32-unknown-unknown`
- `./script/clippy -p gpui_web --target wasm32-unknown-unknown`
- `cargo fmt -p gpui -p gpui_web --check`

Release Notes:

- N/A
2026-08-31 13:07:22 +00:00

263 lines
6.2 KiB
TOML

[package]
name = "gpui"
version = "0.2.2"
edition.workspace = true
authors = ["Nathan Sobo <nathan@zed.dev>"]
description = "Zed's GPU-accelerated UI framework"
repository = "https://github.com/zed-industries/zed"
publish = true
license = "Apache-2.0"
homepage = "https://gpui.rs"
readme = "README.md"
keywords = ["desktop", "gui", "immediate"]
categories = ["gui"]
[lints]
workspace = true
[features]
default = ["font-kit", "wayland", "x11", "windows-manifest"]
test-support = [
"leak-detection",
"collections/test-support",
"http_client/test-support",
"wayland",
"x11",
"proptest",
]
bench-support = ["profiler", "dep:criterion"]
# Preserve the published feature name while consumers migrate to `bench-support`.
bench = ["bench-support"]
inspector = ["gpui_macros/inspector"]
leak-detection = ["backtrace"]
wayland = []
x11 = [
"scap?/x11",
]
screen-capture = [
"scap",
]
windows-manifest = ["dep:embed-resource"]
profiler = ["dep:hdrhistogram"]
stacker = ["dep:stacksafe"]
[lib]
path = "src/gpui.rs"
doctest = false
[dependencies]
accesskit.workspace = true
anyhow.workspace = true
async-task.workspace = true
backtrace = { workspace = true, optional = true }
bitflags.workspace = true
collections.workspace = true
criterion = { workspace = true, optional = true }
ctor.workspace = true
derive_more.workspace = true
etagere.workspace = true
futures.workspace = true
futures-concurrency.workspace = true
gpui_macros.workspace = true
gpui_shared_string.workspace = true
http_client.workspace = true
image.workspace = true
inventory.workspace = true
itertools.workspace = true
log.workspace = true
num_cpus = "1.13"
parking = "2.0.0"
parking_lot.workspace = true
postage.workspace = true
proptest = { workspace = true, optional = true }
chrono.workspace = true
profiling.workspace = true
rand.workspace = true
raw-window-handle.workspace = true
regex.workspace = true
refineable.workspace = true
scheduler.workspace = true
resvg.workspace = true
usvg.workspace = true
ttf-parser = "0.25"
util_macros.workspace = true
schemars.workspace = true
seahash = "4.1"
serde.workspace = true
serde_json.workspace = true
slotmap.workspace = true
smallvec.workspace = true
async-channel.workspace = true
stacksafe = { workspace = true, optional = true }
strum.workspace = true
sum_tree.workspace = true
taffy = "=0.13.0"
thiserror.workspace = true
tracing.workspace = true
gpui_util.workspace = true
hdrhistogram = { workspace = true, optional = true }
waker-fn = "1.2.0"
lyon = "1.0"
pin-project = "1.1.10"
spin = "0.10.0"
pollster.workspace = true
url.workspace = true
uuid.workspace = true
web-time.workspace = true
heapless.workspace = true
ztracing.workspace = true
[target.'cfg(target_family = "wasm")'.dependencies]
getrandom = { version = "0.3.4", features = ["wasm_js"] }
uuid = { workspace = true, features = ["js"] }
[target.'cfg(target_os = "macos")'.dependencies]
core-video.workspace = true
# WARNING: If you change this, you must also publish a new version of zed-font-kit to crates.io
font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "94b0f28166665e8fd2f53ff6d268a14955c82269", package = "zed-font-kit", version = "0.14.1-zed", optional = true }
log.workspace = true
objc2 = { workspace = true, optional = true }
objc2-metal = { version = "0.3", optional = true }
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "windows"))'.dependencies]
scap = { workspace = true, optional = true }
[target.'cfg(target_os = "windows")'.dependencies]
windows = { workspace = true, features = ["Win32_Foundation", "Win32_System_Power"] }
[dev-dependencies]
backtrace.workspace = true
collections = { workspace = true, features = ["test-support"] }
env_logger.workspace = true
gpui_platform = { workspace = true, features = ["font-kit", "wayland", "x11"] }
gpui_util = { workspace = true }
lyon = { version = "1.0", features = ["extra"] }
rand.workspace = true
scheduler = { workspace = true, features = ["test-support"] }
unicode-segmentation = { workspace = true }
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]
http_client = { workspace = true, features = ["test-support"] }
proptest = { workspace = true }
reqwest_client = { workspace = true, features = ["test-support"] }
[target.'cfg(target_family = "wasm")'.dev-dependencies]
wasm-bindgen = { workspace = true }
web-sys = { version = "0.3", features = ["console"] }
[build-dependencies]
embed-resource = { version = "3.0", optional = true }
[target.'cfg(target_os = "macos")'.build-dependencies]
bindgen = "0.71"
[package.metadata.cargo-shear]
ignored = [
"bindgen",
"font-kit",
"getrandom",
"objc2",
"objc2-metal",
"tracing",
]
ignored-paths = ["src/_ownership_and_data_flow.rs"]
[[example]]
name = "hello_world"
path = "examples/hello_world.rs"
[[example]]
name = "move_entity_between_windows"
path = "examples/move_entity_between_windows.rs"
[[example]]
name = "image"
path = "examples/image/image.rs"
[[example]]
name = "input"
path = "examples/input.rs"
[[example]]
name = "on_window_close_quit"
path = "examples/on_window_close_quit.rs"
[[example]]
name = "window_movable"
path = "examples/window_movable.rs"
[[example]]
name = "opacity"
path = "examples/opacity.rs"
[[example]]
name = "pattern"
path = "examples/pattern.rs"
[[example]]
name = "set_menus"
path = "examples/set_menus.rs"
[[example]]
name = "system_notifications"
path = "examples/system_notifications.rs"
[[example]]
name = "shadow"
path = "examples/shadow.rs"
[[example]]
name = "svg"
path = "examples/svg/svg.rs"
[[example]]
name = "tab_stop"
path = "examples/tab_stop.rs"
[[example]]
name = "text"
path = "examples/text.rs"
[[example]]
name = "text_wrapper"
path = "examples/text_wrapper.rs"
[[example]]
name = "tree"
path = "examples/tree.rs"
[[example]]
name = "uniform_list"
path = "examples/uniform_list.rs"
[[example]]
name = "window_shadow"
path = "examples/window_shadow.rs"
[[example]]
name = "grid_layout"
path = "examples/grid_layout.rs"
[[example]]
name = "list_example"
path = "examples/list_example.rs"
[[example]]
name = "mouse_pressure"
path = "examples/mouse_pressure.rs"
[[example]]
name = "a11y"
path = "examples/a11y.rs"
[[example]]
name = "view_example"
path = "examples/view_example/view_example_main.rs"