Repository navigation
VOMD v1.1.0
Added
- Open a file from the window:
Ctrl+Oor the toolbar's folder button shows the desktop's file dialog (the XDG portal's, so KDE's, GNOME's or the GTK one, elsezenityorkdialog), starting in the document's folder. The empty window says so, and offers dropping a file only on X11, where it works. - A Debian package (
vomd_<version>-1_amd64.deb, Debian 12+ and Ubuntu 24.04+) with a man page, and an AppImage for any x86-64 distribution with glibc 2.36 or newer, both attached to each release and checked by CI on Debian 12, Debian 13 and Ubuntu 24.04, on X11 and Wayland. - The Arch packages list the file dialogs Open can use as optional dependencies:
xdg-desktop-portal-gtk,zenityandkdialog. KDE and GNOME already have a portal file chooser.
Fixed
- On X11 the portal's file dialog belongs to the VOMD window, so the desktop keeps it in front of it. (On Wayland it still has no parent window.)
- A portal that crashes or stops answering no longer blocks Ctrl+O: the dialog's calls give up after 25 seconds, and if the portal leaves the session bus while its dialog is up, the window says so and Ctrl+O works again. Before, "A file dialog is already open" stayed until VOMD was restarted.
- The empty window offers dropping a file only on X11, decided by the display VOMD connected to, not by environment variables.
- The toolbar's settings button opens
settings.iniin a terminal editor set as the default (Terminal=true, such as Neovim) throughxdg-terminal-exec. Before, on desktopsxdg-opendoesn't know (Hyprland, Sway) the editor started with no terminal and waited unseen. If the file can't be opened, a note in the window says why. - Release binaries are built on Debian 12 (glibc 2.36), so a glibc older than 2.39 no longer prints "weak version `GLIBC_2.39' not found" at every start.
- Documents over 1 MB, which are parsed in pieces, render the same as when parsed whole when the line that ends an HTML block looks like a table, a code fence or another HTML block, or when a code fence is left open in a list item. Before, the piece could be cut inside a code block or a table, and the rest of the document rendered differently.
Budgets, measured on the release runner
A shared runner is two to three times slower than the machine the time budgets
are for, so start and scroll times are reported here, not gated.
| Metric | Build | Measured | Budget | |
|---|---|---|---|---|
| ✅ | stripped binary | default |
3.73 MB | ≤ 4.0 MB |
| ✅ | cold start, tiny.md | default |
94.5 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, tiny.md | default |
27.4 ms | ≤ 50 ms (median of 19) |
| ✅ | cold start, readme.md | default |
35.0 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, readme.md | default |
32.4 ms | ≤ 50 ms (median of 19) |
| ✅ | cold start, spec.md | default |
35.1 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, spec.md | default |
30.3 ms | ≤ 50 ms (median of 19) |
| cold start, huge.md | default |
115.8 ms | ≤ 100 ms (first of 20 runs) | |
| warm start, huge.md | default |
82.8 ms | ≤ 50 ms (median of 19) | |
| ✅ | idle RSS, 50 KB doc, 1080p | default |
17808 KB | ≤ 30000 KB |
| ✅ | idle CPU, 50 KB doc (idle at 44 ms) | default |
0 ticks/3s | ≤ 1 tick |
| ✅ | idle RSS, 5 MB doc, 1080p | default |
32556 KB | ≤ 60000 KB |
| ✅ | idle CPU, 5 MB doc (idle at 1391 ms) | default |
0 ticks/3s | ≤ 1 tick |
| ✅ | stripped binary | --no-default-features |
2.99 MB | ≤ 3.0 MB |
| ✅ | cold start, tiny.md | --no-default-features |
75.9 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, tiny.md | --no-default-features |
30.9 ms | ≤ 50 ms (median of 19) |
| ✅ | cold start, readme.md | --no-default-features |
68.3 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, readme.md | --no-default-features |
33.3 ms | ≤ 50 ms (median of 19) |
| ✅ | cold start, spec.md | --no-default-features |
93.6 ms | ≤ 100 ms (first of 20 runs) |
| ✅ | warm start, spec.md | --no-default-features |
30.9 ms | ≤ 50 ms (median of 19) |
| cold start, huge.md | --no-default-features |
106.2 ms | ≤ 100 ms (first of 20 runs) | |
| warm start, huge.md | --no-default-features |
78.1 ms | ≤ 50 ms (median of 19) | |
| ✅ | idle RSS, 50 KB doc, 1080p | --no-default-features |
18264 KB | ≤ 25000 KB |
| ✅ | idle CPU, 50 KB doc (idle at 42 ms) | --no-default-features |
0 ticks/3s | ≤ 1 tick |
| ✅ | idle RSS, 5 MB doc, 1080p | --no-default-features |
32848 KB | ≤ 55000 KB |
| ✅ | idle CPU, 5 MB doc (idle at 1297 ms) | --no-default-features |
0 ticks/3s | ≤ 1 tick |
| ✅ | scroll frame, 4K, p95 | default |
3.60 ms | ≤ 8 ms |
| ✅ | scroll frame, 4K, p95 | --no-default-features |
3.41 ms | ≤ 8 ms |
| ✅ | image RSS, 50 local PNGs | default |
44736 KB | ≤ 62768 KB |
| ✅ | image RSS, 50 remote PNGs | default |
41912 KB | ≤ 62768 KB |
| ✅ | image RSS, 50 remote PNGs in view, polled every 16 ms | default |
42036 KB | ≤ 62768 KB |
| ✅ | image RSS, 50 remote PNGs in view, polled every 50 ms | default |
41948 KB | ≤ 62768 KB |
| ✅ | image RSS, 16,384 remote JPEGs of 325 KB cut to 178 bytes | default |
28440 KB | ≤ 62768 KB |