New Features & OS Integration
Native File Association for .num Files
- Double-Click to Open: You can now associate and double-click .num files on your computer to open them directly in Numara.
- Installer Registry: The installer now registers the .num file extension as a custom "Numara Document" calculation workspace on Windows and macOS.
- Startup IPC Handshake: Added a synchronization bridge (rendererReady) between the Electron main process and the UI to safely load document contents on double-click launch.
Performance Optimizations
Main UI Bundle Shrunk by 500 KB
- Decoupled the UI formatting pipelines and editor hooks from the calculation engines.
- Symbolic libraries (nerdamer-prime and @formulajs/formulajs) are now completely stripped from the main UI script (numara.js), reducing the bundle size by 500 KB (from 2.1 MB down to 1.6 MB) and dramatically reducing app launch times.
- Third-party engines are now loaded strictly inside the background Web Worker (calc.worker.js).
Keypress Recalculation Time Decreased to <0.5ms
- Implemented a caching system that deep-compares exchange rates and currency lists inside the math context.
- Bypasses regular expression re-compilation and mathjs unit re-creation on every keypress, dropping calculation overhead from ~15ms to <0.5ms.
Security Hardening
- Enforced Sandbox Security: Configured explicit contextIsolation: true and nodeIntegration: false in Electron's browser preferences to strictly isolate renderer windows from system-level scripts.
Synchronization & Workspace Enhancements
- Fixed Page Sync Data Loss: Swapped the shared sync timer for a page-keyed Map of timers. Typing and switching across multiple pages quickly will no longer cancel or overwrite sync folder saves.
- Sync Filename Collision Protection: Validated file creation/renaming checks against sanitized safe filenames (e.g. "Math / Physics" vs "Math \ Physics" both saving as "Math - Physics.num") to prevent files from overwriting each other inside the sync directory.
- Auto-Termination for Frozen Workers: The calculation runner automatically terminates and restarts the background Web Worker if a calculation hangs or loops for over 1 second, restoring responsiveness immediately.
Bug Fixes & Refactoring
- Startup Dialog Crashing: Guarded the tray confirmation dialog in the before-quit handler with app.isReady(). Exiting secondary processes during single-instance checks will no longer throw unhandled ready dialog exceptions.
- Output Context Menu Indexing: Right-clicking values or links inside the outputs panel now maps precisely to the targeted line index using .closest('[data-index]') selectors.
- Empty Space Context Menu: Right-clicking empty areas in the output panel now falls back to targeting the last document line instead of failing silently.
- Copy Handlers Parameter Shifting: Aligned copy callback wrappers to remove the unused event parameter, preventing argument-shifting bugs that caused copy actions to fail.
- URL & Color Support inside Strings: Replaced basic comment stripping with a quote-aware string parser. Strings can now contain URLs (//) and hex color hashes (#) without triggering evaluation errors.
- Function Plotting Crash: Evaluated outputs are now cast to standard float Numbers before calling .toFixed() to prevent crashes when hovering over plots while in Fraction/BigNumber modes.
- Electron Detection: Standardized Electron detection on the context-bridged global window.numara API instead of the user agent string (which is overridden in development), restoring menu configurations.