JuiceMount app 0.4.0 — Resilience & recovery, faster navigation on slow links
Faster on slow links — dramatically quicker directory listings and first-folder-opens over cellular/metered connections: AppleDouble sidecars served from RAM (and persisted across restarts), a two-lane read gate so a big transfer can't starve browsing, serialized drains so uploads don't saturate the uplink, and a self-healing metadata push channel. Newly created content shows up in seconds, not up to an hour.
Resilience & recovery — auto-remounts if the volume drops while the backend is still alive; in-flight reads/writes park and retry across a brief backend (Redis) restart instead of failing; no more disconnect-cycling on machines with a large local cache at launch; faster startup (removed a deadlock + added a boot fast-path).
Correctness — moving a folder keeps all of its children; copying .app / .framework / NLE bundles is reliable (stable symlink + inode identity); a file left zero-tailed by an interrupted download is flagged at finalize instead of being served as complete.
Visibility — a clear, actionable alert when macOS's Local Network permission is blocking the app (instead of silently appearing "offline"); a "Why is it slow?" self-diagnosis; a warm-up progress card after launch/reconnect; Finder QuickLook thumbnails served from a local cache; instant (incrementally aggregated) folder sizes; a pinned-usage overlay on the menu-bar cache bar.
Server & Manager (control-plane container)
Security — the manager runs as root on your NAS, and two path-confinement holes are closed: trash-restore could move a caller-controlled file to any host path (a root code-execution path), and a scheduled backup could read outside its permitted source roots (arbitrary-file exfiltration). Both are now gated exactly like interactive migrations.
Features
- Trash retention is readable and settable in embedded mode (set
JM_OVERVIEW_META); the UI distinguishes "disabled (0)" from "unknown". - Optional scheduled GC / FSCK / compact per maintenance lever — off by default, each pre-filled with a conservative recommended cadence and inline guidance (JuiceFS already auto-handles the routine cleanup, so these are opt-in hygiene).
- Farm tab: "Clear finished" for the recent-jobs list, and the currently-running sweep floats to the top.
- Fixes: a jobs-API data race and an unbounded Redis job-index leak.
The app updates itself via Sparkle. Full details in CHANGELOG.md.