20 KiB
PanConverter - Updates & Changelog
Version 4.9.0 (2026-09-14)
New: Visual Flow Chart Editor (Sidebar panel → "Flow Chart")
- Pure
flowchart-store.js— graph data store with bounded undo/redo (depth 50) and injectable persistence IO (testable without touching the filesystem) - 5 node shapes (process, decision, terminator, subroutine, document) × 3 edge kinds (solid, dotted, thick) with full keyboard accessibility
- Hand-rolled SVG canvas: drag nodes, double-click to edit labels, Alt+drag from a node edge to wire connections, in-place label editing, delete + backspace to remove the selection
flowchart-shapes.js— pure SVG path templates (no DOM, fully unit-tested)flowchart-mermaid.js— translates the graph to Mermaidflowchart TDsource that renders identically in the preview pane- Sidebar panel
src/sidebar/flowchart-panel.jswith debounced preview (250 ms), debounced persistence (500 ms), and Ctrl+Z / Ctrl+Shift+Z / Delete / Backspace shortcuts - 3 thin IPC channels (
get-user-data-path,read-text-file,write-text-file) sandboxed toapp.getPath('userData')via path validation - Auto-save to
<userData>/flowchart-session.json; restores on reopen - Rail button in the sidebar; toggle the panel with
Ctrl+Alt+F - Insert-at-Cursor wraps the generated Mermaid in a fenced
```mermaidblock at the current cursor position in the active editor tab - 73 new tests
New: ASCII Art Generator upgrade
- Pure
AsciiArtorchestrator (generate / listFonts / getFontMeta) unifying hand-coded fonts + figlet + 19 named templates behind one API - 17 hand-coded font tables extracted from inline renderer code (5 existing + 12 new: Big, Small, Lean, Slant, Isometric1-4, 3-D, 3x5, ANSI Shadow, Calvin S)
- 19 named ASCII templates (arrows, flowcharts, banners, frames)
figlet@^1.8.0dep with lazy-load + cache adapter (≥328 bundled fonts; pure JS, no native bindings)- 6 IPC handlers:
ascii:generate / list-fonts / get-font-meta / save / copy / last-font - Standalone window rewrite: removed the ~385-line inline script; added a searchable font picker, Copy to Clipboard, and Save to File
- Major cleanup: -1029 net lines of dead code (the in-app modal
#ascii-art-dialog, the 800-line renderer controller, theshow-ascii-generator*preload channels, and the obsoletetextToASCII/createASCIIBox/etc. helpers) - 97 new tests
New: Editor Theme Registry (extension)
- 12 new themes added: Catppuccin Latte / Frappé / Macchiato / Mocha, One Light, Tokyo Night Storm, Synthwave '84, Outrun, Winter is Coming (Light + Dark), Solarized Dark High Contrast, Spring Light
- Total: 37 themes (15 light + 22 dark incl. 1 high-contrast), sorted into Light / Dark / High-Contrast tables in the README
- Pure
ThemeRegistrymodule; the View menu generator now readslist() + categories(); new per-theme CSS files live atsrc/styles/themes/<id>.css <link disabled>preload +<link>toggle pattern (sub-millisecond theme switch — no flash, no re-fetch)- Aria-friendly: the high-contrast option is announced to assistive tech
Bug fixes
- Plan 3: rail button tooltip
Ctrl+Alt+Fnow actually wired (the shortcut existed but the panel toggle was missing) - Plan 3:
destroy()cleanup on panel unmount — timers, listeners, and the store subscription are all released (no leaks when toggling repeatedly) - Plan 2: standalone window
<script src>path corrected (was escapingsrc/) - Plan 2: font substitutions reverted —
Isometric1-4andCalvin Sare actually restored from figlet's bundled fonts
Housekeeping
- 1093 tests passing across 36 snapshots in 90 suites
- Lint + Prettier clean across all 3 plans
- Linux build verified end-to-end (AppImage + deb + snap produced)
Version 4.7.1 (2026-09-05)
New: Export Themes (Word + PDF)
- Theme picker in the export dialog (basic and advanced mode) for PDF and DOCX: Default (Pandoc), Modern, Classic, Sepia, Minimal, Elegant
- PDF: LaTeX header recolors/reformats headings + links (xcolor/titlesec, core-TeX packages only); DOCX: styles.xml surgery recolors Heading1-6/Title/ Subtitle/Hyperlink and swaps heading/body fonts
- Themes persist in export presets; unknown ids in old presets fall back to Default instead of failing the export
Branding
- New M↓ brand identity: app icons, favicons, tray icon, welcome mark, README wordmark (vector kit in assets/markdown-converter-assets/)
Fixes
- Windows: pdfjs text/image extraction failed on Windows — standardFontDataUrl is now a proper file:// URL (raw backslash paths failed pdfjs's trailing-slash URL validation)
- Windows: sharp temp-file cleanup (EPERM retry), path-separator test assertions, and pdfjs test timeouts fixed — the Windows CI job is green
- FiraCode tooling downloads pinned to the immutable 6.2 release; .gitattributes stops CRLF checkout rewriting hash-pinned files
- macOS pandoc extractor locates the binary in the archive (layout changed)
- Packaged apps resolve bundled pandoc/markitdown next to the executable (resourcesPath lookup was wrong since 4.5 — packaged builds silently used system pandoc)
Version 4.7.0 (2026-09-05)
Bundling & Legal Compliance
- MarkItDown is now bundled:
npm run bundle:markitdownfreezes Microsoft's markitdown (MIT) + embedded Python runtime into a single ~75MB per-platform binary (bin/<platform>/markitdown) via PyInstaller (ML extras excluded); the app prefers the bundled binary and falls back to system installs - Packaging copies the bundled markitdown for Windows/macOS/Linux alongside Pandoc
- THIRD-PARTY-NOTICES.md — full license inventory of everything distributed (bundled binaries, npm runtime deps, fonts, embedded Python packages)
- SOURCES.md — GPL §3(b) written source offer for Pandoc / FFmpeg (GPL build) / PyInstaller bootloader, with pinned versions + SHA-256; LGPL relinking note for libvips
- third-party-licenses/ — canonical texts: GPL-2.0, LGPL-2.1, MPL-2.0, Apache-2.0, OFL-1.1, PSF-Python
- Help → Third-Party Notices & Licenses — in-app viewer for both documents
- download-tools.js now SHA-256 pins and verifies every downloaded artifact (post-download and against the cache on every run; hard-fails on mismatch)
- README gains a "Bundled Dependencies, Legal Notices & Credits" section
- Large optional tools intentionally NOT bundled (documented): LibreOffice, MiKTeX/TeX Live, ImageMagick, PlantUML+JRE, Calibre
Version 4.6.1 (2026-09-05)
New Features
- MarkItDown import — "File → Import with MarkItDown (Any Format)…" embeds
Microsoft's markitdown (MIT) as an
any-file → Markdown path: PDF, DOCX, PPTX, XLSX, Outlook .msg/.eml, EPUB,
images, CSV/JSON/XML, ZIP; audio transcription and OCR with the
[all]extras- Command auto-resolution:
markitdownbinary, thenpython -m markitdown/python3 -m markitdown(probed once, cached) - Same SEC-1 argv discipline as Pandoc (execFile only, paths never through a shell),
50MB input cap, 120s timeout, path-sanitized errors that surface markitdown's
actionable
pip install 'markitdown[...]'hints - Output written next to the source as
<name>.md(numeric suffix instead of overwriting) and opened in a new tab;markitdown:available/markitdown:convertIPC for future renderer flows
- Command auto-resolution:
- AI Assistant: Anthropic-compatible provider — any base URL speaking the
Anthropic messages schema (LiteLLM proxies, Bedrock gateways, local servers);
x-api-key + Bearer auth, keyless proxies supported, tolerates bases with or
without a trailing
/v1
Bug Fixes
- File → Open PDF crashed the PDF editor (null operation matched no section; now defaults to Merge)
- Backlinks panel required the wrong module path (failed at registration)
- writing-studio engines/panels now await their IPC-backed settings/file backends
(eliminates
JSON.parse("[object Promise]")crashes) - Manuscript panel's window.prompt (unsupported in Electron) replaced with an inline dialog; collaboration comment store made async to match its IO
Version 4.6.0 (2026-09-05)
New Features
AI Assistant Plugin (multi-provider)
- Chat sidebar panel with rolling conversation history and insert-reply-into-document
- Providers: OpenAI, Anthropic, Ollama, LM Studio, and any OpenAI-compatible endpoint
- All provider traffic proxied through the main process — API keys never enter the renderer and the CSP stays closed to AI endpoints
- Commands: AI Summarize / Improve / Explain / Translate selection
- Answers the writing-studio
ai:analyzecontract, finally enabling the Proofread panel
Collaboration Plugin (inline comments)
- Anchor-based comments stored in
.comments/sidecar files (never exported, never committed) - Comments sidebar panel: add at cursor, list, resolve, delete, jump to anchor
- Drift detection flags moved/edited anchors; F8 navigates to the next open comment
Local Knowledge Base (wiki-links + backlinks)
[[Note]],[[Note|alias]],[[Note#section]]render as links in the preview (code blocks excluded)- Clicking a wiki-link opens the note or offers to create it
- Backlinks sidebar panel scans the folder (bounded BFS) for documents linking to the current one
Crash Recovery / Session Restore
- Open tabs (paths + unsaved buffer content) snapshotted to localStorage, debounced on edits, on tab changes, on unload, and once a minute
- Restore prompt on launch with per-tab restore, clean-fresh option, and 2MB content budget
Document Version History
- Every save snapshots the previous on-disk content to
<userData>/versions/ - History sidebar panel: list, restore (with safety snapshot), unified diff vs. current, delete, manual "save version now"
- Per-document pruning (20 versions), path-hash storage, id-validated reads
Editor
- Vim keybindings (View → Vim Mode, persisted, live toggle via CodeMirror Compartment)
- Snippet Tab-expansion: type a snippet name and press Tab to insert it
- Zen Mode word-goal setter (the HUD progress bar finally has UI)
Export / Conversion
- Real PDF encryption: pdf-lib swapped for @cantoo/pdf-lib — encrypt/decrypt/permissions now actually work (UI auto-enables via the capability probe)
- XLSX export: markdown tables → native Excel workbook, one sheet per table (no Pandoc needed)
- ODT headers/footers + page size: real ODF styles.xml patching replaces the empty stub
- Local PlantUML rendering: diagrams render on-machine via the
plantumlCLI when installed; plantuml.com stays as fallback - KaTeX bundled locally (CSS + fonts): math renders offline, no CDN calls
- Writing heatmap (GitHub-style 30-day grid) in the writing-studio Goals panel
Platform
- Quick Note global scratchpad (Ctrl+Alt+Q, works when unfocused; appends to
notes/quick-notes.md) - Deep link protocol
markdownconverter://open?path=… - REPL confirmation dialog before first code execution per language per session (unsandboxed-execution guard rail)
- Writing-studio's four sidebar panels (Manuscript/Goals/Snapshots/Proofread) are now actually wired with rail icons
- Plugin sidebar panels get automatic rail icons via
registerPanel({icon})
Bug Fixes
Ctrl+Shift+Pcollision: PDF (Enhanced) export nowCtrl+Alt+Shift+P; Command Palette keepsCtrl+Shift+P- Universal Converter's Pandoc tool no longer always reports "not installed" (
checkConverterAvailablegained a pandoc case with bundled-binary check) - CLI headless export: removed dangling
--css/--reference-docflags that made pandoc exit with an error;--self-containedreplaced with--standalone(Pandoc 3.x) - Removed dead "Open Export Options Dialog…" button from the converter dialog
- Removed duplicate
styles-zen.cssinclude
Security
- AI provider requests carry size caps (200KB prompt), timeouts (120s), and user-safe error surfaces
- Version-history reads validate ids against traversal; history listing requires a valid document path
- PlantUML local rendering removes the diagram-text exfiltration path when a local CLI exists (CVE-MC-007 follow-up)
Tests
- New suites: OdtStyling, AiProviders, ai-assistant prompts, collaboration comment-store, wiki-links/backlinks, session-store, XlsxExporter, VersionHistory
- PDFOperations encryption tests rewritten for the real-encryption reality
Version 4.0.0 (2026-03-04)
Major Changes
- CodeMirror 6 Editor — Replaced textarea with CodeMirror 6 featuring syntax highlighting, code folding, bracket matching, multiple cursors, and auto-indent
- Sidebar Panel System — Collapsible sidebar with File Explorer, Git, Snippets, and Templates panels
- Command Palette — Ctrl+Shift+P to search and execute all app actions
- Code Execution (REPL) — Run JavaScript, Python, and Bash code blocks directly from the preview
New Features
- Print Preview dialog with paper size, orientation, margins, scale, and page range controls
- Image paste from clipboard and drag-drop support with auto-save to assets folder
- Document templates library (10 templates: blog post, meeting notes, tech spec, changelog, README, project plan, API docs, tutorial, release notes, comparison)
- Markdown extensions: footnotes, admonitions (note/warning/tip/danger/info), and toc table of contents
- PlantUML diagram rendering alongside Mermaid
- Welcome tab with onboarding and "What's New" feature showcase
- System spell checking with context menu suggestions and dictionary support
- Enhanced status bar with word count, character count, line/column, encoding, and language mode
- Grouped toolbar with visual section separators
- Breadcrumb bar showing current file path
New Export/Import Formats
- Reveal.js slides (.html)
- Beamer slides (.pdf)
- Confluence/Jira wiki markup (.txt)
- MOBI e-books (via Calibre)
- Developer formats: JSON, YAML, XML, TOML
Security
- Content Security Policy (CSP) meta tag
- File size validation (50MB limit)
- Error message sanitization (stripped file paths)
- Conversion rate limiting (2-second debounce)
Dependencies Updated
- marked: 16.x to 17.x (with marked-highlight extension)
- pdfjs-dist: 3.x to 5.x (new worker model)
- html2pdf.js: 0.10 to 0.14
- pdfkit: 0.14 to 0.17
- dompurify, docx, and others updated to latest
Testing
- 80 tests across 7 test suites
- New tests for sidebar manager, command palette, print preview, markdown extensions, and utility functions
Breaking Changes
- Editor is now CodeMirror 6 (replaces textarea)
- marked API changed to use marked.use() instead of marked.setOptions()
- pdfjs-dist upgraded to v5 with new worker model
Version 2.1.0 (December 14, 2025)
🎨 UI/UX Improvements
Subtle & Small Preview Popout Button
- Redesigned popout button with minimalist aesthetic
- Removed border for cleaner appearance
- Reduced size: 11px font, 2px×6px padding (previously 14px font, 4px×8px padding)
- Added opacity transition: 50% when idle, 100% on hover
- Subtle background effect on hover instead of heavy border styling
- File:
src/styles.css:195-211
Simplified Table Headers in Preview
- Removed gradient background from table headers in modern theme
- Changed from
var(--primary-gradient)(purple gradient) to simple light gray (#f0f0f0) - Updated text color to dark (#333333) for better readability
- Clean, professional appearance matching standard themes
- File:
src/styles-modern.css:445-449
📥 Enhanced Import Capabilities
Comprehensive Format-to-Markdown Conversion
Dramatically expanded the "Import Document" feature to support 30+ file formats:
Supported Formats:
- Documents: DOCX, ODT, RTF, HTML, HTM, TEX, EPUB, PDF, TXT
- Presentations: PPTX, ODP
- Markup Languages: RST, Textile, MediaWiki, Org-mode, AsciiDoc, TWiki, OPML
- E-book Formats: EPUB, FB2
- LaTeX Formats: TEX, LATEX, LTX
- Web Formats: HTML, HTM, XHTML
- Wiki Formats: MediaWiki, DokuWiki, TikiWiki, TWiki
- Data Formats: CSV, TSV, JSON
Format-Specific Optimizations:
- PDF text extraction with XeLaTeX engine
- CSV/TSV automatic table conversion
- JSON structure handling
- Improved error messages with format hints
Access: File → Import Document (Ctrl+I)
File: src/main.js:1933-1994
🎨 Exhaustive ASCII Art Generator
5 New Text Banner Styles
Complete alphabet (A-Z) and numbers (0-9) support for all styles:
- Standard - Classic ASCII art with slashes and underscores
- Banner - Large format using # characters (7-line height)
- Block - Modern Unicode block characters (█ ╔ ╗ ═ ║)
- Bubble - Circular bubble letters (Ⓐ Ⓑ Ⓒ)
- Digital - Digital display style (▄ ▀ ▐ ▌)
File: src/renderer.js:3397-3537
19 Professional ASCII Templates
Organized into 4 categories with expanded options:
Arrows & Flow (4 templates):
- Arrow Right - Horizontal flow indicators
- Arrow Down - Vertical flow indicators
- Decision - Binary decision diagrams
- Process Flow - Multi-step process visualization
Diagrams & Charts (6 templates):
- Flowchart - Advanced flowchart with decision branches and loops
- Sequence - Sequence diagrams for User-System-Database interactions
- Network - Server-client network topology
- Hierarchy - Organizational tree structures
- Timeline - Milestone visualization with dates
- Table Simple - Basic table template with borders
Boxes & Containers (4 templates):
- Header - Section header with decorative borders
- Note Box - Important notes with rounded corners (┏━━┓)
- Warning Box - Warning messages with bold borders (╔═══╗)
- Info Box - Information boxes with subtle styling (╭───╮)
Decorative Elements (6 templates):
- Divider - Horizontal section separator (═══)
- Separator Fancy - Elegant rounded divider
- Brackets - Japanese-style brackets 【 】
- Banner Stars - Star-bordered banners
- Checklist - Task lists with ✓ checkmarks
- Progress Bar - Visual progress indicators
Features:
- All ASCII art automatically wrapped in code blocks for proper rendering
- Preserved formatting in markdown preview and all export formats
- Categorized template selection interface
- Real-time preview generation
Access: Tools → ASCII Art Generator
Files: src/renderer.js:3513-3671, src/index.html:427-466
📝 Technical Improvements
- Enhanced ASCII art detection in Word template exporter
- Improved monospace font rendering across all export formats
- Better code block preservation in PDF and Word exports
- Optimized template categorization and organization
🔧 Files Modified
src/styles.css- Preview popout button stylingsrc/styles-modern.css- Table header simplificationsrc/main.js- Enhanced import function, version updatesrc/renderer.js- ASCII art generator enhancementssrc/index.html- ASCII template UI organizationpackage.json- Version bump to 2.1.0
Version 2.0.0 (Previous Release)
Major Features
- Export Profiles - Save and reuse export configurations
- Mermaid.js diagram support
- Command Palette (Ctrl+Shift+P)
- GitHub Light/Dark preview themes
- Table Generator
- ASCII Art Generator (basic)
- Resizable Preview Pane
- Pop-out Preview Window
- Configurable page sizes (A3-A5, B4-B5, Letter, Legal, Tabloid, Custom)
- Custom Headers & Footers for exports
- Enhanced PDF and Word export with templates
- 22 beautiful themes
Core Capabilities
- Cross-platform markdown editor with live preview
- Universal document conversion (30+ formats)
- PDF Editor (merge, split, compress, rotate, watermark, encrypt)
- Batch file conversion
- File association support
- Advanced export options
- Multi-tab interface
Installation & Usage
Prerequisites
- Pandoc - Required for document conversion
- Optional: LibreOffice, ImageMagick, FFmpeg for universal converter
Download
Get the latest release from: https://github.com/amitwh/pan-converter/releases
Supported Platforms
- Windows (x64)
- Linux (AppImage, .deb, .snap)
- macOS (planned)
Contributing
Contributions are welcome! Please see CLAUDE.md for development guidelines.
Author: Amit Haridas (amit.wh@gmail.com) License: MIT Repository: https://github.com/amitwh/pan-converter