1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
[]
= "frus-shell"
= "frus — the platform layer: window + event loop (Milestone 0)"
= true
= true
= true
= true
= true
= "README.md"
= "https://docs.rs/frus-shell"
= ["gui", "winit", "window", "event-loop", "wasm"]
= ["gui", "wasm"]
# The `net` feature turns on the cross-platform `fetch` HTTP helper: the `ureq`
# client natively, the browser's `fetch` on the Web. Off by default, so an app that
# does no networking bundles neither ureq nor its TLS stack.
# The `json` feature, which implies `net`, adds `Request::json_body` / `send_json`
# through serde.
#
# The `bundled-*` features forward the **bundled fonts** (milestone 292): they are
# ~3.4 MB of faces, and an application that ships its own turns off the ones it does
# not need. All on by default.
[]
# A driver with no window, for an application's tests to feed input and frames through the
# shell's own paths. Hidden; not for applications to ship.
= []
# Hot reload under `frus run`: connects to the patch server it starts, applies each patch, and
# rebuilds the interface. Development only; `frus run` turns it on.
= ["dep:dioxus-devtools", "dep:serde_json", "frus-widgets/hot-reload"]
# The system's file dialogs: `FileDialog` (milestone 698). Desktop only; off by default, as it
# brings the desktop portal's D-Bus client on Linux.
= ["dep:rfd"]
# The system's notifications: `SystemNotification` (milestones 701 to 704). The desktop,
# Android and the Web; off by default, as it brings the D-Bus client on Linux and the toast
# bindings on Windows.
= ["dep:notify-rust"]
# The tray icon: `Tray` (milestone 706). The desktop; off by default. On Linux it needs GTK 3's
# development files to build (`libgtk-3-dev`), the menus being made with it.
= ["dep:tray-icon"]
# The taskbar's badge and progress: `Taskbar` (milestone 708). The desktop; off by default.
= ["dep:windows", "dep:objc2", "dep:objc2-app-kit", "dep:objc2-foundation", "dep:zbus"]
# Global shortcuts: `GlobalShortcut` (milestone 709). The desktop (X11 on Linux); off by default.
= ["dep:global-hotkey"]
= ["dep:ureq"]
= ["net", "dep:serde", "dep:serde_json"]
= ["frus-gpu/default", "frus-widgets/default"]
= ["frus-gpu/bundled-sans", "frus-widgets/bundled-sans"]
= ["frus-gpu/bundled-italic", "frus-widgets/bundled-italic"]
= ["frus-gpu/bundled-mono", "frus-widgets/bundled-mono"]
= ["frus-gpu/bundled-arabic", "frus-widgets/bundled-arabic"]
# The `cfg` aliases (`desktop` / `android` / `ios` / `web`) — see `build.rs`. Already
# in the tree, since winit uses it, so nothing extra is downloaded.
[]
= "0.2"
[]
# The client of the patch server `frus run` drives (the subsecond protocol).
= { = "0.7", = true }
= { = "../frus-gpu", = "0.5", = false }
# How long the fonts took to load, for the start-up report (milestone 683).
= { = "../frus-text", = "0.5", = false }
= { = "../frus-widgets", = "0.5", = false }
= true
= true
= true
# Typed JSON for the `fetch` helper (the `json` feature): serialisation and
# deserialisation. Pure Rust, so it holds on all three targets, unlike ureq, which is
# native only.
= { = "1", = ["derive"], = true }
= { = "1", = true }
# A portable monotonic clock: `std::time` natively, `performance.now()` on the Web,
# where `std::time::Instant` panics. One API for all three platforms.
= "1"
# Native (desktop + Android): a blocking wait on GPU init. The Web is asynchronous
# instead — see `run_web`.
[]
= true
# The async runtime (see `src/runtime.rs`). `async-executor` is the scheduler and
# `async-io` the reactor — the part that was missing, and without which a future that
# waits on a timer or a socket simply never wakes up. Both are small, pure Rust and
# free of proc macros; between them they are what lets a `Command` be a real future
# rather than a blocking call wearing a future's clothes.
= "1"
= "2"
= "2"
# Moving a **blocking** call off the executor and onto a pool sized for waiting. The
# `net` feature's client is blocking, and a blocking call on a four-worker executor
# is how you starve every other effect in the application.
= "1"
# The `fetch` helper's native HTTP client (the `net` feature): blocking, driven to
# completion inside the async future's body, on its own thread. TLS through rustls,
# ureq's default.
= { = "3", = true }
# The reader's preferred languages, everywhere but Android and the Web — Windows,
# macOS, Linux and iOS each keep them somewhere different, and this is one small crate
# over the four. It is **already in the tree**: cosmic-text pulls it, so naming it here
# adds no dependency at all. Android has a better answer (the activity's `Configuration`,
# read over the JNI walk that is already there) and the Web has its own.
[]
= "0.3"
# Desktop only — not Android, not iOS, not the Web: clipboard, console logger and
# accessibility. (AccessKit exposes the semantic tree to the native screen readers —
# UIA on Windows, AT-SPI on Linux, macOS; the Android and Web providers are separate.)
#
# iOS is excluded explicitly: `arboard`, a desktop clipboard, and `accesskit_winit`
# have no UIKit backend, and stderr is not readable on a device. Cargo does not
# evaluate `build.rs` aliases here, hence the list spelled out in full.
[]
# Decodes the application's icon for the window (`AppIcon`); already in the tree through the
# widgets' `images` feature.
= { = "../frus-image", = "0.5" }
= true
= true
= "0.25"
= "0.34"
# The system's file dialogs (feature `file-dialogs`): the Windows and macOS dialogs, and the
# desktop portal on Linux, which needs no system library to build against.
= { = "0.17.2", = true }
# The system's notifications (feature `notifications`): Windows toasts, macOS notifications,
# and the desktop's notification server over D-Bus on Linux, in pure Rust.
= { = "4.18.2", = true }
# The tray icon (feature `tray`): the notification area on Windows, the menu bar on macOS, and
# the desktop's status area over D-Bus on Linux (below, with its `ksni` feature).
= { = "0.26.1", = true, = false }
# Global shortcuts (feature `global-shortcuts`): RegisterHotKey on Windows, the Carbon hot keys on
# macOS, a key grab on X11 — pure Rust everywhere, no system library to build against.
= { = "0.9.0", = true }
# Web (wasm32 + WebGPU): the browser entry point, JS futures, console logs.
# The application's content on the title bar's line (milestone 640): the frame and the
# window procedure, which winit does not reach. Already in the tree.
# The tray icon on Linux and the BSDs: the desktop's status area through D-Bus (`ksni`), not the
# older indicator library a desktop may not have.
[]
= { = "0.26.1", = true, = false, = ["ksni"] }
# The taskbar (feature `taskbar`) on Linux: the launcher entry signal, over D-Bus.
[]
= "5"
= true
# The taskbar (feature `taskbar`) on macOS: the Dock tile's badge.
[]
= { = "0.6", = true }
= { = "0.3", = true, = false, = ["std", "NSApplication", "NSDockTile", "NSResponder"] }
= { = "0.3", = true, = false, = ["std", "NSString"] }
[]
# The taskbar (feature `taskbar`): its button's progress and overlay, a COM interface the raw
# bindings below do not carry. Already in the tree through the tray and the notifications.
= { = "0.62", = true, = ["Win32_Foundation", "Win32_Graphics_Gdi", "Win32_System_Com", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] }
= { = "0.59", = [
"Win32_Foundation",
"Win32_Graphics_Dwm",
"Win32_Graphics_Gdi",
"Win32_System_LibraryLoader",
"Win32_System_Registry",
"Win32_System_SystemInformation",
# The process's creation time, for the start-up report (milestone 683).
"Win32_System_Threading",
"Win32_UI_Accessibility",
"Win32_UI_Controls",
"Win32_UI_HiDpi",
"Win32_UI_Input_KeyboardAndMouse",
"Win32_UI_Shell",
"Win32_UI_WindowsAndMessaging",
] }
[]
= "0.2"
= "0.4"
# `Uint8Array`: reading a response body as bytes rather than as text (milestone 373).
= "0.3"
= "0.1"
# `Request`/`RequestInit`/`Headers`/`Abort*`: the `fetch` HTTP helper (`net`) on the Web.
= { = "0.3", = [
"Document",
"Window",
# `navigator.languages`: the reader's preferred languages, in order (milestone 454).
"Navigator",
# `navigator.clipboard`: copy and paste (milestone 526, #17).
"Clipboard",
# The address bar and the browser history (deep links): `location`, `history`, the base URL
# of the document and the `popstate` listener.
"History",
"Location",
"Url",
# The tab's session storage: the component states a reload under `frus run` keeps.
"Storage",
"Node",
"Event",
"EventTarget",
# The bridge's buttons stop an Enter or a Space from reaching the shell as a key (#23).
"KeyboardEvent",
# The tab's icon: the PNG becomes a Blob, and its object URL the icon link's address.
"Blob",
"BlobPropertyBag",
"Element",
"Response",
"Request",
"RequestInit",
"Headers",
"AbortController",
"AbortSignal",
# The page's notifications (milestone 704): `SystemNotification` on the Web.
"Notification",
"NotificationOptions",
"NotificationPermission",
# The accessibility bridge (milestone 564, #18): the canvas winit attached the
# window to, and the element type its fallback-content nodes are built as.
"HtmlCanvasElement",
"HtmlElement",
# The element a text field is edited through (milestone 711): the two kinds, the keys it
# hands to the canvas, a composition's text, and where the canvas is on the page.
"HtmlInputElement",
"HtmlTextAreaElement",
"KeyboardEventInit",
"CompositionEvent",
"DomRect",
# The browser's console, a method per log level (milestone 604).
"console",
# The page's clock, which counts from the navigation (milestone 683).
"Performance",
] }
# On Android, winit goes through the native activity (android-activity) and the logs
# land in logcat.
[]
= { = true, = ["android-native-activity"] }
= "0.14"
# The input bridge (InputConnection): loading the bundled dex plus its natives.
= "0.21"