Feather MD v1.9.0
This is a minor release focusing on native OS integration, major memory reduction, and print pipeline reliability.
Summary
- System Tray Support: On Windows, closing the window now keeps Feather MD running in the background. This ensures you do not lose background tasks.
- Lower Memory Footprint: By loading heavy math/diagram libraries on-demand, disabling unused GPU browser processes, and trimming memory pages when minimized, the app baseline RAM is significantly reduced.
- Reliable PDF Exports: Closing the app immediately after printing will no longer result in broken, 0-byte PDF files. The application now prompts you and waits for the PDF compilation to complete.
- Open Files in Existing Window: Launching another file while the app is already open will now open it directly inside the running window instead of launching a duplicate process.
- Live Updater Progress: The auto-updater window now displays a live downloading percentage showing the real progress of the download.
- Flexible Recent Files list: You can now remove individual items from your recent files list or clear the entire history.
Details
- System Tray Orchestration: Built native support in lib.rs using Tauri
TrayIconBuilderand wired live menu updates, window hide/show behaviors, and context actions. Synchronized state checking in window.js via isTrayActive so the frontend fails safe to standard exit on platforms without tray support. - Working Set Trimming: Implemented COM interface query in Rust to access
ICoreWebView2_19::SetMemoryUsageTargetLeveland set the target level to low when hiding the window. - Resource Reductions: Excluded GPU rendering and auxiliary browser features (such as
msWebOOUI,msPdfOOUI, andmsSmartScreenProtection) from tauri.conf.json. Configured opt-level "s", Link-Time Optimization (LTO), single-codegen-unit builds, and aborted panics in release profiles inside Cargo.toml. - On-Demand Math and Diagram Rendering: Extracted math and diagram examples from welcome.js and split them into a separate template loaded only on user request, avoiding cold-start import overhead.
- Compiling PDF Overlay: Integrated a custom print-status checking loop inside main.js using the
window.__FEATHER_PRINTING__flag. Intercepted close requests to display a#print-overlayspinner in index.html, delaying the window teardown until compile time completes. - Asset Protocol Relocation: Configured local image path rewriting in preview.js to route absolute, relative, and file:// paths through Tauri's
convertFileSrchelper. - Single-Instance Locks: Enforced a single application instance check via
tauri-plugin-single-instance. Wired launch arguments to be captured and sent to the active window via theopen-file-from-argsevent. - Editor Transaction Identification: Replaced global boolean flags with compartment-level transaction annotations using CodeMirror 6 to distinguish programmatic content updates from user edits inside editor.js.
- Test Alignment: Updated Vitest test files html.test.js, performance.bench.js, and toolbar.test.js to support the new menu entries, correct font classes, and execute authentic regex stripping benchmarks.