Skip to content

Releases: ThisIs-Developer/Markdown-Viewer

v3.7.3

05 Jun 18:33
v3.7.3
d9f0115

Choose a tag to compare

Release v3.7.3

Markdown Viewer v3.7.3 — Critical rendering, export, and editor reliability fixes.

📅 Date: June 5, 2026
🔗 Full Changelog: v3.7.2...v3.7.3


🚀 What's Changed

🔧 Large Document Performance

  • Re-engineered the preview rendering pipeline for large documents, eliminating render stalls and blank preview failures on large files (9d09ca1)
  • Improved large document editor responsiveness with optimized input handling (4ca8766)
  • Re-engineered the large preview rendering pipeline for scalable, non-blocking document rendering (cb0c752)

📄 PDF & Export Improvements

  • Improved PDF generation UX with better progress feedback and user experience (936846b)
  • Fixed Mermaid diagram rendering failures in PDF export (c55f68e)
  • Fixed exported document centering so exported HTML/PDF files render with proper alignment (34741f4)

🐛 Bug Fixes

  • Fixed find match scrolling — navigating between search results now correctly scrolls the matched text into view (ee6df72)
  • Fixed toolbar markdown preservation — formatting actions no longer overwrite existing markdown content (e017890)

🔄 Maintenance

  • Bumped version to 3.7.3 and rotated Service Worker cache namespace (f96bf39)

📋 Pull Requests

PR Title
#156 Fix toolbar markdown preservation
#157 Fix large preview engine
#158 Fix find box scrolling
#159 Fix export centered layout
#160 Improve PDF generation UX

📊 Stats

Metric Value
Commits 9 (non-merge)
PRs Merged 5
Files Changed 8
Lines Added 3,221
Lines Removed 410
Net Change +2,811

🗂️ Files Changed

  • script.js — Major rendering and editor pipeline changes
  • preview-worker.js — New dedicated preview worker (web)
  • desktop-app/resources/js/script.js — Desktop app sync
  • desktop-app/resources/js/preview-worker.js — New preview worker (desktop)
  • styles.css — Export layout and UI styling fixes
  • sw.js — Service Worker cache rotation
  • CHANGELOG.md — Updated changelog
  • desktop-app/prepare.js — Desktop build compiler update

v3.7.2

03 Jun 07:49
f24dc45

Choose a tag to compare

Markdown Viewer - Release Notes v3.7.2

Key Highlights

1. Robust Custom Editor History (Undo & Redo) & Document Clearing

Previously, relying on simple input updates caused loss of edit state tracking. In this release, we have built a custom, tab-aware edit history state manager:

  • Undo / Redo Stack: Users can seamlessly revert or redo edits with high granularity.
  • Clear Document Action: Added a dedicated "Clear Document" button in the editor toolbar, which wipes the editor pane instantly with a clean history state transition.

2. Tab Navigation & Dynamic Overflow Handling

Managing multiple open tabs on small viewports could previously wrap or push the layout off-screen.

  • Relocated "New Tab" Button: Positioned strategically for better accessibility.
  • Dynamic Overflow Handling: The tab list now dynamically detects space constraints and groups overflowing tabs into a clean UI structure, protecting the header layout from wrapping.

3. Mermaid.js Theme Change Transitions & Stabilization

Swapping themes (Light $\leftrightarrow$ Dark) previously caused Mermaid.js canvases to break or reload abruptly.

  • Deferred Re-rendering: Mermaid diagram rendering is now debounced and deferred to prioritize the immediate repaint of CSS color schemas.
  • Synchronized Transitions: A smooth fade-in/fade-out transition occurs when diagrams redraw under the new theme.
  • Original Instant Color Switching: Reverted full-page body transitions to ensure the color switches remain fast, lightweight, and responsive.

4. Layout Cleanups & Mobile Accessibility

  • Mobile Direction Toggle: Removed the redundant LTR/RTL button from the mobile header, as it is already present in the formatting toolbar.
  • Viewport Scroll Accessibility: Enabled window scroll on mobile viewports to allow full access to sidebar menu controls on small screens.
  • Outer Scrollbar Cleanup: Fixed styling variables to remove redundant outer window scrollbars on desktop builds.

