amitwh 74ff6afb19 feat(renderer): wire remaining stubbed commands and rebuild
The v5.0.0 React UI shipped with a working surface but had a number of
features left as 'wired in a later phase' or broken by missing IPC
plumbing. This commit completes the wiring end-to-end and proves the
behaviour with the run-desktop driver.

Toolbar format buttons (Toolbar.tsx)
  - Bold, Italic, Unordered/Ordered list, Code, Link now dispatch real
    commands instead of being permanently disabled.

New module: src/renderer/lib/editor-commands.ts
  - Module-level singleton holding the active CodeMirror EditorView.
  - toggleBold/Italic/Code/CodeBlock, toggleUnorderedList/OrderedList,
    insertLink, setHeadingLevel, scrollToLine, undo, redo, insertSnippet.
  - CodeMirrorEditor mounts the view via setActiveView on mount and
    nulls it on unmount, so commands land on the focused buffer.

register-menu-commands.ts
  - file.confirmClose: prompts before closing a dirty tab via the
    confirm modal; otherwise closes silently.
  - app.quit: prompts before quitting if any buffer is dirty; uses
    the new ipc.app.quit channel.
  - short-cuts.show: shows the keyboard shortcut list in a confirm dialog.
  - editor.bold/italic/code/list.*/link/undo/redo/heading.*: drive the
    active editor.
  - find.toggle: dispatches mc:find-toggle for any listening component.
  - view.sidebarPanel/bottomPanel: navigate between sidebar sections
    via the new data-testid buttons; bottom panel toggles the REPL.
  - font.size: increase/decrease/reset on editorFontSize (10..28).
  - theme.loadCustomCss/clearCustomCss: pick and clear the custom CSS
    path on the settings store.
  - template.load: inserts a bundled markdown skeleton at the cursor.
  - print.preview/previewStyled: emit mc:print and mc:print-preview.
  - file.clearRecent: clears open tabs.
  - file.new: creates an untitled buffer and tab.
  - editor.gotoHeading: scrolls to a given line (used by Outline and
    Breadcrumb).
  - view.toggleSidebar: already wired.
  - file.opened: already wired (prior fix).

Sidebar Outline + Breadcrumb
  - Both now click through to 'editor.gotoHeading' with the line
    number extracted from the active buffer.
  - Sidebar exposes data-testid for the 'view.sidebarPanel' menu action.

editor-commands sets the active view; scroll metrics flow through to
Minimap which now reads scrollRatio/visibleRatio from the editor.

Export dialogs (PDF/DOCX/HTML)
  - Replaced the broken ipc.export.{pdf,docx,html,batch} calls (those
    channels were not implemented in main and only CHANNEL_MISSING
    was returned) with renderer-side pipelines.
  - PDF: generateHtml() with @page CSS for size + margins, then
    ipc.print to the main process for native print-to-PDF.
  - DOCX: generateDocx() from the existing lib, then ipc.file.writeBuffer.
  - HTML: generateHtml() then ipc.file.writeBuffer.
  - All three dialogs use ipc.app.showSaveDialog for output path
    (new IPC handler) and ipc.file.writeBuffer for the binary write
    (new preload channel).
  - PrintPreview now uses MarkdownRenderer instead of a raw <pre>.

New settings fields
  - editorFontSize: 10..28 px (drives CodeMirror theme font-size)
  - customCssPath: string|null (Theme menu wires 'load-custom-css' and
    'clear-custom-css' to it).

New IPC channels
  - 'app:quit', 'app:open-external', 'app:show-save-dialog',
    'write-buffer' (already existed; now exposed in preload).

Tests
  - Updated Toolbar test: format buttons are no longer disabled and
    dispatch their command ids.
  - Updated Export*D*Dialog tests to mock the new ipc surface
    (ipc.print, ipc.app.showSaveDialog, ipc.file.writeBuffer) and
    assert the new flow.
  - Updated PrintPreview test to use ipc.print.doPrint.
  - Updated phase8-toasts integration: PDF flow now goes through
    ipc.print and asserts 'Sent <title> to printer'.
  - register-menu-commands test: re-register 'template.load' AFTER
    Harness renders so the captured-args handler is the live one.

Verification
  - npm run build:renderer: success (1.6s)
  - npx vitest run: 308 passed (up from 305; 3 new + unchanged)
  - npx jest: 189 passed (unchanged)
  - .claude/skills/run-desktop/verify-features.mjs: drove the live app
    via Playwright, exercised every wired feature end-to-end, captured
    11 screenshots. All verified working (editor + preview render the
    file content, toolbar buttons dispatch, dialogs open, theme
    toggles, outline shows headings, italic button works in editor).
