# Marked Changelog

### Version Marked 3.0.3 (1127)

#### CHANGED

- The install-scoped identifier may be reset if the user deletes the app’s Application Support data; it no longer lives only in the keychain.

#### NEW

- DEBUG builds expose a “Reset Paddle purchase state” menu item (hidden via showSubscriptionDebugMenu in release) to clear local subscription, Paddle cache, and legacy subscription_id.txt for checkout retesting.
- Mermaid diagrams use a shared Marked.mermaid helper with stashed source, inverted/dark theme variables, theme-change rerender, and panzoom-friendly update hooks in preview.

#### IMPROVED

- Paddle checkout and subscribe URL handlers sync the billing server transaction, store customer email/id, and clear the access cache before refreshing subscription UI so permanent unlock and status appear without waiting for webhooks alone.
- Restore purchases accepts email and/or stored checkout transaction id when Paddle checkout email differs from the account email; billing status re-checks once via getTransaction when access is not active yet.
- Subscription window headline and primary button switch between trial copy (“Start Trial”) and lifetime copy (“Purchase Now” / “Lifetime license – one-time purchase”) when the permanent plan is selected.
- Mac App Store restore runs AppStore.sync before re-checking entitlements; trial status skips server trial classification when permanent unlock is present.
- Sparkle update feeds point at updates.markedapp.com; Direct deploy zips with ditto –keepParent, verifies framework symlinks and codesign on the archive, optional DMG and CloudFront invalidation, and copies a stable local Marked.zip when configured.
- Rake ver reports marketing version from project.pbxproj, build from agvtool, changelog from CHANGELOG.md, and git tag from git describe; rake bump/unbump support patch, minor, and major marketing increments with unbump to roll back build and version.
- Open Recent and the tab quick-open recents list ignore files in Trash, missing paths, directories, and unreadable files; choosing a bad recent entry removes it and shows a clear alert instead of a generic open failure.

#### FIXED

- Paddle restore no longer clears local checkout data when the server reports no active subscription, so another restore attempt remains possible after a slow webhook.
- Mac App Store StoreKit no longer writes MAS trial UserDefaults for lifetime purchases, which had left trial expiration set without a start date and blocked subscription UI refresh.
- Mini Map toggle (menu and keyboard) refreshes Marked.config from Cocoa prefs before enabling or showing the unavailable tip, so toggling Mini Map in Settings works without reloading the preview.
- Direct-download (Paddle) builds now show “Marked” in system keychain and security prompts instead of a blank app name before “wants to use…”, by setting CFBundleDisplayName in Marked-Info.plist.
- Ongoing macOS keychain prompts for the trial and subscription install identifier should stop because that UUID is now saved under Application Support instead of the keychain, with a single launch that reads any legacy keychain entry, writes the file, and deletes the old item.

### Version Marked 3.0.2 (1125)

#### CHANGED

- TOC bookmark marker styling drops a fixed minimum width (tocstyle.scss and compiled tocstyle.css).

#### NEW