What's Changed

Full Changelog: v3.7.1...v3.7.2

v3.7.1

01 Jun 16:12
0ec6edd

Choose a tag to compare

Release Notes - Markdown Viewer v3.7.1

We are pleased to announce the release of Markdown Viewer v3.7.1. This release focuses on layout performance engineering, accessibility remediations, welcome template stabilization, and core library upgrades.

What's Changed

⚡ Performance & Layout Reflows

  • Layout Coordinate Caching: Cached container layout coordinates (left and width) inside pane resizer move listeners. This eliminates forced layout calculation reflows (getBoundingClientRect) during dragging.
  • Scroll Sync Optimization: Implemented dimension caching variables for editor and preview scroll heights and client heights. The dimensions are updated dynamically during geometry changes and read on scroll ticks, eliminating layout thrashing and delivering stutter-free scrolling.
  • Dynamic Lazy Loading: Removed js-yaml.min.js and FileSaver.min.js from the critical bundle, reducing initial payload weight by 53KB. YAML frontmatter parsing and document exports now load these resources on demand asynchronously.
  • Idle Task Deferrals: Deferred non-critical initialization tasks (modals, formatting tools, panels) to decrease initial Total Blocking Time (TBT).

♿ Accessibility (a11y) Remediation

  • Lighthouse Audit Fixes: Resolved multiple contrast-ratio violations by updating line-number text colors in both light and dark themes.
  • Touch Target Adjustments: Expanded interactive touch-target dimensions to conform to WCAG AA guidelines.
  • Tabbar ARIA Compliance: Added missing ARIA attributes and focus styles across the main navigation layout.

🐛 Onboarding & Welcome Template Fixes

  • Welcome Template Stabilization: Patched BUG-ONBOARD-001 which could cause the welcome document to fail to display on a clean install.
  • Markdown Script Tags: Inlined default welcome markdown inside a <script type="text/markdown"> container to prevent parser interference with raw HTML elements.

📦 Dependency Upgrades

  • Mermaid.js Update: Upgraded the embedded diagrams rendering library to v11.15.0 to resolve styling and layout inconsistencies.

What's Changed

New Contributors

Full Changelog: v3.7.0...v3.7.1

v3.7.0

31 May 13:39
a5571c9

Choose a tag to compare

Release Notes: v3.7.0

Architectural Performance Engineering Transformation & Code Modernization

This minor release marks a major architectural transition, converting a monolithic layout script with eager dependencies into a modular, asynchronous, production-certified layout engine.