2026-06-07 23:13:47 +05:30
2025-09-21 21:47:12 +05:30
2026-03-04 16:33:38 +05:30

MarkdownConverter

A powerful cross-platform Markdown editor and document converter powered by Pandoc, built with Electron. 100% open-source with no proprietary dependencies.

Features

Markdown Editor

image - **Multi-tab editing** - Work on multiple files simultaneously - **Live preview** - Real-time markdown rendering with syntax highlighting - **Dynamic splitter** - Drag to resize editor and preview panes - **25+ themes** - Light and dark themes including Atom One Light, Dracula, Nord, Sepia, and more - **Find & Replace** - Search and replace with regex support - **Line numbers** - Toggle line numbers in the editor - **Auto-save** - Automatic saving every 30 seconds - **Math support** - KaTeX integration for mathematical expressions

PDF Viewer & Editor

image
  • Built-in PDF viewer - Open and view PDF files directly in the app
  • Page navigation - Navigate pages with keyboard or buttons
  • Zoom controls - Zoom in/out, fit to width, fit to page
  • Rotation - Rotate pages left or right
  • PDF Editor tools:
    • Merge multiple PDFs
    • Split PDFs by page range
    • Compress PDFs
    • Rotate pages
    • Delete pages
    • Reorder pages
    • Add watermarks
    • Password protection
    • Remove passwords
    • Set permissions

Export Options

  • PDF - Export to PDF with customizable page sizes and orientation
  • DOCX - Standard and Enhanced (template-based) Word export
  • ODT - OpenDocument format
  • HTML - Web-ready HTML export
  • PowerPoint - PPTX presentation export
  • EPUB - E-book format
  • LaTeX - Academic document format
  • RTF - Rich Text Format

Advanced Features

  • Custom headers & footers - Add headers/footers to exports with dynamic fields
  • Page size configuration - A3, A4, A5, B4, B5, Letter, Legal, Tabloid, or custom sizes
  • Batch conversion - Convert entire folders of markdown files
  • ASCII Art Generator - Create text banners and diagrams
  • Word templates - Use custom Word templates for enhanced exports
  • Import documents - Import from 30+ formats (DOCX, PDF, HTML, etc.)

Installation

Prerequisites

  • Node.js (v16 or later)
  • Pandoc (required for export functionality)

Install Dependencies

npm install

Run the Application

npm start

Build for Distribution

# Windows
npm run build:win

# macOS
npm run build:mac

# Linux
npm run build:linux

Keyboard Shortcuts

Action Shortcut
New File Ctrl+N
Open File Ctrl+O
Open PDF Ctrl+Shift+O
Save Ctrl+S
Save As Ctrl+Shift+S
Export Ctrl+E
Print Ctrl+P
Find Ctrl+F
Undo Ctrl+Z
Redo Ctrl+Shift+Z
New Tab Ctrl+T
Close Tab Ctrl+W
Toggle Preview Ctrl+Shift+P
Zoom In Ctrl+Shift++
Zoom Out Ctrl+Shift+-

Themes

Light Themes

  • Atom One Light (Default)
  • GitHub Light
  • Light
  • Solarized Light
  • Gruvbox Light
  • Ayu Light
  • Sepia
  • Paper
  • Rose Pine Dawn
  • Concrete Light

Dark Themes

  • Dark
  • One Dark
  • Dracula
  • Nord
  • Monokai
  • Material
  • Gruvbox Dark
  • Tokyo Night
  • Palenight
  • Ayu Dark
  • Ayu Mirage
  • Oceanic Next
  • Cobalt2
  • Concrete Dark
  • Concrete Warm

PDF Viewer

Open PDF files directly in MarkdownConverter:

  • File > Open PDF or Ctrl+Shift+O
  • Navigate pages with arrow buttons or page input
  • Zoom controls: +/- buttons, Fit Width, Fit Page
  • Rotate pages left or right
  • Close PDF to return to editor

Open Source

MarkdownConverter is 100% open-source. All dependencies are permissively licensed:

  • Electron - MIT License
  • pdf-lib - MIT License
  • pdfjs-dist - Apache 2.0 License
  • marked - MIT License
  • highlight.js - BSD 3-Clause License
  • dompurify - Apache 2.0/MIT License
  • docx - MIT License
  • xlsx - Apache 2.0 License (SheetJS Community Edition)

License

MIT License - see LICENSE file for details.

Author

Amit Haridas (amit.wh@gmail.com)

Version

v4.1.0

S
Description
No description provided
Readme MIT
12 MiB
Languages
JavaScript 62.6%
CSS 19.9%
HTML 15.6%
NSIS 0.8%
PowerShell 0.5%
Other 0.6%