- GitHub Actions workflow runs the JavaScript test suite on push and pull requests.
- Jest tests cover preview JavaScript: word highlighting, find helpers, util, Contents bundle, Countable, math detection, typography (widont and GitHub task lists), generated TOC helpers, bidi helpers, and counter HTML normalization, plus shared marked-env helpers for jsdom.
- Npm run test:coverage with coverage output under coverage/ (ignored by git).
- GitHub task list syntax (- [ ], - [x], ordered and blockquote-prefixed lines) converts to checkbox HTML in Objective-C before the markdown processor when “Convert GitHub checkboxes” is on, with fenced ```/~~~ blocks skipped and MultiMarkdown running normalizeSyntax before conversion so task lines followed by links still parse.

#### IMPROVED

- Keywords drawer layout in MarkdownDocument.xib (Toggle All placement and locate control positions).
- TOC preview styles are split into SCSS partials under styles/tocstyle/ with styles/tocstyle.scss as the entry; gulpfile adjusted for the layout.
- @improved Print and PDF preview vertical gaps between separate lists and paragraphs are tightened for all themes by halving common #wrapper block margins inside @media print (WebKit often fails to collapse adjacent margins the same as on-screen).

#### FIXED

- Panel temporary keywords are stored in per-document state and read early when opening a preview so highlighting uses your Keywords drawer text instead of stale values.
- Latin-style highlight matching (including temp keywords) counts matches after sentence-ending punctuation, ellipsis, closing parenthesis, or closing guillemet when there is no space before the next word (common in transcripts).
- Highlight locate works when the click lands on text inside a highlight span; navigation accepts type `keyword` as `keywords`; locate buttons prefer control tags over identifiers and escape strings passed into JavaScript navigation.
- Preview updates that produce no visible diff markers no longer leave the scroll position stuck at the top when scroll-to-edit is enabled; the preview restores the scroll point Cocoa saved immediately before the refresh (Marked.position.restoreStoredScrollPoint and scrollToDiff).
- Streaming Preview ignores duplicate pasteboard writes whose trimmed plain text matches the last applied update, avoiding pointless refreshes and conflicting scroll-to-edit behavior when the originating app bumps NSPasteboard changeCount without changing content.
- Streaming Preview edit markers and scroll-to-edit placement now follow real Markdown edits mid-document instead of spurious HTML differences at the top, using volatile-HTML normalization for comparison and processed-source diff anchoring mapped into the wrapper for transient streaming documents.
- Task lists no longer rely on JavaScript DOM rewriting in preview, print init, prefs update, or the update hook, avoiding double processing and odd print preview behavior when the preference is enabled.
- @improved Print and PDF preview vertical gaps between separate lists and paragraphs are tightened for all themes by halving common #wrapper block margins inside @media print (WebKit often fails to collapse adjacent margins the same as on-screen).

### Version Marked 3.0.1 (1122)

#### CHANGED

- TOC bookmark marker styling drops a fixed minimum width (tocstyle.scss and compiled tocstyle.css).

#### NEW

- GitHub Actions workflow runs the JavaScript test suite on push and pull requests.
- Jest tests cover preview JavaScript: word highlighting, find helpers, util, Contents bundle, Countable, math detection, typography (widont and GitHub task lists), generated TOC helpers, bidi helpers, and counter HTML normalization, plus shared marked-env helpers for jsdom.
- Npm run test:coverage with coverage output under coverage/ (ignored by git).

#### IMPROVED

- Keywords drawer layout in MarkdownDocument.xib (Toggle All placement and locate control positions).
- TOC preview styles are split into SCSS partials under styles/tocstyle/ with styles/tocstyle.scss as the entry; gulpfile adjusted for the layout.

#### FIXED

- Panel temporary keywords are stored in per-document state and read early when opening a preview so highlighting uses your Keywords drawer text instead of stale values.
- Latin-style highlight matching (including temp keywords) counts matches after sentence-ending punctuation, ellipsis, closing parenthesis, or closing guillemet when there is no space before the next word (common in transcripts).
- Highlight locate works when the click lands on text inside a highlight span; navigation accepts type `keyword` as `keywords`; locate buttons prefer control tags over identifiers and escape strings passed into JavaScript navigation.

### Version Marked 3.0.1 (1121)

#### CHANGED

- Install CLI now provides manual Terminal instructions only and no longer attempts in-app symlink creation or privilege escalation.
- Show minimap generation progress in the status bar instead of popup tips so updates remain visible during screenshot mode.
- Rework Speed Read keyboard controls so bracket keys navigate by paragraph while left/right arrows adjust WPM.
- Replaced the always-visible shortcut legend with a compact ? button that opens a centered shortcuts HUD and supports click-outside dismissal.
- Speed Read overlay layout now better accommodates narrow windows by moving bottom controls and separating sync/help controls.
- Table of Contents and TOC toggle now render above the Speed Read overlay, allowing TOC and fast navigation while Speed Read is active.
- The subscription call-to-action now says “Start Trial” instead of “Buy Now”.

#### NEW

- Add support for {% download %} directives in help markdown rendering to output styled download cards with link and description.
- Add a Speed Read mode in the preview with a centered one-word RSVP overlay and highlighted anchor letter.
- Add Speed Read menu commands and shortcut support, including toggle, start from selection, pause/resume, and speed up/down actions.
- Supported Apps page for Vim links to https://github.com/itspriddle/vim-marked (vim-marked plugin for opening Markdown in Marked).
- Supported Apps page for VS Code links to Better Open in Marked2 on the Visual Studio Marketplace (https://marketplace.visualstudio.com/items?itemName=vikgamov.vscode-open-in-marked2).
- Added keyboard help HUD toggling with ?, H, and Esc handling so help can be opened/closed without exiting Speed Read mode.
- Added a separate Speed Read shortcuts HUD resource file loaded into the overlay for compact in-context shortcut help.
- Added a `speedread=1` URL handler option for open, paste, preview, and stream commands to start Speed Read automatically when the preview is ready.
- Added Dark Mode styling for the HTML Source view so it follows the current preview window appearance.
- Help HUD shows a horizontal scroll indicator when more shortcut columns are off-screen; arrow keys, J/K, and Space move between columns or by viewport.
- Preview search and proofing phrases can match rendered text split across inline elements and Prism-style code spans (one consistent jump per phrase, spans stay valid HTML).

#### IMPROVED

- Continuous PDF export now uses a safer print lifecycle and content-fitted page sizing for more reliable single-page output.
- OPML export now falls back to safe input and title defaults when source text or metadata is missing.
- Move risky paragraph boundary detection earlier so paragraphs that cross a page edge are split or moved during the correct page pass.
- Make Style Manager preview samples describe the element being styled, including headings, italic text, lists, block quotes, tables, links, and footnotes.
- Show a persistent “Generating minimap” tip while minimap rendering runs, then clear it on completion or error.
- Display an indeterminate progress indicator during minimap generation so background work is visible.
- Start Speed Read paused, add on-screen key hints, and add a dismiss button plus Escape support for closing the overlay.
- Persist Speed Read WPM between sessions and prevent background preview scrolling while the overlay is active.
- Add Speed Reading documentation and shortcut references to Help content, config indexing, and the in-preview Help HUD.
- Refresh the Speed Read sync checkbox with a cleaner rounded outline style and larger 16px target for easier toggling.
- Speed Read now keeps the red ORP anchor centered in place while words advance, reducing visual drift.
- Speed Read now reanchors to the current viewport after normal preview navigation shortcuts complete scrolling, so commands like t/gg, G/b, and header jumps stay in sync.
- Speed Read now pauses at the end instead of closing, pauses when document navigation keys are used, and dims secondary controls during playback.
- Help media handling now allows bundled Speed Read demo videos while continuing to block remote media embeds that can crash legacy WebKit.
- Closing the Help HUD removes scroll and keyboard listeners reliably instead of only hiding the overlay.
- Next and previous skip counting each split span separately; proofing/find navigation highlights every segment belonging to the current match when you move focus.

#### FIXED

- Prevent crashes during DOCX and YAML metadata parsing by guarding nil and non-dictionary decode paths before collection operations.
- Trial API response decoding now accepts numeric `trial_id` values without failing when backend payload types vary.
- Opening Preferences no longer crashes when the saved header/footer logo preference is not NSData (for example a stray string), by validating and clearing invalid values before creating NSImage.
- Refresh subscription status immediately after StoreKit transaction completion so Lifetime and subscription purchases update the UI state without waiting for restart.
- Prevent PDF/print export from leaving paragraph lines clipped across page boundaries when the paragraph starts inside the bottom page buffer.
- Preserve inline emphasis and other markup when PDF/print pagination splits a paragraph across pages.
- Show newly saved Style Stealer styles in the Style Manager list without requiring the window to be reopened.
- Allow Style Stealer styles saved to disk to be deleted from Style Manager without file permission errors.
- Prevent large minimap generation from blocking the preview UI and causing beachballs during refresh.
- Prevent minimap generation failures on very large documents by downscaling oversized minimap images before JPEG encoding.
- Keep Speed Read keyboard handling scoped to the active overlay and sync the Speed Read menu checkmark to overlay visibility after dismissing.
- Ensure Speed Read key captures do not leak into preview navigation, keeping overlay-only behavior during active reading.
- The Keyword Highlight drawer target for temporary keywords was wired to hide whenever temporary highlights were off, so the icon never received clicks; it now stays reachable like the other locate targets.

### Version Marked 3.0.1 (1119)

#### BREAKING

- Remove CLI tool from distribution and require download from website or Homebrew install

#### CHANGED

- Install CLI now provides manual Terminal instructions only and no longer attempts in-app symlink creation or privilege escalation.

#### IMPROVED

- Continuous PDF export now uses a safer print lifecycle and content-fitted page sizing for more reliable single-page output.
- OPML export now falls back to safe input and title defaults when source text or metadata is missing.

#### FIXED

- Prevent crashes during DOCX and YAML metadata parsing by guarding nil and non-dictionary decode paths before collection operations.
- Trial API response decoding now accepts numeric `trial_id` values without failing when backend payload types vary.
- Opening Preferences no longer crashes when the saved header/footer logo preference is not NSData (for example a stray string), by validating and clearing invalid values before creating NSImage.

### Version Marked 3.0.0 (1116)

#### IMPROVED

- Copy as RTF now writes HTML, RTF, and plain text to the pasteboard so formatted paste works more reliably in apps such as Slack.

### Version Marked 3.0.0 (1115)

#### CHANGED

- Subscription purchase fallback URLs now use production Paddle checkout links instead of sandbox.

#### NEW

- Help menu item “Browser Extensions” opens the browser extensions page on markedapp.com.

#### IMPROVED

- Documentation wiki links now generate full URLs (https://markedapp.com/help/) instead of relative paths for better accessibility
- Dark mode label colors in document close button now use system labelColor for proper appearance across themes
- Document bookmark creation now uses dedicated serial queue to prevent threading issues and improve reliability
- Reading speed changes in detailed stats are now debounced (200ms) to prevent flooding the readability queue during rapid edits
- Release notes styling completely redesigned with dark theme, gradient borders, and framed layout for modern appearance
- Sparkle deployment script now auto-extracts release notes from nvALT, opens editor for review, and supports Keychain-based signing
- Include file discovery now harvests paths from pre-expanded marker comments that were included in previous processing passes
- File watch logging now provides comprehensive debug output for troubleshooting watch event handling and path matching
- Context menu now includes “Show Boundaries of Included Files” and “Toggle Mini Map” options for quick access to preview features
- Mini Map toggle command now shows helpful user-facing message when Mini Map is disabled in settings instead of silently failing
- Mini Map keyboard shortcut (Cmd+Shift+B) now provides context-aware feedback messages for all disabled states including large document mode
- Include boundaries toggle now re-checks for markers on demand and provides specific feedback when markers exist but are not yet rendered
- Word (DOCX) import retries with libxml2-recovered XML when NSXMLParser fails, returns clear errors, and isolates failures in footnotes, relationships, comments, and numbering so the rest of the document can still load.
- DOCX conversion errors: alert only when the file cannot be read at all; other issues are logged without a modal.
- Markdown Dingus: skip restoring held code, math, and scrippet blocks when opening from transient previews (e.g. Clipboard Preview) or very large documents to avoid UI stalls; transient sources open without a file URL.

#### FIXED

- Reading ease display color changed from conditional RGB values to system linkColor for consistency with other stats
- File watching now reliably detects changes to included files by normalizing and resolving symlinks in all file paths before comparison
- File watchers are now re-armed after every successful document load to ensure newly discovered include files are monitored
- VDKQueue delegate mode is now properly initialized to receive file change notifications without relying on NSNotificationCenter
- Save as OPML no longer crashes when the system does not provide an OPML UTType (falls back to file extension).
- YAML front matter that decodes to a list at the root no longer crashes when converting to MultiMarkdown metadata

### Version Marked 3.0.0 (1114)

#### FIXED

- Quitting the app no longer raises an exception from forwarding termination to NSDocumentController (that class does not implement -applicationShouldTerminate:).

### Version Marked 3.0.0 (1113)

#### CHANGED

- Temporary preview documents are excluded from Recent Documents so utility previews do not clutter the file history
- Enable the Safari Setapp extension and notarization/stapling in Release builds.

#### IMPROVED

- Goldilocks list bullets stay aligned to the first wrapped line instead of drifting to lower lines
- Style Stealer now clearly shows that you can use Command-click to navigate and resume selection when Command is released
- Wikipedia markdown extraction now prioritizes article content wrappers so section headings like Biography are preserved
- Style Stealer clipboard URL autofill now requires exactly one fully qualified http(s) URL and ignores mixed text
- When subscription state is active but cannot be verified against concrete Paddle data, show an orange warning and keep Restore and Manage available instead of treating the user as fully inactive.
- Buy Now enables only when monthly, yearly, and permanent plan controls are enabled; keeps checkout from appearing when no plan is selectable.
- Subscription secondary buttons use muted color and lower alpha when disabled so disabled actions are visually obvious.
- Subscription status label wraps long messages instead of truncating a single line.
- Preserve line breaks during HTML-to-Markdown conversion by normalizing syntax-highlighted code blocks.

#### FIXED

- Dingus preview tables now fill available width correctly instead of leaving empty space on the right in wider viewports
- Style Stealer no longer accidentally navigates away on a normal link click while selecting content blocks
- Saving a transient clipboard preview now rebinds the preview to the exact saved file so later editor saves keep updating the same preview
- Clipboard Preview -> Markdownify URL no longer prepends an extra page title heading that could duplicate the main H1
- Wikipedia infobox conversion no longer emits malformed leading table fragments when tbody starts with th cells
- Content selection click interception in Style Stealer now captures selection before normal page click handlers trigger navigation
- Sanitize subscription data before NSUserDefaults and JSON so NSNull and other non-property-list values cannot crash the app or corrupt preferences.
- Manage Subscriptions no longer assumes string values for subscription fields; pause, resume, and cancel bail safely when the subscription id is missing.
- Paddle sync only stores next_billed_at when it is a non-empty string; handles missing dates without writing bad values.
- Link and embed CocoaLumberjack.framework in the Marked target so the app does not fail at launch with a missing framework.
- Code block horizontal overflow scrolls instead of widening page
- When markdownifying list items that contain paragraphs, don’t create empty list items
- Clip WebView rendering to the current PDF page slice to prevent ghost searchable text.

### Version Marked 3.0.0b30 (1112)

#### CHANGED

- Default processor names: “CommonMark” is now “CommonMark (GFM)” and “Discount (GFM)” is now “Discount” in preferences, migration, and URL handler; Code profile default processor is now CommonMark (GFM).

#### NEW

- File > New > Clipboard Preview now detects HTML or RTF on the clipboard (e.g. from a browser selection) and converts it to Markdown for preview instead of using plain text only.
- Add Obsidian integration notes to Additional Application Support, including vault drag-and-drop, custom rule guidance, and a link to the Marked3-obsidian plugin
- Markdownify html= URL parameter so raw HTML can be converted to Markdown as if pasted into Clipboard Preview
- Added Gulpease readability index and banded difficulty levels for Italian text, integrated into the stats drawer and Detailed Statistics views
- Added Gulpease readability index for Italian text

#### IMPROVED

- Clipboard Preview prefers HTML/RTF pasteboard types over plain text when present, so structure (links, headings, lists) is preserved when copying from Safari, Firefox, or other apps.
- When converting RTF to Markdown (e.g. from TextEdit or Pages), paragraph classes from the Cocoa HTML Writer style block are now mapped to heading levels by font size: 48+ px = h1, 36-48 = h2, 24-36 = h3, 18-24 = h4, 14-18 = h5, so large “paragraphs” become proper Markdown headings.
- Reading Ease now uses language-specific Flesch-style formulas for French, German, Spanish, and Portuguese instead of always using the English coefficients
- Readability labels and tooltips now clearly show which formula is in use per language (Gulpease vs Flesch variant), including band explanations for Italian Gulpease
- Scrivener blank preview auto-refresh avoids hard error screens and uses DOM inspection to detect truly empty renders

#### FIXED

- Prevent the internal log viewer from crashing when log messages are appended while its window or text system is being created or torn down
- Avoid crashes when parsing CSV tables that have missing or malformed rows by safely handling rows with fewer values than headers
- Custom Rules: metadata key/value and other action text fields now persist when editing multiple actions or switching away from a rule
- Prevent crash when an external app or Shortcuts gets the path of the current window or its document (e.g. path of document of window 1) by implementing the scriptable document and window properties declared in Marky.sdef
- Implement NSWindow scripting keys “document” and “style” so AppleScript/Shortcuts no longer trigger valueForUndefinedKey when querying window 1
- Implement MarkdownDocument filePath so “path of document of window 1” returns the file path instead of crashing
- NSXMLParser error when converting browser clipboard HTML: meta and link tags are now normalized to XML self-closing form so the converter does not fail with “Opening and ending tag mismatch”.
- Clipboard Preview now picks up RTF from TextEdit (Rich Text mode) by detecting legacy pasteboard types (e.g. “NeXT Rich Text Format v1.0 pasteboard type”) in addition to NSPasteboardTypeRTF.
- RTF-to-Markdown conversion no longer fails on Cocoa HTML Writer output: DOCTYPE is stripped before XML parsing, and
  blocks are removed so CSS does not appear in the Markdown output.
- Empty HTML tags (e.g. ) are stripped before conversion so they no longer produce extra ** or other formatting characters in the Markdown output.
- Direct (Paddle) builds no longer get locked out of Restore/plan selection by stale cached MAS entitlement results during subscription checks
- Trial remaining days no longer show absurd values when trial dates are corrupted or overridden

### Version Marked 3.0.0b29 (1111)

#### CHANGED

- Migrate MathJax integration to v3 ES5 components with v3-compatible typesetting and configuration

#### NEW

- Allow choosing MathJax source between Local bundle and CDN in Style preferences
- Add MathJax packages popover to enable physics, mhchem, braket, and bold symbols
- Bundle MathJax v3 ES5 distribution files with the app so math rendering works offline without requiring a CDN

#### IMPROVED

- Preserve existing equation numbering options while mapping them to MathJax v3 tags and tagSide
- Detect existing MathJax v3 output to avoid double rendering in the preview
- Add VoiceOver accessibility labels to subscription purchase window buttons so screen reader users can understand each plan and action
- Make word repetition ignore callout scaffolding and SVG icons so only visible callout titles and content are analyzed

#### FIXED

- Opening the Markdown Dingus via the x-marked://dingus URL handler no longer crashes; the style popup is configured by using the last-added menu item instead of the enumeration index so it works when the popup has a title item or different structure.
- Switching to Process as Fountain and back returns to selected Style
- Exclude Mermaid diagrams from Cmd-F search highlighting to avoid corrupting diagram rendering in previews
- Strip MathJax configuration scripts and related HTML tags from the text used for word repetition in all scopes to avoid bogus repeated “words”
- Ensure document-scope word repetition ignores MultiMarkdown metadata headers instead of treating them as part of the main document text

### Version Marked 3.0.0b28 (1110)

#### CHANGED

- Only one diff marker is shown per paragraph/blockquote/list item; duplicates in the same block are hidden so markers no longer stack.

#### NEW

- Word repetition now offers a Sentence scope in addition to Document and Paragraph, highlighting repeats that occur within individual sentences
- Add agentic coding integration notes to Help Docs
- Detailed Statistics window now shows the detected or fallback language code used for readability calculations

#### IMPROVED

- Word repetition scope selector uses a three-way toggle and keeps the panel’s repeated-word counts aligned with the currently active scope
- Readability scores now use an apostrophe-aware word counter for more accurate results, especially in languages with frequent contractions
- Word repetition highlighting treats contractions and leading apostrophes as the same word, reducing false negatives when scanning for overused terms
- Preferences labels no longer show stray focus rings when clicked, matching the visual style of surrounding controls
- Reading Ease now uses language-specific Flesch-style formulas for English, German, Spanish, French, Italian, and Dutch to better reflect each language’s typical word and syllable patterns
- Subscription purchase view no longer shows the trial countdown line when an active or trialing subscription is already displayed.
- E and Shift+E navigate only visible diff markers and numbering reflects visible count (e.g. 1 of 3) so the list does not jump.
- End key and B/Shift+G continue to scroll to bottom; Home and g/Shift+G scroll to top.
- Purchase flow changed to select subscription/unlock type->click Buy Now. Buy button disables until overlay has shown. Avoids confusion when there’s a delay on the Apple side loading the purchase overlay.

#### FIXED

- Character counts now ignore leading and trailing spaces and newlines in all stats views, preventing extra characters from being reported for padded selections and documents
- Word export now preserves paragraph line breaks when “Retain line breaks in paragraphs” is enabled so DOCX matches the preview (handles both HTML br elements and literal newlines in paragraph text).
- Table of contents and other hash links now scroll the preview correctly when clicked or activated with Return; target is resolved with getElementById and decodeURIComponent so IDs with special characters work.
- Arrow Up and Arrow Down now scroll the preview by one step (40px) instead of jumping to top or doing nothing; WebView default behavior is overridden with explicit window.scrollTo.
- Bookmark n (next by position) wraps from the last bookmark to the first; when at the first bookmark n advances to the next.
- Bookmark n and p (next/previous by position) no longer skip bookmarks that share the same row; the noRepeatY filter was removed so all bookmarks are included in position order.
- Incorrect product ID on MAS permanent unlock

### Version Marked 3.0.0b27 (1109)

#### FIXED

- Save button in Style Generator now shows a toast when clicked without an active edit session (“No style is being edited. Use Edit from the Style Manager”) instead of doing nothing silently

### Version Marked 3.0.0b26 (1108)

#### CHANGED

- Document displayName now respects showFullPathInWindowTitle so any UI that syncs from the document (e.g. window controller) shows the chosen path style

#### NEW

- EPUB export can download remote images and embed them when “Download remote assets” is checked in the Save as EPUB dialog
- EPUB save panel now includes the “Download remote assets” checkbox so remote images can be included in the exported book
- Preference “Show full path in window title” in Settings > Preview; when on, preview window shows the full file path instead of the filename

#### IMPROVED

- Window title updates immediately when toggling the preference (all open documents refresh)
- Zoom level in title bar no longer overwrites full path; title is taken from document display logic when base title is not provided
- Quick open (Cmd+Shift+O) shows transient documents by base name only (e.g. “Clipboard Preview” instead of the .mktransient filename)
- Quick open uses the same display title as the window for every document (transients, Bear, watch folder, full/short path per preference) via displayTitleForWindowOrList

#### FIXED

- EPUB table of contents links now use the sanitized heading id (nav.xhtml no longer matches data-orig-id and produces broken fragment links)
- Preview no longer blocks images whose filename contains tracking-like substrings (e.g. “_ga”); only URL query parameters are checked for tracking params
- Disabled image cache-buster in preview so remote image URLs are not modified and can load correctly
- Crash when closing document windows after long-running preview sessions due to double-closing the WebView when the window is closed
- “Add as New Style” in Style Generator now creates a new CSS file in Custom CSS and adds it to the Style Manager
- Save in Style Generator immediately refreshes preview in documents using that style (no manual refresh needed)
- Edit from Style Manager now loads the selected style instead of Blank Theme (retry when MarkedStyleBridge is not yet ready)

### Version Marked 3.0.0b25 (1107)

#### IMPROVED

- Showing an Opening X files window when opening multiple files at once so users get immediate feedback while documents load
- Style Generator file chooser now uses modern content-type filtering on macOS 12+ while remaining compatible with older macOS versions
- Dingus: Pasting URLs in the editor now avoids wrapping links in angle brackets on reference definition lines and when inserting inside parentheses, so Markdown stays valid
- Gremlin highlighting now focuses on control and invisible characters (including C0/C1 controls and zero-width characters) instead of flagging all non-ASCII text
- Preview window contextual menu now includes a Copy item when text is selected so users can copy selected preview content to the clipboard
- Use outline css rule to highlight keywords during selection
- Update color palette for keyword highlights
- Word repetition drawer now updates its list and document highlights live when you change minimum repeats or toggle ignore checkboxes
- Proofing highlights use simplified background styles so repeated-word and avoidance cues are clearer in both light and dark themes

#### FIXED

- Code blocks and other fixed-height preview layout now refresh correctly after Preview->Zoom In/Out/Reset so content fits at the new text zoom level
- Partial fix: Multi-file Dock drops now open all selected files. To my chagrin, this does not work when a preview window is already open
- Word repetition ignore settings now stay in sync between the drawer and in-document highlights, including temporary vs global ignores
- Word repetition detection now respects the current minimum repeat threshold and global ignore list even when they change without editing the document text
- Opening x-marked URLs now decodes file and page parameters safely, avoiding crashes and handling missing or malformed paths more gracefully
- PDF export now restores saved header and footer colors using a secure color unarchive transformer instead of deprecated transformers
- Subscription access prompts correctly present a modal subscription window in more cases where access is required
- Code blocks splitting betweeen pages have extra background padduing on origin page
- Prevent first-page bullet lists from visually splitting between pages in paginated PDF/Print output
- Ensure list items moved across page boundaries keep their padding and are not cleaned up as stale page breaks
- Improve generic list pagination so short UL/OL blocks that cross a page boundary can be moved as a whole or by item regardless of whether a TOC is present

### Version Marked 3.0.0b24 (1106)

#### CHANGED

- Dingus now uses a two-pane layout with the editor on the left and a combined Source/Preview pane on the right, switched via a segmented control and U so you can quickly toggle the Dingus output view.
- Dingus move-paragraph shortcuts are now mapped to and instead of and , freeing Option for selection expansion commands.
- Changed indent/outdent shortcuts to avoid conflicts with History menu
- Changed Dingus editor caret color from light blue to pink
- Open in Dingus shortcut from Cmd+O to Opt+Cmd+O to avoid conflicting with standard Open
- Open in Dingus menu item and button label from “Load” to “Open”
- Open in Dingus now available when Dingus is not key (AppController dingusLoad handles it)
- Pan and zoom diagrams tooltip to “Add panning (drag) and zooming (Cmd-scroll)”
- Pan and zoom checkbox enabled only when Mermaid is checked
- Diagram-container layout and .diagram-zoom-btn styles for zoom control overlay
- Mermaid is now always included in every document; removed includeMermaid conditional
- Default preferences: includeMermaid and panZoomMermaid set to YES
- Normalize whitespace in all HTML `<pre><code>` blocks as a final post-processing step so code blocks render consistently across standalone and multi-file documents
- Make direct-open OPML documents use the same converter and embedOPMLAsMermaid setting as includes so they can render as either Mermaid mind maps or nested outlines

#### NEW

- Dingus editor supports smart URL paste so that when the clipboard contains a protocol:// URL, pasting with a selection wraps the selected text as a markdown link `[text](url)` and pasting without a selection inserts a self-linked form instead of raw text.
- Dingus editor supports K to quickly insert markdown links, wrapping selected text as `[text]()` with the cursor positioned in the URL field, or inserting `[]()` with the cursor between the brackets when no text is selected.
- Dingus preview WKWebView now has WebKit developer extras enabled so you can inspect it using Safari’s Develop menu and Web Inspector for easier debugging of markup and CSS.
- Dingus editor supports selection expansion and contraction with and , stepping through word, inner/outer delimiters (including fenced code), sentence, paragraph, contiguous nonblank block (e.g. a whole table), enclosing list/blockquote/code block, and finally the entire document.
- When a selection scope is active (from opt-cmd-up/down), opt-cmd-left and opt-cmd-right expand the selection left/right (or up/down for paragraph scope) instead of moving the cursor
- When a whole paragraph is selected, opt-cmd-left/right automatically expand by paragraph even if the selection wasn’t created with opt-cmd-up
- Find bar in Dingus editor (Cmd-F) with search field, match count readout, and prev/next buttons; find next (Cmd-G) and find previous (Shift-Cmd-G) with consistent wrap at document boundaries
- Replace bar below find bar with Replace and Replace All (case-insensitive); Replace advances to next match after replacing
- Cmd-Option-F opens find/replace bar and focuses the search field
- Tab moves focus between the find and replace fields when the find bar is visible
- Delimiter highlighting: matching parentheses, brackets, and braces (including closing) in darker blue in the Dingus editor
- Quoted string highlighting: single- and double-quoted strings in light green (quotes and content) in the Dingus editor
- Dingus left pane Options menu (upper right) with Show line numbers, Show invisibles, and Highlight gremlins; choices are persisted in UserDefaults and restored when opening the Dingus.
- Show line numbers: gutter on the left with one number per logical line (wrapped lines count as one), medium gray; off by default.
- Show invisibles: spaces as mid-dots, tabs as rightward arrow, newlines as carriage-return symbol in light gray (custom MKInvisiblesLayoutManager).
- Highlight gremlins: light red background for non-ASCII (curly quotes, emoji), dark red for zero-width spaces and other problematic control characters; tab and newline are not highlighted.
- Dingus save and Save As now write with Unix line endings and UTF-8 (content is normalized before writing).
- Add optional Mermaid diagram pan/zoom when panZoomMermaid preference is enabled: Cmd+wheel to zoom, drag to pan, using Panzoom library
- Add panZoomMermaid preference in Style settings (default off)
- Add diagram-container overflow hidden for mermaid panzoom containers
- Zoom in (+), zoom out (-), and reset () buttons on Mermaid diagrams when pan/zoom is enabled
- Add automatic Mermaid mind map embedding for iThoughts, MindManager, FreeMind, and OPML file includes when mind map and outline embedding options are enabled.
- Add preferences to control whether included iThoughts and OPML files are rendered as Mermaid diagrams or embedded as images, lists, or file links.
- Add AppleScript support for exporting the current document as OPML alongside existing export formats.
- Include iThoughts .itmz mind maps via file inclusion syntax (`/path` or `<<[path]`); convert to Mermaid diagram or embed preview image based on preference
- MKiThoughtsConverter: parses mapdata.xml and style.xml to produce Mermaid mindmap, or extracts preview.png for base64 image embed
- Apps > iThoughts X: “Embed iThoughts X maps as Mermaid diagrams” checkbox (embediThoughtsAsMermaid); when off, embeds Quick Look preview instead
- Add Bike outline include support that converts .bike documents into Markdown or Mermaid mind maps when included
- Allow opening MindManager (.mmap), FreeMind (.mm), OmniOutliner (.ooutline), and Bike (.bike) files directly as mind maps or nested Markdown outlines, respecting existing embedAsMermaid preferences

#### IMPROVED

- Dingus editor syntax highlighting now colors markdown links with distinct colors for brackets, link text, and URLs, and also highlights autolinked `<url>` forms, making links easier to scan in the editor.
- Dingus editor indented code block detection in the syntax highlighter so that indented code is recognized both at the top level and when nested under list items, matching Markdown rules for code blocks inside lists.
- Dingus preview HTML is always wrapped in a div with id=wrapper and updated by replacing wrapper.innerHTML, preserving wrapper-specific styles and applying consistent padding in the preview.
- Dingus preview styles stay in sync with Marked styles by reapplying the current CSS whenever styles are updated, so edits in the Style Manager immediately affect the Dingus preview.
- Indent/outdent now properly restores multi-line selections after indenting/outdenting, expanding the selection to account for indentation changes
- Fix full disk access handling
- Change Dingus shortcut to ctrl-cmd-d to avoid conflict with default Dock show/hide shortcut
- Word and sentence selection expansion now works reliably in both directions and can cross paragraph boundaries
- Paragraph selection expansion now skips over blank lines and continues into adjacent paragraphs
- Selection expansion uses the actual selection boundaries instead of the original anchor point, allowing continuous expansion in both directions
- Find next/previous now wrap reliably at start/end of document in both directions
- Dingus editor options: Options pull-down always displays “Options” as title; 4px margin below dropdown; line number gutter and menu state stay in sync on launch (inset applied before options so gutter never overlaps content).
- Set DOCUMENT_DEBUG to false and guard layoutSidebarComments D.info/D.debug calls to reduce console noise
- Move SVG to direct child of diagram-container for correct cursor-centered focal zoom
- Persist and restore mermaid diagram zoom and pan state across Marked update/refresh
- Defer pan restore with double requestAnimationFrame so pan applies after zoom paints
- Zoom in/out use zoomToPoint with container center for correct focal origin (fixes pan-right behavior)
- TestFlight override now hides trial pill instead of showing fake trial state
- SubscriptionStatusChanged posted after dismissing subscription window to avoid modal races
- Make Mermaid fenced code block rendering more robust across MultiMarkdown, CommonMark, Kramdown, and Discount processors to reduce syntax issues in embedded diagrams.
- Improve OmniOutliner .ooutline mind map export so Mermaid diagrams use cleaner labels, no stray Markdown links, and no trailing spaces on lines
- Wire new mind map and outline embedding options into preferences and preview so users can control whether external outlines are embedded as Mermaid or nested lists
- Normalize whitespace inside HTML `<pre><code>` blocks as a final post-processing step so code formatting is consistent between standalone files and multi-file documents

#### FIXED

- Pressing Return on a backtick fence line only auto-inserts a matching closing fence when that line starts a new fenced code block; closing fences are no longer duplicated when a processor allows code fences without a preceding blank line.
- Markdown preview loading from watched folders now forces loadFromBaseURL to run on the main thread even when triggered from background operations, preventing WebKit/WebView crashes due to off-main-thread JavaScript evaluation.
- Fixed bug where indenting/outdenting list items at the beginning of a line added extra newlines
- Disabled History menu navigation ([/]) when Dingus is active to prevent conflicts with editor shortcuts
- Opt-cmd-left/right now correctly move cursor to paragraph boundaries when there’s no selection scope, instead of doing nothing
- MoveToEndOfParagraph (Ctrl-E) now positions cursor at end of line instead of jumping to the next line
- TOC max-N CSS selectors: correct ul depth so max-1 through max-5 hide the right nested levels
- PanZoomMermaid and includeMermaid preference changes now trigger document refresh (added to defaultsToObserve, handle in observeValueForKeyPath)
- SubscriptionStatusChanged notification now observed by documents to refresh trial indicator when “Disable Subscription Testing” toggled
- ShowError/showSuccess skip modals when “Disable Subscription Testing” is on to prevent dialog spam
- Prevent trailing double-space hard line breaks from appearing at the end of lines in code blocks and Mermaid diagrams, including those inserted via file includes
- Eliminate trailing double-space hard line breaks from all code blocks and Mermaid diagrams, including those generated by file includes and direct-open mind map formats
- Trial indicator hides correctly when “Disable Subscription Testing” is toggled on or off in the subscription window
- Server-driven TestFlight override now immediately refreshes subscription and trial UI in open documents and subscription windows

### Version Marked 3.0.0b23 (1105)

#### CHANGED

- Removed automatic “Open document” dialog scheduling on app activation, welcome close, crash restoration, and file open events
- Removed “Show Open dialog when activated with no files open” preference from Preferences
- Dingus: Cycle list marker order: unordered -> ordered -> empty -> unordered (ordered cycles to no marker)
- Dingus: Wrap selection with pair (e.g. [) now keeps selection on wrapped content instead of collapsing to end
- Dingus: List markers require space after to be treated as list: “* “ is list, “italics” is not

#### NEW

- Dingus: Pair * and _ as characters that auto-insert closing delimiter and support type-over and space-in-empty-pair
- Dingus: Shift+Cmd+L on paragraph inserts “* “ at beginning of line, keeping cursor position
- Dingus: Return on list or blockquote line with only marker clears the line and places cursor at start
- Dingus now supports loading, saving, and opening Markdown files via a status bar and File menu shortcuts (S, S, O, P).
- Preview menu includes an Open in Dingus command (E) to send the current document into the Dingus editor.
- New Markdown File (N) now prompts to open the new document in the default editor/Marked or directly in the Dingus.
- Dingus editor supports move paragraph up/down with and ; the current paragraph (including its newline) is cut and pasted above or below the adjacent paragraph so paragraphs do not merge. Documented in Markdown Dingus help.

#### IMPROVED

- Made WebView-driven UI features (TOC, highlighting, search, full screen, print, link checking, etc.) more robust under heavy background processing by consistently funneling their JavaScript calls through the main-thread-safe helper
- Dingus prompts to save unsaved changes when loading or closing and shows a dirty indicator in the window title.
- Dingus editor Tab behavior inserts a literal tab on blank lines while preserving smart list and blockquote indentation elsewhere.
- Dingus preview now resolves relative image and asset paths correctly when editing a file loaded from disk, matching normal Marked previews.

#### FIXED

- Eliminated a WebKit thread-violation crash by routing MarkdownDocument WebView JavaScript evaluation through a main-thread-safe runJavascript helper instead of calling stringByEvaluatingJavaScriptFromString directly from background processing
- Conductor: changing action type (e.g. Set Metadata to Run Command) now immediately refreshes the fields instead of showing stale Key/Value labels until the row is dragged
- Conductor: “Command not found” and other Run Command errors no longer show multiple alert dialogs when the same command fails across several processing passes
- Conductor: copy-to-bundle terminal commands in the sandbox error dialog now include “sudo” for mkdir, cp, and chmod (required for /Applications/… app bundle)
- DOCX export to Markdown no longer hangs when the document contains large tables with long cell content (replaced catastrophic-backtracking regex with line-by-line table parsing)
- TOC max-level depth selectors in export and tocstyle CSS now correctly hide nested list levels (e.g. max-2 hides depth 3, not depth 2)
- TOC placeholder comment now accepts optional hyphen in min/max levels (e.g. “max2” and “max-2” both work in
  )
- Find in document defers search for large documents to avoid blocking the UI and reduces WebKit pressure
- Preferences table drag-and-drop when row rect is zero-sized
- Duplicate runJavascript call removed in MarkdownDocument
- Preview statistics keyboard shortcuts no longer steal I from the Dingus editor, so italics shortcuts work reliably there.
- Dingus diff-based preview anchor insertion no longer crashes when HTML diffs extend past the end of the document.
- Dingus Shift+Tab outdent behavior no longer crashes when outdenting lines due to a safer cursor repositioning strategy after multi-line indentation changes.
- Moving a paragraph down to the end of the document no longer merges it with the last line; a newline is inserted before the moved paragraph when the insertion point does not follow a newline.
- Tab and Shift+Tab no longer move the cursor to the next line: after indenting or outdenting a list item, blockquote, or plain paragraph, the cursor stays on the same line at the correct logical position.

### Version Marked 3.0.0b22 (1104)

#### IMPROVED

- Progress indicator animation is slightly faster (0.8s to 0.6s)
- File path watching for backlinks and embeds now skips obvious non-file patterns (URLs, shell vars, markdown fragments) and only watches paths that exist on disk
- PDF export progress shows “Laying out… page X of ~Y” during layout phase and progress callback runs synchronously so the overlay updates

#### FIXED

- Custom preprocessor no longer crashes when path is empty or executable does not exist; skips gracefully with warning instead of attempting to launch invalid task
- Mk CLI handles relative file paths (was defaulting to looking inthe sandbox folder)
- Automatic open dialog no longer opens if a file open dialog is already open; added explicit currentOpenPanel check and scan for any visible NSOpenPanel since [NSApp modalWindow] can miss panels shown with beginWithCompletionHandler
- PDF export header/footer handling is defensive against nil or non-string values for logo/image tokens to avoid crashes
- Included files (e.g. on iCloud) no longer reported as “unrecognized format”; encoding is only treated as invalid when content failed to load, and UTF-8 is tried for known text extensions when the first read fails

### Version Marked 3.0.0b21 (1103)

#### CHANGED

- Toolbar icons for TOC, export, keyword drawer, and extras now use modern system symbol glyphs with slightly larger hit areas for better usability
- Preview Clipboard, MarsEdit Preview, Streaming Preview movd to File->New menu
- Improve Conductor action cell reuse so changing action type correctly rebuilds the dynamic fields instead of leaving stale controls in place
- Install Command Line Tool now embeds and installs the mk binary from the cli subfolder inside the app bundle so it no longer relies on a debug-only dylib
- Make the Dingus preview honor the same custom and built in styles as the main preview by mirroring the style list

#### NEW

- Custom Rules window includes a Reload All button that saves the current rule and refreshes all open document previews to apply changes immediately
- Added comprehensive dark mode support for link popup with proper inverted colors and styling when body has .inverted class
- Add style popup and pencil edit button to Dingus preview so users can choose and edit preview styles directly
- Open selected Dingus style in the Style Generator with a flow for duplicating built in styles as editable copies
- Added stringByRemovingControlCharactersAndGremlins method to automatically remove problematic control characters (including form feed, DEL, and C1 control characters) from markdown files when they are opened, preventing EPUB export issues caused by invisible gremlins in source files.

#### IMPROVED

- Insert TOC action now supports both minimum and maximum header levels and generates TOC markers that honor min/max depth settings
- Run Shortcut and Run System Service actions now fall back to manual text entry when sandboxing prevents automatic discovery of shortcuts or services
- Run Shortcut action uses the shortcuts CLI when available to populate the shortcut list more reliably
- Export button now cleanly toggles the export palette on and off, keeping its on/off state in sync with whether the palette is actually visible
- Export palette closing from keyboard shortcuts or export completion now reliably returns the export button to its off state
- Pagebreak markers in the TOC theme are clearer and more consistent, including support for inverted themes and fake page breaks
- Reduced long-press delay from 750ms to 250ms so users can quickly access link menu with a brief pause
- Link popup now uses modern macOS design language with backdrop blur, system fonts, and refined shadows
- Link popup buttons now have cleaner styling without borders, with improved hover and active states using system blue color
- Link popup typography updated to use SF Pro system font stack for native macOS appearance
- Link popup spacing and padding refined for better visual hierarchy and touch targets
- Add link to JS API docs in help sidebar
- “Replace horizontal rules with page breaks” and “page break before footnotes” can now operate independently. MultiMarkdown inserts a horizontal rule automatically in footnotes, which meant if hrs were page breaks, then footnotes always had a page break. This is now avoided.
- Added mk-no-page-break class to HR tags in footnotes divs when hrIsPageBreak is true and breakBeforeFootnotes is false, preventing unwanted page breaks in footnotes section
- Added support for webp and avif image formats in preview
- Image permission checks now only request access for inaccessible images, avoiding unnecessary permission prompts
- Enhanced image path detection to handle both HTML img src attributes and markdown image syntax
  alt
- Sandbox file access now handles cases where files can’t be probed due to permission restrictions, still allowing permission requests for parent folders
- Simplified drag-and-drop implementation in Conductor window to use standard pasteboard types instead of custom types
- Author entered in the EPUB save dialog is now saved as the default for the next export (epubAuthor in preferences).
- PNG safety checks no longer run for remote image URLs; only local file PNGs are validated to avoid main-thread network stalls that were freezing the preview.

#### FIXED

- Custom Rules search/replace now treats \n, \t, \, $ and other escapes correctly in replacement strings, preventing stray literal characters in output
- Custom Rules predicates with multiple filters are preserved when switching between rules instead of collapsing back to a single row
- Clicking the export button while the export palette is open now hides the palette instead of briefly flashing and reopening it
- Link popup menu now appears on mouseup after long press instead of disappearing immediately when mouse is released
- Images in preview now automatically request folder access when needed, addressing sandbox permission issues that prevented images from loading after reboots or file moves
- Fix Conductor actions table drag and drop by switching to string-based pasteboard types and simplifying row index handling to prevent invalid data crashes
- Prevent crashes in file watching by validating queued path entries against the current watched entries and safely handling deallocated objects
- Improve PDF export error alert to fall back to a generic message when the error description is unavailable
- Fallback to system default app when no specific application is found for opening a file, with logging when that also fails
- Fixed crash in PDF export when error description is nil by providing fallback message
- Fixed crash in VDKQueue watcherThread when accessing deallocated path entry objects by validating objects exist in dictionary before use
- Fixed crash in openCurrentElementInApp when no application is found to open file by adding nil check and fallback to default application
- Prevent PDF export and print from crashing when footer templates contain %logo or %image placeholders in left or right footer text
- Prevent crashes when showing the blocking subscription window after access has expired or is missing
- Reduce rare EXC_BAD_ACCESS crashes while monitoring large sets of files for changes
- EPUB export failures caused by control characters and gremlins in markdown source files by cleaning text immediately after file read and before any processing occurs.
- Custom title and author entered in the EPUB save dialog are now applied to the exported EPUB; previously they were ignored.
- Conductor “Insert TOC” action now inserts a blank line after the TOC marker so the following line (e.g. the first heading) is parsed as Markdown instead of plain text.
- EPUB export now escapes unescaped ampersands in HTML (e.g. “AT&T”) so generated XHTML is valid.

### Version Marked 3.0.0b20 (1102)

#### CHANGED

- Export palette is now disabled for Quick Look preview documents
- Status messages display in red for Quick Look preview warnings
- Status messages are clickable when truncated or have verbose messages
- Footnotes are now conditionally included in the sidebar based on user preference (defaults to enabled)
- When includeFootnotesInSidebar is disabled, only comments (CriticMarkup, Fountain, Word) appear in the sidebar, not footnotes
- MASSubscriptionRegistrar.registerFromTransaction now accepts a transaction that is already verified by the caller (SubscriptionManager), removing the redundant verification check that could prevent MAS purchases from being registered for Paddle access
- Diff markers now use cyan color instead of red (light cyan when inactive, darker cyan when active) to avoid appearing as errors

#### NEW

- Quick Look preview detection for unrecognized file types with warning messages
- Status message popover that displays full or verbose messages when clicked
- Verbose message support for status messages (shown in popover, not status bar)
- Special warning messages for .doc and .rtf files with instructions to convert to DOCX
- Export menu keyboard shortcut (Shift+E)
- Register MAS subscription purchases with Paddle version access system when transactions are verified
- Mk Command Line Tool
- Diff markers are now clickable and show help cursor on hover
- Clicking diff markers displays a tooltip explaining what they are and keyboard shortcuts (E/E)
- Diff markers now have title attribute for hover tooltips with navigation instructions

#### IMPROVED

- Error messaging for unsupported file types with detailed explanations in popovers
- File type recognition to properly detect Quick Look preview mode
- Style Manager shortcut legend now shows specific keyboard shortcuts (1-9, 1-0, 1-0, 1-0) instead of vague description
- Long tables now split at row boundaries when printing to PDF instead of moving the entire table to the next page. The table ends at the last fully-visible row on each page and continues on the next page.
- Paragraph splitting in PDF print now prevents widowed lines by detecting when a split would leave fewer than 20 characters on the next page. When detected, the split is adjusted to move the previous line to the next page instead, avoiding orphaned single words or short phrases.
- Added early cached subscription check to provide faster verification when cached data is available
- Enhanced subscription verification logging to help diagnose timeout and cache issues during StoreKit entitlement checks
- MarkdownDocument, MKStatsStore, and MKTextAnalyzer description methods no longer dump full document text, HTML, or other large fields; they now show string lengths, key counts, and compact state (e.g. html: (N chars), string: (N chars), wordCount, outlineMode, isUpdating) so debug and NSLog output stays usable
- Help CSS now uses modern Sass color APIs compatible with upcoming Dart Sass releases to avoid deprecation issues.
- Mk command line tool now detects stdin vs TTY more reliably and supports explicit streaming and STDIN-based preview workflows.
- Diff markers have higher z-index and proper pointer events to ensure they’re always interactive

#### FIXED

- Crash when clicking status message during document deallocation
- Weak reference issues during object deallocation that caused crashes
- PDF export now automatically overrides scroll-behavior: smooth to prevent pagination issues where content repeats or is lost across pages
- Subscription check now properly falls back to cached data when StoreKit entitlement checks timeout after system restart, preventing users from being blocked from accessing the app
- Table of Contents no longer emptied after print or PDF export; fetchHTML now clones the TOC instead of moving it out of the DOM so the sidebar TOC stays available
- Subscription check falls back to cached data when the MAS verification server returns an error or the response cannot be parsed, preventing users from being blocked when the server is unavailable
- Subscription verification completion handling and dispatch group usage so the finish callback and group.leave() are invoked correctly in all paths, avoiding races and potential deadlocks when StoreKit entitlement checks time out or complete out of order
- Removed ASCII escape sequences before rendering
- Help menu search now indexes help topics as soon as the app launches and no longer requires opening the help window first.
- Help menu search results now always appear in the Help menu dropdown and respect the result limit, even when there are no matching topics.
- Help index sidebar now includes the Command Line Utility topic and stays in sync with the configured sections.

### Version Marked 3.0.0b19 (1101)

#### CHANGED

- Reset Alerts button in General preferences now also resets the automatic open dialog preference

#### NEW

- Add checkbox to automatic File Open dialog allowing users to disable showing the dialog when Marked is activated with no files open

#### FIXED

- Sidebar comments now properly detect and display footnotes in CommonMark format (fn-XX) in addition to MultiMarkdown format (fn:XX)
- Hashtag highlighting regex now avoids matching tags within HTML attributes like href=”#tag”
- Document scroll position no longer resets when scrolling to bottom of documents with many footnotes
- Sidebar updates no longer cause document scroll to jump to incorrect position
- Horizontal rules with page break setting now properly create page breaks in paginated PDF export by including hr elements in pagination selectors
- EPUB export now properly handles colgroup tags with opening and closing tags instead of self-closing format
- EPUB export now properly escapes XML special characters in footnote data-comment attributes to prevent XHTML validation errors
- When a file is deleted, Marked now shows the “I swear it was just here” message in the preview instead of requesting file access permissions
- Permission dialogs are now centered on screen to prevent them from appearing under the menu bar
- CriticMarkupRenderer now correctly uses the source string when processing markup patterns instead of the modified output string
- Bypass link now shows reliably for TestFlight users outside the US
- Removed region check requirement that was preventing the bypass link from appearing
- Comment sidebar close button hidden when sidebar is closed
- Typo in Welcome splash screen

### Version Marked 3.0.0b18 (1100)

#### CHANGED

- Sidebar scroll handler now captures and preserves scroll position from when scrolling stopped to prevent layout shifts from resetting scroll
- Bypass link only hides for confirmed production App Store builds, not based on region or unreliable TestFlight detection

#### IMPROVED

- Footnote detection now searches the entire document if no footnotes container is found, making it more robust for different markdown processors
- Footnote text extraction now properly removes CommonMark backlink elements and patterns for cleaner sidebar display
- Reference link detection now supports both href-based and id-based matching for CommonMark footnote references
- Sidebar comment visibility updates now respond 3x faster after scrolling stops (50ms vs 150ms debounce)
- Added scroll restoration protection to prevent recursive scroll events during sidebar layout updates
- Pagination selectors now include elements with mkpagebreak class for more reliable page break handling
- Bypass link now shows in DEBUG builds for local development

#### FIXED

- Removed region check requirement that was preventing the bypass link from appearing

### Version Marked 3.0.0b17 (1099)

#### NEW

- Add autocompletion to folder preview extensions token field with support for common file extensions including markdown variants, document formats, and screenplay formats
- Extract and protect math blocks from typographic processing using hold/replace system similar to code blocks

#### IMPROVED

- Slight redesign of Settings
- Redesign settings group backgrounds with rounded corners and accent color edge using Spiro Disco Ball theme color
- Add screenshot image to Full Disk Access grant dialog showing System Settings interface
- Add helpful note to Full Disk Access dialog explaining how to add Marked.app if it doesn’t appear in the list using the + button
- Update Help with new Settings screenshots
- Whitelist github.githubassets.com PNGs to skip safety checks for faster loading of documents with many GitHub emoji
- Auto-detect blank previews and trigger refresh attempts, with special handling for Scrivener documents that fail to import

#### FIXED

- Issues accessing security bookmarks
- Prevent crash when file watcher receives invalid memory pointer in kevent
- Prevent crash when style generator tries to access undefined acceptTypes property
- Preserve emoji and UTF-8 symbols when saving EPUB

### Version Marked 3.0.0b16 (1098)

#### CHANGED

- Sidebar comment and footnote text colors now consistently use black in light mode and white in dark mode
- Lopash theme: updated background color to rgb(247, 248, 248)

#### NEW

- Added portrait/landscape orientation selector with icon representations in PDF export window

#### IMPROVED

- “Reopen Last File” menu item is now automatically disabled when there are no recent documents to reopen
- Sidebar and comment/footnote bubbles now have darker backgrounds in dark mode
- Font-size override now uses style element with !important at end of head to ensure it overrides all stylesheet rules
- Swiss theme: increased base font size from 14px to 16px for better readability
- Swiss theme: improved line-height and spacing rhythm throughout for better reading comfort
- Swiss theme: refined table styling with lighter borders, rounded corners, and subtle alternating row colors
- Swiss theme: added max-width constraint for better readability on large screens
- UpstandingCitizen theme: standardized spacing and applied 1.5 line-height rhythm throughout

#### FIXED

- Sidebar border now completely disappears when collapsed in light mode
- Sidebar no longer overlaps content in Amblin and Manuscript styles
- Tables in Goldilocks style inverted mode now use dark backgrounds with alternating row shades for better readability
- Font-size override now correctly applies to html, body, and #wrapper elements (was only applying to body)
- Add to Marked buttons in embedded style gallery now work by handling x-marked-3 URL scheme in addition to x-marked scheme
- Fixed crash when closing style editor window by setting releasedWhenClosed to NO and adding proper window delegate cleanup to prevent deallocation during close animation
- UpstandingCitizen theme: corrected heading size hierarchy (h4 larger than h5/h6, with h5 larger than h6)

### Version Marked 3.0.0b15 (1096)

#### NEW

- Added saveODT: IBAction method that properly calls saveODTWithProfile: for ODT file exports
- Added TestFlight override checkbox in subscription window that allows non-US TestFlight users to bypass subscription checks when purchases aren’t available
- Added region detection to automatically show TestFlight override option only for non-US users, with compiler flag option to always enable for testing
- Added testflight_override field to TrialStatus API response structure for potential server-side override support
- Full tabbed window support (Settings->General->Open documents in tabs)
- Added Quick Open panel (Shift-Cmd-O) for fast switching between open documents and accessing recent files with real-time search filtering

#### IMPROVED

- Rewrote Quick Overview splash screen to avoid scrollbars and fix Quick Config
- Added debug logging to hasPermanentUnlockWithCompletion to help diagnose subscription access issues

#### FIXED

- Prevent crash when saving files that triggers auto-update by adding nil checks for baseURL in file watching handlers
- Fix crash when saving Open Document Format files by routing ODT saves through proper export controller instead of unsupported textutil conversion
- Fixed issue where users with active trials couldn’t open documents due to hasPermanentUnlock completion callback not being called on main thread
- Fixed issue where clicking “Marked Help” menu item opened to invalid page “_NS:215” instead of index page by validating menu item identifiers and ignoring internal AppKit identifiers
- Fixed crash when importing CSS styles in Style Generator by safely handling WKOpenPanelParameters acceptTypes property that is not KVC-compliant
- Tab order in preferences to allow each pane to be navigated with Tab and Shift-Tab

### Version Marked 3.0.0b14 (1094)

#### CHANGED

- Sidebar margin only applies when viewport width is 1200px or less

#### IMPROVED

- Wrapper height no longer constrained to viewport when comments sidebar is visible
- Drop shadows on wrapper now extend properly when scrolling long content

#### FIXED

- Ensure Markdown window bottom toolbar background matches system appearance in Dark Mode
- Handle NSURL objects in file path monitoring to prevent crashes when included files are tracked as URLs instead of strings
- Sidebar no longer causes wrapper to shift when viewport is wide enough

### Version Marked 3.0.0b13 (1093)

#### NEW

- EPUB export now validates XHTML before saving and provides detailed error messages with line numbers, column numbers, and code context (similar to Ruby error messages) to help identify markup issues.
- EPUB export automatically generates a default cover image when no custom cover is provided, featuring a gradient background with title-centered and author byline at the bottom.
- Default cover preview is shown in the EPUB export dialog image well and automatically updates when title or author changes, ensuring the well is never empty.

#### IMPROVED

- XHTML validation errors now include contextual code snippets showing the problematic line with a pointer indicator, making it easier to identify and fix markup issues even when working with Markdown source.
- EPUB export provides configurable XHTML validation with optional auto-fix mode, allowing users to choose whether to stop on errors or continue with warnings.

#### FIXED

- EPUB export now properly handles checkbox input tags by ensuring they are self-closing and XHTML-compliant, preventing XML parsing errors that caused content truncation in exported EPUB files.
- EPUB export now ensures all HTML void elements (input, br, hr, img, meta, link, etc.) are properly self-closing for XHTML/XML compliance, preventing XML parsing errors that caused content truncation.

### Version Marked 3.0.0b12 (1092)

#### CHANGED

- Updated export CSS to use #firstdiff selector instead of .diff-marker class for better specificity in diff marker styling.

#### FIXED

- Users with active trials can now open documents. The subscription access check was failing because MKSubscriptionManager was missing the required SubscriptionProvider protocol methods, causing the access check to stop before checking trial status.

### Version Marked 3.0.0b11 (1091)

#### NEW

- Added security-scoped resource access management with proper cleanup using @try/@finally blocks to ensure resources are always released
- Export palette now supports mouse interaction - single-click on any export option triggers that export format
- Export palette rows now show hover state highlighting when mouse moves over them
- Export palette shows active/activated state with emphasized highlight when an export option is clicked or selected via keyboard
- Export palette displays loading spinner in the shortcut column while waiting for save dialog to appear after selecting an export format

#### IMPROVED

- Added comprehensive debug logging throughout DOCX export process including temp directory creation, zip archive initialization, file operations, and security-scoped resource access
- Enhanced error messages with detailed diagnostics about directory existence, writability, and security-scoped access status to help troubleshoot export failures
- Improved temp directory handling with fallback to container directory for better reliability in sandboxed environments
- Keyboard shortcuts in export palette are now vertically centered to match title and icon alignment
- Added comprehensive debug logging throughout DOCX export process including temp directory creation, zip archive initialization, file operations, and security-scoped resource access
- Enhanced error messages with detailed diagnostics about directory existence, writability, and security-scoped access status to help troubleshoot export failures
- Improved temp directory handling with fallback to container directory for better reliability in sandboxed environments
- Added security-scoped resource access management with proper cleanup using @try/@finally blocks to ensure resources are always released

#### FIXED

- DOCX export now properly handles security-scoped resources from NSSavePanel, fixing “Failed to initialize zip archive” errors when exporting to user-selected locations
- Changed zip file creation to occur in temp directory first, then move to final location, avoiding sandbox permission issues where directory write access is restricted even with file-level security scopes
- DOCX export now properly handles security-scoped resources from NSSavePanel, fixing “Failed to initialize zip archive” errors when exporting to user-selected locations in sandboxed apps
- Changed zip file creation to occur in temp directory parent first, then move to final location, avoiding sandbox permission issues where directory write access is restricted even with file-level security scopes
- Removed footnote return symbol () from exported DOCX footnotes
- Fixed footnote reference detection to support multiple HTML formats (#fn:N, #fnref:N, and #fnN)
- Fixed footnote relationship ID format (changed from rIdFootnotes to rId9) to match Word’s numeric pattern
- Fixed DOCX files containing invalid compressed data by ensuring zip file is created outside the source directory
- Fixed Word “unreadable content” errors by properly escaping XML characters in footnote text and filtering invalid control characters
- Applied same security-scoped resource access and temp directory zip creation fixes to EPUB, TextBundle, and TextPack exports

### Version Marked 3.0.0b10 (1090)

#### CHANGED

- Marked 3 now allows the use of x-marked-3:// url scheme to differentiate in cases where both Marked 2 and Marked 3 are installed

#### NEW

- Added Full Disk Access status indicator in Processor preferences with green/red dot showing current permission status, automatically refreshes when window becomes active or app receives focus
- Added code signing verification for debug builds with warnings when code signing is missing, as Full Disk Access requires proper code signing
- Added security-scoped resource access management with proper cleanup using @try/@finally blocks to ensure resources are always released

#### IMPROVED

- Custom style loading falls back to parent directory access only when no bookmark exists
- Full Disk Access detection now tests multiple protected locations (Mail, Keychains, Calendars) for more reliable status detection across different system configurations
- Grant Permissions dialog now provides clear step-by-step instructions and deep-links directly to System Settings Full Disk Access panel, with better messaging for already-granted permissions
- Added system-level file test (TimeMachine plist) as primary Full Disk Access check for more reliable detection across different system configurations
- Enhanced error detection to check both NSCocoaErrorDomain and NSPOSIXErrorDomain error codes for more accurate permission status reporting
- Full Disk Access indicator now only refreshes when Marked becomes active, reducing unnecessary permission checks when other apps activate
- Added comprehensive diagnostic logging including executable path, bundle path, error domains, and code signing status to help troubleshoot permission issues
- Added fallback tests using access() system call and Mail preferences file reading for additional permission verification methods
- Added comprehensive debug logging throughout DOCX export process including temp directory creation, zip archive initialization, file operations, and security-scoped resource access
- Enhanced error messages with detailed diagnostics about directory existence, writability, and security-scoped access status to help troubleshoot export failures
- Improved temp directory handling with fallback to container directory for better reliability in sandboxed environments

#### FIXED

- Custom CSS from Documents now loads after restart by using the saved security bookmark before checking file existence
- Report Issue zip creation now works in sandboxed builds by using bundled TWZipCreator library instead of system zip command, and creates zip in temp directory with optional save panel for user copy
- Full Disk Access check now uses actual user home directory instead of sandbox container directory, fixing false negative permission detection
- DOCX export now properly handles security-scoped resources from NSSavePanel, fixing “Failed to initialize zip archive” errors when exporting to user-selected locations
- Changed zip file creation to occur in temp directory first, then move to final location, avoiding sandbox permission issues where directory write access is restricted even with file-level security scopes

### Version Marked 3.0.0b9 (1088)

#### NEW

- Patch files and scripts to implement CommonMark list-interrupt-paragraph support in cmark-gfm

#### IMPROVED

- Metadata replacement retains HTML edge-case handling and cleans up intermediate buffers.
- Oroved Some preferences layout
- Metadata replacement retains HTML edge-case handling and cleans up intermediate buffers.
- Code span detection uses reliable odd/even backtick counting
- Added debug logging with [HighlightDebug] prefix for troubleshooting
- File-open auto dialog re-checks for any open document and skips when welcome closes with docs open.
- Welcome window centers and suppresses file-open while visible.
- Thread-safe navigation history access using serial dispatch queue

#### FIXED

- Missing disclosure triangle on `<details>` blocks in some themes @fixed Duplicate Scroll to Edit options in Settings > Preview @fixed == in Setext headers being broken by highlighter
- Superscript/subscript processor now skips double-tilde sequences (~~) so strikethrough syntax works correctly. Previously deletion was incorrectly processed as subscript.
- Highlights no longer break Setext headers (lines with only ==+ after text)
- Highlights skip sequences with more than 2 = in a row (=== or more)
- Deletions no longer processed inside code spans or code blocks
- Announcements skipped on first launch and latest marked read for new users.
- Help viewer no longer auto-instantiates at app init and closes on quit.

### Version Marked 3.0.0b8 (1087)

#### CHANGED

- Changed “Show Comments” in gear menu to “Show Comments and Footnotes” for clarity
- Moved tips container bottom position from 40px to 20px
- Minor UI adjustment to external editor popup button styling in preferences

#### NEW

- Integrated Style Generator and Gallery
- Custom styles from Documents folder breaking after restart
- Scrivener emphasis/italic at end of line causing extra asterisks
- Added “Show Comments and Footnotes” menu item in Proofing menu with Cmd+Ctrl+C keyboard shortcut
- Added getExternalEditorPath helper method to safely extract editor path from NSUserDefaults
- Added close button to comments sidebar in lower left corner

#### IMPROVED

- Add licenses for Kramdown and CommonMark to help
- Help Docs redesigned
- Keyboard shortcuts in help now use Apple-recommended + separator between keys, key display redesigned
- All external editor path lookups now use safe extraction method instead of direct objectForKey access
- Comments sidebar positioning now accounts for close button height to prevent overlap

#### FIXED

- Custom styles from Documents folder breaking after restart
- Scrivener emphasis/italic at end of line causing extra asterisks
- Help Doc navigation and bookmarking
- External editor path handling now supports multiple storage formats (NSString, NSKeyedArchived NSData, bookmark data)
- Close button click handler now properly synchronizes both Cocoa and JavaScript state before hiding sidebar
- Tooltip restore function now properly synchronizes state when restoring comments from “Comments hidden” tooltip
- Fixed clipboardSaved reference bug (changed to self->clipboardSaved)

### Version Marked 3.0.0b7 (1083)

> Be sure to check out the revamped Style Gallery and the new Style Generator!

> Style Gallery:

> - Preview, download, and add to Marked
> - Sort by name or date

> Style Editor:

> - Adjust all common settings visually
> - Full featured built-in CSS editor
> - Live preview of changes
> - Save, share, or add to Marked

#### CHANGED

- Style Stealer now uses MKStyleManager instead of legacy user defaults

#### NEW

- Added top-level Style menu mirroring preview picker

#### IMPROVED

- Switching styles reloads CSS/fonts without refresh
- Scrivener document processing now re-renders when preferences change, so “display titles as headers” setting takes effect on refresh without requiring document reopen

#### FIXED

- Custom CSS now grants file access before applying
- Scrivener documents with empty content but titles now show headers when “display titles as headers” is enabled
- Scrivener documents are now included in processing even when RTF files don’t exist, if they have titles and headers are enabled
- Links within italic, bold, or highlighted text in DOCX files now maintain their formatting correctly. Previously, formatting would break when a hyperlink appeared within formatted text, producing invalid markup like `_text_ [link](url) _more text_` instead of `_text [link](url) more text_`.
- New styles added via URL handler addstyle now appear at end of menu
- New styles from Style Generator now appear at end of menu
- New styles from Style Stealer now appear at end of menu

### Version Marked 3.0.0b6 (1082)

> Big changes revolving around how the MAS version handles Run Command actions in Custom Rules.

#### CHANGED

- Default shell detection now falls back to /bin/zsh on modern macOS
- Log messages formatted as single lines for easier filtering
- Crossgrade menu item now opens help document instead of showing window
- Menu item now reads “Save Transient Preview” to reflect that clipboard, streaming, and extractor windows all use the same save path.

#### NEW

- MAS version can execute external binaries when copied to app bundle
- Automatic detection and execution of scripts with external shebangs via system interpreters
- Proactive file access requests when entering commands in Conductor window
- File access checking for executables referenced in script content
- Error dialogs with step-by-step instructions for copying binaries to bundle
- “Copy Terminal Commands” button in error dialogs for easy setup
- Wrapper script generation for Python scripts to prevent xcrun errors
- Added Help->Copy UUID menu item to copy user identifier for license crossgrade requests
- Added Sandbox Restrictions help document with crossgrade instructions and mailto link with pre-filled body text
- “Kind” predicate option for Custom Rules (choose from known document types)
- Mark all changes between document saves and allow navigation

#### IMPROVED

- File picker dialog now allows selecting executable files directly
- Better handling of symlinks in file access requests
- Error messages now include actual paths and actionable instructions
- Error messages for sandbox execution failures now include instructions for copying UUID when requesting crossgrade
- Updated Custom Processor documentation to clarify Python/Ruby script limitations in MAS version
- When making changes to preferences that Export Profiles track, automatically save the change to the current profile
- “Restore default styles” in Style Manager offers to restore default order of built-in styles
- Option to only show most recent edit marker
- Fix width/height of diff markers
- Add multi-select to Style Manager
- Top alignment of all Settings panes
- Content Extractor previews generate slugged filenames from the capture URL (queries removed) so default save names match the source site/article.

#### FIXED

- Crash when canceling file access permission dialog
- Missing file access checks for external scripts selected via file picker
- Scripts with external Python interpreters now execute through system Python
- Preview content now displays correctly after crash recovery by detecting loading page and forcing full reload
- Default to .md extension for New File
- Automatic preview updates not happening on save
- Drag improvements for style manager
- Settings->Advanced option alignment and spacing
- Saving transient previews now defaults to Markdown extensions and writes the underlying text instead of the old HTML placeholder.
- Opening transient previews in an editor now prompts for a Markdown save location and launches the external editor with that file.

### Version Marked 3.0.0b5 (1081)

#### IMPROVED

- Update documentation
- Additional debug logging

#### FIXED

- Display headlines for empty Scrivener documents
- Remove “Headlines for Scrivener Document Titles” from Export Profiles, so that the preferenc sticks when reloading profiles
- Remove “Change Tracking <-> CriticMarkup” from Export Profile saving
- Button backgrounds in Style Stealer and Markdownify URL
- Scrivener documents not updating preview when file changes

### Version Marked 3.0.0b4 (1079)

#### IMPROVED

- Only shows subscription window when no active subscription or trial is found
- Clean up INFO level logging

#### FIXED

- Indentation in Discount guide code blocks
- When titles are missing from Scrivener documents, avoid inserting
- Repeated security bookmark requests
- Skip backlink scanning if the document is in the Watchers directory
- Automatic Open dialog repeating after cancelation

### Version Marked 3.0.0b3 (1078)

#### IMPROVED

- Only shows subscription window when no active subscription or trial is found
- Clean up INFO level logging

### Version Marked 3.0.0b2 (1073)

#### NEW

- Announcement system so that the developer can show updates and announcements to users without requiring a new build
- Style Manager allows you to enable/disable built-in styles, reorder, preview and reveal/edit styles.
- Option-click back button in mini stats panel opens file in default editor
- Export Markdown now copies local image assets to assets folder
- Side panel for word repetition counts. Shows how many times each stem appears in the document, with options for ignoring per-document or globally.
- Export Drawer converted into Spotlight-style panel for keyboard-driven export functionality

#### IMPROVED

- Reorganize menu items, add Proofing menu
- Mini stats panel back button icon changes when option key is held
- Mini stats expand button now uses system ellipsis icon instead of text
- Mini stats panel height increased for better content display
- Help panel layout updated to use flexbox for better responsiveness
- Export menu item now pops up a searchable, Spotlight-style dialog with all available export options (instead of the previous drawer)

#### FIXED

- Sandboxed access to wiki files and backlinks
- Add History menu items to MAS and Setapp builds
- Save dialog now ensures suggested filename includes .md extension
- Empty inline links no longer incorrectly match image syntax
- JavaScript regex fix for HTML id attribute detection

### Version Marked 3.0.0b1 (1072)

> An all-new, best-in-class DOCX exporter. Marked can now even open DOCX files and export them as Markdown or any other format.

> New Markdown processors built in: CommonMark (with GFM extensions) and Kramdown! Kramdown adds the ability to apply ids, clases, and other attributes to inline and block elements, among other features.

> Let’s see, what else?

#### NEW

- Syntax highlighting for CSS and JSON fields
- Custom Styles can be dragged and dropped on the Settings window to add them
- Menu of static Word export styles
- Ability to open DOCX files directly and convert to Markdown
- Display a message when an empty file is opened
- DOCX change tracking is now converted to CriticMarkup in the Markdown document
- CommonMark processor option, includes all GFM extensions
- Kramdown processor (requires Ruby), supports all Kramdown syntax
- UI for setting up conditional processors based on various criteria, with built-in filters, transforms, and command execution
- EPUB export
- Allow custom word styles
- Import/Export all preferences as a JSON file
- Display comments (CriticMarkup, Scrivener, Word) in a sidebar instead of inline
- Drag and drop files onto the Custom Rules window to intellegently detect file type and add an appropriate action to the current rule
- Convert [[wiki links]]
- Fully functional back/forward navigation when following links to other Markdown files
- Allow user to specify minimum level to include in table of contents (`<!--TOC min4-->` or `{{TOC:2-6}}`)
- Make missing file links clickable to create a new file
- Show wiki backlinks to current document
- Save as TextBundle/TextPack
- Logo/image in PDF/Print header/footer
- Current heading in PDF/Print header/footer
- Footnotes at bottom of page they occur on
- Save export settings to profiles for easy re-use
- Built-in Style Stealer for extracting styles fro web sites
- Markdown Dingus (Help->Markdown Dingus) for live testing of syntax for Marked’s built-in processors
- Style Manager allows for complete control over built-in and custom Styles

#### IMPROVED

- Completely rewritten DOCX export, faster, valid style markup
- Reorderable custom Styles
- Button visibility in Settings
- Double click to rename Custom Styles in menu
- Performance improvements for lined text views
- Hide advanced config options when MathJax is disabled
- Ignore non-numeric values in reading speed text field
- Suppress open dialog when opening a file
- Scrivener import will convert single-cell tables (used for asides) into block quotes
- When exporting, convert non-built-in fonts to equivalent system fonts
- Better regex for detecting highlights and deletions in text
- Completely rewritten Scrivener import, faster and with no reliance on Ruby or Python
- Rewritten RTF/RTFD export
- Rewritten CriticMarkup handling, all native, no reliance on external scripts or tools
- Handle DOCX highlights, using a `<mark>` tag with appropriate background color
- In DOCX import, allow highlights to be suppressed when comments are disabled
- Clicking on the WPM number in the detailed stats window makes it editable
- Detailed stats view UI adjustments
- Native mmd_merge handler
- Hold option to set debug logging level from the Help menu
- Additional documentation about debugging and support requests
- Store current autoscroll speed as a global preference instead of preview-specific value, ensuring consistent behavior across previews and maintaining preferences across launches.
- Autoscroll now works with a WPM (words per minute) setting, and calculates how many words would fit on the screen with the current style, setting the scroll speed accordingly
- Syntax highlighting in code blocks is preserved when exporting to Word
- Markdown export can optionally wrap text at a specified width
- Markdown export can optionally convert inline links to reference links
- Change default file extension for markdown export to “.md”
- Clean up Markdown export, especially for Word files
- Better handling when custom processors are disabled or not available
- Save assets to subfolder when exporting HTML, OPML, or Markdown
- Add option to convert Word change tracking <-> CriticMarkup
- Substitute Goldilocks for Multi-Column
- Handle proper conversion of Pandoc % metadata
- Make document metadata available as MD_keyname environment variables to custom Run Command and Run Embedded Script actions
- Improved conversion of existing custom processor settings to the new Custom Rules format
- Bi-directional MathML to OMML (Word)
- Intra-document links work in PDFs

#### FIXED

- Help document list item link styling
- Tab order in Proofreading Settings
- Paragraphs generated by DOCX converter that start with `<mark>` not being properly handled by MultiMarkdown
- Don’t strip query parameters when copying URL with right click or popup menu
- Thread safe accessors for document stats
- Status bar and drawer not changing to dark mode
- Recognize more ways Word inconsistently marks paragraphs as headings
- Handle `metadata` document in Scrivener binder as document metadata
- Race condition on filesize
- Don’t show open dialog if Welcome screen is opening
- Handle MarsEdit 5 previews
- Handle emphasis with internal spaces when converting HTML to Markdown
- Raw file includes not working

#### CHANGED

- Keyboard shortcuts for export options
- Remove RTFD export option. RTFD will be automatically selected when the export includes images
- Remove Additional Scripts window as it’s been replaced by Custom Rules
- Custom Processor Log changed to Custom Rules Log

Support Site | Knowledgebase