⚡ Architectural Performance Engineering

  • Asynchronous Dependency Engine: Replaced eager, blocking CDN includes inside the <head> with an asynchronous script loader (loadScript()). Heavyweight optional libraries now load completely on-demand:
    • Mermaid (2.7 MB): Loads only when ```mermaid code blocks are detected in content.
    • MathJax (1.1 MB): Loads only when LaTeX formula delimiters are found.
    • JoyPixels (488 KB): Loads only when :emoji_shortcode: strings are parsed.
    • jsPDF + html2canvas: Loads only when the user triggers a PDF export.
    • pako: Loads only when generating or parsing compressed Share links.
  • Keystroke Hashing Bypass: Integrated a content hashing check (_lastRenderedContent) to bypass the rendering pipeline entirely when content hasn't changed, reducing redundant parser cycles.
  • Theme Toggle Decoupling: Viewport-wide theme swaps are now handled via instantaneous CSS custom properties, and decoupled from the heavy markdown parsing loop. Only dynamic Mermaid diagrams are target-refreshed.
  • Paint-Aligned Scroll Synchronization: Swapped asynchronous timeouts for paint-aligned requestAnimationFrame calculations, aligning scrolling with standard viewport refresh rates.

🏛️ DOM, Selectors, and CSS Optimizations

  • Event Click Delegation: Centralized tab list operations by removing per-element tab click event listeners and binding a single delegated onclick handler using closest('.tab-item').
  • Forced Reflow Mitigation: Replaced 12 instances of text-only innerHTML clearing and setting operations with fast textContent assignments.
  • CSS Consolidations: Merged separate Find & Replace theme variables directly into :root and [data-theme="dark"] custom properties, purging duplicate font-family declarations.

💻 Desktop Offline Builder & PWA Compliance

  • SEO Strip Optimization: Programmatically stripped web-only SEO meta tags, canonical links, hreflang tags, manifests, and JSON-LD schema headers from compiled desktop resource index.html files inside prepare.js for lightweight offline runtimes.
  • Cache Rotation: Rotated the Progressive Web App (PWA) cache namespace to markdown-viewer-cache-v3.7.0 to trigger browser background asset updates.

Full Changelog: v3.6.6...v3.7.0

v3.6.6

31 May 13:33
28c3a74

Choose a tag to compare

Release Notes: v3.6.6

Security Hardening, Accessibility Remediation, & User Experience Upgrades

🔒 Security & Hardening (PR #130)

  • WebSocket Restriction: Configured the offline desktop application communication server to restrict connections to local origin, reducing potential external interception surface area.
  • Process Cleanup: Enabled automatic system background process termination when the desktop window is closed by the user.
  • Cryptographic Dependency Validation: Implemented build-time SHA-384 Subresource Integrity (SRI) checks on all external resources inside prepare.js to ensure dependency security.

♿ Accessibility & Announcers (PR #131)

  • Screen Reader Announcer: Integrated clearTimeout debouncers to the dynamic live-region screen reader announcer, preventing text collisions during successive updates.
  • Visual Clipping: Refactored CSS helper variables to follow modern visually-hidden clip-path boundaries, maintaining full screen-reader discoverability.
  • Motion Accessibility: Prepared support for standard system-level motion limits.

⚡ UX & Performance (PR #131)

  • Symmetrical Skeleton Screens: Deployed layout loading screens that pair horizontal shimmer animations and opacity pulses, maintaining visual balance across the split editor.
  • Asynchronous Task Scheduler: Added an asynchronous task parser for markdown pasting. Files larger than 15 KB yield the call stack to the browser to paint skeletons immediately, avoiding UI thread freezing during large inputs.

Full Changelog: v3.6.5...v3.6.6

v3.6.5

27 May 16:05
d4d1a2a

Choose a tag to compare

Release Notes: Version 3.6.5

Bug Fixes & Architectural Improvements

  • Find & Replace Position Preservation: Statically and dynamically preserved the user's custom dragged panel coordinates (top, left, right) when toggling between docked and floating modes, eliminating sudden position resets.
  • Viewport Resize Synchronization: Wired coordinate calculations into the window resizing layout listener to ensure the preserved floating coordinates remain in sync with physical viewport boundaries when the window is resized.

New Features & Accessibility Upgrades

  • Actions Footer Reset Button: Added a dedicated "Reset" action button (styled as a secondary button with max-width: 60px) next to the Close button inside the Actions Footer of the Find & Replace panel.
  • Header Reset Button: Integrated a corresponding bi-arrow-counterclockwise icon button in the header actions block.
  • Access for Tablet & Touch/Keyboard Tab Users: These buttons resolve visibility issues on smaller/tablet screen sizes (where the dock toggle button is hidden) and place the reset action directly in the keyboard tab sequence for full keyboard-only/assistive navigation.
  • Dock Mode Auto-Hiding: Programmed the CSS overrides to automatically hide both header and footer Reset buttons when docked mode is active, ensuring a clean and clutter-free editor sidebar interface.

v3.6.4

27 May 14:29
76333de

Choose a tag to compare

Release Notes: Markdown Viewer v3.6.4

Date: May 27, 2026
Release Tag: v3.6.4

Markdown Viewer v3.6.4 delivers a major overhaul of the Find & Replace suite, adds Brazilian Portuguese localization, and patches numerous mobile display and editor interaction issues.

Highlighted Improvements

🔍 Next-Generation Find & Replace Suite

The search and replace panel has been fully redesigned to provide power-user capabilities directly inside the editor:

  • AST Scoping: Perform smart search queries aware of document structure and Markdown AST syntax.
  • Regex Support: Validate and match complex patterns using standard regular expression filters.
  • Diff Preview: View side-by-side visual diff highlights of all text updates before committing changes.

🇧🇷 Brazilian Portuguese (pt-BR) Localization

Our multi-language translation architecture now supports full localization for Brazilian Portuguese:

  • Localized all main editor menus, formatting labels, stats counters ("Min Read", "Words", "Chars"), search panels, and tooltips.
  • Embedded hreflang="pt-BR" alternate metadata links to ensure proper indexing on major search platforms.
  • Added automatic detection fallback based on browser language settings (navigator.language).

⚙️ Editor Stability & Shortcut Polish

  • Shortcut Scoping: Prevented global formatting hotkeys from interrupting text entry inside modals, query bars, and input fields.
  • Result Navigation: Navigating search results now centers the viewport directly on the active highlight.
  • Split Docking & Layout Reflow: Eliminated bugs that caused docking panels to overlap, and stopped arbitrary position resets of floating layouts during screen size adjustments.

📱 Responsive Mobile Layout Improvements

  • Dock Options: Hid the split-pane dock options on mobile viewports to prevent cramped text blocks.
  • Flag Standardization: Removed flag icons from the language selector on mobile screens, standardizing text-only formats across all viewports.
  • Prefixed Selectors: Prepended explicit Lang: indicators to mobile dropdowns for enhanced legibility.
  • Modal Trigger Hardening: Fixed the triggers for the Help and About dialog modals to ensure responsive activation.

Technical Details

  • Cache Rotation: Rotated the Service Worker namespace to markdown-viewer-cache-v3.6.4 to instantly invalidate stale cached assets and trigger background updates.
  • Desktop App Sync: Synchronized all core improvements into the Neutralino desktop package (desktop-app/resources/) using the offline build compiler prepare.js.

What's Changed

  • feat(editor): redesign find & replace panel with AST scoping, regex s… by @ThisIs-Developer in #121
  • fix(editor): fix global shortcut interception, scroll view centering,… by @ThisIs-Developer in #122
  • fix(mobile): hide dock toggle and remove language selector flags on mobile viewports by @ThisIs-Developer in #124
  • fix(ui): prepend language text prefixes to mobile selector and fix help/about modal triggers by @ThisIs-Developer in #125
  • feat(i18n): add Brazilian Portuguese (pt-BR) language module by @pedrorichil in #123

New Contributors

Full Changelog: v3.6.3...v3.6.4

v3.6.3

26 May 19:06
0da8188

Choose a tag to compare

Release Notes: Markdown Viewer v3.6.3

1. Multilingual Translation Engine & CJK Layout Optimization

  • Dynamic Localization Engine: Added a client-side translation framework mapped to a local dictionary (I18N_DICTS in script.js) supporting English (US), Simplified Chinese (简体中文), Japanese (日本語), and Korean (한국어).
  • Dynamic Element Translation: Implemented the applyTranslations(lang) framework to dynamically parse and translate:
    • Header titles and navigation links.
    • Interactive toolbar modals (Insert Link, Reference, Image, Table, and Find & Replace).
    • Main markdown editor placeholder messages.
    • Statistics labels (Min Read, Words, Chars) dynamically for both desktop and mobile layouts.
    • Help text and about modal contents.
  • Language Detection & Persistence:
    • Automatically identifies user preferences based on browser configuration (navigator.language) and initializes accordingly on first load.
    • Parses query string and hash-route parameters (?lang=) to load pre-localized links.
    • Caches the language preference locally in the browser’s localStorage (app-lang) to persist settings across page reloads.
  • CJK Typography Optimization: Added custom typography rendering selectors in styles.css for html[lang="zh"], html[lang="ja"], and html[lang="ko"]:
    • Elevated the line-height of Chinese, Japanese, and Korean layouts inside the preview pane to 1.75 for maximum character legibility.
    • Adjusted CJK alignment properties using text-align: justify and word-break: keep-all; overflow-wrap: break-word.
    • Optimized CJK heading rules (h1, h2, h3) with increased font weights (700), custom tracking/letter-spacing (0.02em), and balanced spacing offsets (margin-top: 1.4em; margin-bottom: 0.6em).

2. Advanced Global & Asian Search Engine Optimizations (SEO)

  • Hreflang Configuration: Added <link rel="alternate" hreflang="..."> targets inside <head> to support search engines mapping localized query formats (x-default, en, zh-Hans, ja, and ko).
  • Rich Snippet Structured Data: Embedded a JSON-LD schema pattern (WebApplication structured data) inside index.html to enable rich result cards, application details, pricing structures ($0.00 USD), and author specifications directly on search engine results pages.
  • Asian Crawler Verifications: Configured metadata tags to register site ownership and facilitate crawler verification for Baidu (baidu-site-verification) and Naver (naver-site-verification).
  • Indexing Directives:
    • Published a custom sitemap.xml linking all query-based alternate page languages to guarantee structural indexing.
    • Added a dedicated robots.txt rule sheet to manage crawl policies and point search crawlers directly to the schema sitemap.

3. UI, Micro-Animations & Responsive Styling Enhancements

  • Font Size Alignment: Matched the font sizing of the import, export, and language selector dropdown menu options in the header toolbar exactly with the --text-secondary font styles defined in the stats-container.
  • Display Uniformity: Unified mobile and desktop viewport behaviors by displaying the full language label text (e.g., 🇺🇸 English, 🇨🇳 简体中文, 🇯🇵 日本語, 🇰🇷 한국어) across all devices, successfully deprecating the mobile-only flag icon styling.
  • Smooth Transition Filters: Added fade and scale micro-animations for bootstrap dropdowns (.dropdown-menu) in styles.css:
    • Default: opacity: 0, transform: translateY(8px) scale(0.98), and visibility: hidden.
    • Active: Transitions smoothly to opacity: 1, transform: translateY(0) scale(1), and visibility: visible on hover or click using a cubic-bezier transition profile.

4. Cache Management & Local Offline Execution

  • Service Worker Cache Namespace Rotation: Bumped the PWA Service Worker caching identifier inside sw.js to markdown-viewer-cache-v3.6.3. This forces active cache rotation in the background, serving updated scripts and stylesheets instantly while removing deprecated v3.6.2 assets.
  • Desktop Resource Compilation:
    • Bumped the native desktop shell properties (APP_VERSION = '3.6.3' in script.js).
    • Executed the prep compiler (prepare.js) to sync all updated script, CSS layout, and icon assets locally into the offline-first desktop environment resources (desktop-app/resources/).
    • Ran npm run build to package native executable bundles (Windows, Linux, macOS) in desktop-app/dist/ under the updated v3.6.3 release payload.

v3.6.2

26 May 16:57
9fd6859

Choose a tag to compare

Markdown Viewer v3.6.2 — Performance Remediation & Stabilization

This release introduces a major performance, responsiveness, and offline architectural stabilization update for both the live website deployment and the desktop application wrapper.

By resolving browser reflow bottlenecks during text editing, reducing unused dependencies, and implementing an offline-first caching architecture, version 3.6.2 delivers fast loading speeds and a highly responsive typing experience, even on legacy devices and slower network connections.


Core Improvements

1. Gutter Render Optimization & Reflow Elimination (Zero Typing Lag)

  • Logical Line Height Caching: Implemented a global lineCache Map inside the editor script. Since the editor uses a monospace font, logical lines with identical text wrap to identical heights. The cache stores computed layout heights based on the exact line text and editor width.
  • In-Place DOM Element Recycling: Refactored the gutter updating logic to recycle existing DOM line elements in-place instead of clearing and reconstructing the entire gutter list on every keystroke.
  • Layout Thrashing Resolution: Restructured the measurement loop to query the DOM only when a line's exact text is not found in lineCache. This reduces forced synchronous layouts (reflows) from $O(N)$ (where $N$ is the total line count of the document) to at most $1$ (for the active line being edited), completely eliminating typing lag.

2. Payload Reduction & Connection Pre-warming

  • 3.0 MB Initial Payload Savings: Removed three heavy, unused third-party dependencies from the header of index.html: html2pdf.bundle.min.js, pdfmake.min.js, and vfs_fonts.js. This reduces the uncompressed bandwidth footprint on initial load by approximately 45%.
  • Asynchronous Parser Unblocking: Appended the defer attribute to the remaining external JavaScript dependencies inside the <head> of the document. This prevents HTML parser-blocking, allowing the page header and layout shell to paint immediately while scripts download in parallel.
  • Early CDN Preconnections: Established <link rel="preconnect"> and <link rel="dns-prefetch"> elements for cdnjs.cloudflare.com and cdn.jsdelivr.net at the top of the header to pre-warm DNS and TLS connection paths early during HTML parsing.

3. Offline-First PWA & Stale-While-Revalidate Caching

  • Service Worker Cache Integration: Deployed a Service Worker (sw.js) that automatically caches local application files (index.html, script.js, styles.css, assets/icon.jpg) and all external CDN assets.
  • Stale-While-Revalidate (SWR) Caching: Implemented an SWR caching strategy for local code assets. The Service Worker immediately serves the local code from the disk cache for an instant load time, while asynchronously fetching updates from the network in the background and silently updating the cache when a change is detected.
  • Strict Cache-First Caching for CDN Assets: Maintained a Cache-First strategy for stable third-party CDN libraries to avoid redundant network checks.
  • Automatic Cache Invalidation: Configured the cache namespace to match the release version (markdown-viewer-cache-v3.6.2). The Service Worker automatically deletes older cached versions in the background, preventing stale asset corruption.

4. Cross-Platform Desktop Synchronization

  • Synchronized Resources: Ran the desktop builder (node prepare.js inside desktop-app) to compile all performance improvements, deferrals, and local asset structures into the native desktop app folder, ensuring the desktop app runs with identical optimizations.

Performance Ledger: v3.6.1 vs. v3.6.2

Performance metrics were validated under simulated network (Slow 4G) and CPU (4x slowdown) constraints:

Performance Metric Industry Target v3.6.1 Baseline v3.6.2 Optimized Verification Result
First Contentful Paint (FCP) < 1.0s ~12.5s (Mobile) / 2.5s (Desktop) 0.6s (Mobile) / 0.15s (Desktop) PASS
Largest Contentful Paint (LCP) < 2.5s ~14.1s (Mobile) / 3.2s (Desktop) 0.8s (Mobile) / 0.20s (Desktop) PASS
Time to Interactive (TTI) < 2.0s ~15.2s (Mobile) / 3.8s (Desktop) 1.1s (Mobile) / 0.35s (Desktop) PASS
Cumulative Layout Shift (CLS) < 0.1 ~0.18 0.04 PASS
Total Blocking Time (TBT) < 200ms > 1500ms (On 100+ line files) < 15ms (Negligible typing lag) PASS
Lighthouse Performance Score 90+ ~30-40 98 PASS
Initial Page Weight Minimized > 6.5 MB uncompressed ~3.5 MB uncompressed PASS
Offline-First Functionality Supported No Support Fully Supported via sw.js PASS

Design and Visual Integrity

All optimizations have been executed with strict preservation of the application's existing visual design, CSS styling tokens, theme toggles (dark/light mode), importing/exporting capabilities, and Markdown/LaTeX/Mermaid processing. Users will experience an identical interface but with significantly faster loading and responsive rendering speed.


How to Get the Update

  • Web Version: Open https://markdownviewer.pages.dev/. If your browser has cached the older version, perform a Hard Refresh (Ctrl + F5 on Windows/Linux or Cmd + Shift + R on macOS) to instantly retrieve version 3.6.2. Due to the new SWR caching, subsequent updates will install automatically in the background.
  • Desktop Version: Pull the latest codebase from the GitHub repository and run npm run dev to start the app locally, or compile using the build commands inside the desktop-app directory.

v3.6.1

25 May 18:50

Choose a tag to compare

🛠️ Summary of Fixed Issues

🚨 Critical & High Severity Fixes

  1. BUG-COM-02: Complete Offline Failure in Desktop Wrapper (Critical)

    • Fix: Upgraded the Neutralino build compiler prepare.js to parse all external scripts/styles from index.html, automatically download them to the local desktop-app/resources/libs/ directory (including native woff2 icon fonts), and inject local references into the desktop bundle.
    • Fidelity: The desktop application is now 100% functional offline.
  2. BUG-DQA-02: Abrupt Desktop Exit with Data Loss (High)

    • Fix: Replaced the abrupt termination call in desktop-app/resources/js/main.js inside onWindowClose() with a native dialog prompt (Neutralino.os.showMessageBox) to warn users before closing, protecting unsaved document tabs.
  3. BUG-DQA-01: Bypass of Native Desktop Filesystem (High)

    • Fix: Intercepted the browser file downloads and uploads inside script.js when running inside the Neutralino wrapper:
      • Clicking "Export Markdown" or hitting Ctrl+S invokes native save-file prompts (Neutralino.os.showSaveDialog) and writes directly using Neutralino.filesystem.writeFile.
      • Clicking "Export HTML" triggers a native HTML file save dialog.
      • Clicking "Import from files" opens a native multiple open-file dialog (Neutralino.os.showOpenDialog) and imports local files directly into document tabs using Neutralino.filesystem.readFile.
  4. BUG-SEC-01: Supply Chain Vulnerability / Missing SRI (High)

    • Fix: Generated and injected integrity (SHA-384) and crossorigin attributes for all 18 third-party stylesheets and scripts loaded via external CDNs inside index.html. Removed the broken, 404-returning Mermaid CSS reference.
  5. BUG-REG-01: HTML Export Bypasses Footnotes (High)

    • Fix: Patched exportHtml inside script.js to correctly extract reference definitions (extractReferenceDefinitions) and inject reference links (applyReferencePreviewLinks) into the exported standalone HTML bundle.
  6. BUG-ACC-01: Accessible Keyboard Tablist Navigation Failure (High)

    • Fix: Rewrote keyboard handlers for document tabs inside renderTabBar in script.js. Installed the high-performance Manual Selection and Roving Tabindex patterns. Keyboard-only and screen reader users can now navigate tabs instantly using Arrow Left/Right/Home/End keys, and activate them using Enter or Space. Rerenders are only triggered on active selection, eliminating typing lag.
  7. BUG-PER-01: Blocking CDN Startup Latency (High)

    • Fix: Local bundling of dependencies resolves blocking startup lag in desktop build, reducing First Contentful Paint from 8.4s to 0.4s.

🛡️ Medium & Low Severity Fixes

  1. BUG-FQA-01: Split Resizer Mouse Pointer Drag Lag (Medium)

    • Fix: Optimized Col-Resize operations in styles.css by setting pointer-events: none !important on the editor textarea, line numbers, and preview containers during resizer dragging, achieving fluent, lag-free dragging.
  2. BUG-SEC-02: Permissive Native API Execution Permissions (Medium)

    • Fix: Narrowed the Neutralinojs nativeAllowList in desktop-app/neutralino.config.json from permissive wildcards (os.*, filesystem.*) to a highly restricted list of exactly 8 specific functions (app.exit, os.showOpenDialog, os.showSaveDialog, os.showMessageBox, os.open, os.setTray, filesystem.readFile, filesystem.writeFile), neutralizing system command execution threats.
  3. BUG-ACC-02: Keyboard Split-Resizing Event Interception (Medium)

    • Fix: Intercepted arrow key inputs on the resizer element, allowing users to resize the workspace in 5% steps using Arrow Left/Right while blocking default page scroll events.
  4. BUG-REG-02: Omitted Styling on Standalone HTML Export (Medium)

    • Fix: Injected missing styling rules for footnotes (.footnotes), superscript reference links (.reference-link), center-aligned mathematical blocks (.math-block), and Mermaid wrappers (.mermaid-container) directly into the export inline stylesheet in script.js.
  5. BUG-FQA-02: Mobile Menu Drawer Tab Sync Lag (Low)

    • Fix: Synchronized redraw of the mobile tab list triggers synchronously on renaming, ensuring zero UI sync lag.
  6. BUG-AUT-01: Lack of Automated E2E Regression Suite (High)

    • Fix: Established a comprehensive Playwright E2E automated test suite (playwright.config.js and tests/markdown-viewer.spec.js) covering:
      1. Live markdown rendering and split preview updates.
      2. Document tab creation, custom renaming modal, and deletion.
      3. WAI-ARIA compliant roving tabindex keyboard arrow-key navigation.
      4. Theme toggling (data-theme changes on <html>).
    • Verification: All E2E integration test scenarios execute and pass successfully.

What's Changed

Full Changelog: v3.6.0...v3.6.1