# Marked Changelog

### Version Marked 3.0.15 (1143)

#### CHANGED

- Error overlays and CLI instructions send Marked Support button clicks to the new-question form

#### IMPROVED

- File watch coalesces primary-file events during atomic saves (250ms debounce) and forces a full preview reload when a Process-phase processor is enabled
- File change detection uses content hash as well as modification date so in-place saves are not missed when mtime is unchanged
- Processor queue cancels in-flight work on reload and ignores stale finishes so slow Pandoc passes cannot overwrite a newer save or skip marker insertion
- Per-document processor choice during a preview pass no longer temporarily writes defaultProcessor to shared preferences (avoids spurious preference notifications and races)
- Preview error overlay support link uses HTTPS for the main support site

#### FIXED

- External save updates the preview again when a Conductor Process rule (e.g. Pandoc) runs, including atomic editor saves that emit rapid kqueue delete/write bursts
- Edit markers appear after saves when Pandoc or other processors change the HTML wrapper layout, by splitting preview HTML on wrapper markers instead of requiring a fragile five-part regex split
- Edit markers anchor to markdown source changes (pre-processor) rather than post-Pandoc HTML, so diffs are detected reliably
- Edit markers at the start of `#wrapper` are no longer removed on init and are repositioned into the first content block so they stay visible
- Opening a new file in the same window resets diff baselines, included files, and preview state so markers and reload behavior start clean
- Preview processing no longer hangs or triggers Main Thread Checker errors when Pandoc or file-watch reloads run on the background processor queue
- Preferences export profile controls are only updated on the main thread when defaults change
- Report an Issue and Open Support Site open `https://support.markedapp.com/questions/add` instead of the old `discussion/new` URL that returned 404
- Marked Support in the Help menu opens the support site over HTTPS

### Version Marked 3.0.14 (1141)

#### NEW

- Confetti celebration when a subscription, trial, or lifetime license becomes active in the subscription window

#### IMPROVED

- Subscription window shows Activating your subscription… while the billing server confirms a new purchase
- Post-checkout restore retries automatically until Paddle and the billing server sync complete
- Subscribe URL handler uses the same post-checkout activation path as the in-app checkout sheet/
- Checkout sheet dismissal refreshes subscription status without manual restore
- Confetti is denser and longer with multiple emitters and timed bursts during checkout and restore success
- Lifetime Manage Subscriptions easter egg uses the full celebration animation
- Diff markers sit on the edited line within a block instead of only at the block top
- Scroll to edit is debounced and MathJax/KaTeX only scroll when diff markers are present
- Scrivener compile still emits image references when image files are missing on disk (broken preview image instead of swallowed markup)

#### FIXED

- Paddle purchases should no longer require Restore Purchases to register after a successful checkout
- Failed post-checkout restore no longer marks the subscription canceled before the server has caught up
- Scrivener compile no longer duplicates text sections for selected documents
- Confetti plays once per license type so status refreshes do not retrigger the animation
- Scrivener and RTF saves use a coalesced compile reload instead of stacked full refreshes, eliminating preview churn and duplicate scroll-to-edit passes
- Scrivener watch handling skips included asset updates during an in-flight compile so icon.png and similar paths no longer trigger extra reloads
- Scrivener synchronous imports suppress the importer delegate refresh when the compiled text is already applied, avoiding a second preview pass
- Edit markers for Scrivener/RTF compare raw compile snapshots (not processed Markdown) so markers appear after real binder edits
- Edit markers anchor at the substantive change (largest text insert) and search inserted text in the preview so markers land on the edited paragraph, not an earlier block
- Dynamic image updates no longer strip existing diff markers or force scroll when Scroll to edit is off
- Window title keeps the filename when Use first H1 as fallback title sets print title from an H1 that matched the old window title
- Quick Open opens centered on screen when no Markdown document window is available
- Scrivener documents with external images pasted as Markdown (`![](./resources/...)`) compile to proper image references instead of broken `![][]` text or missing markup
- Scrivener compile preserves Pandoc attribute blocks on image lines by keeping Markdown syntax through HTML conversion rather than an `<img>` round-trip that dropped images and `{...}` attrs
- Scrivener image paths with parentheses in filenames (and `<em>`/`<span>` wrappers from AppKit) normalize and resolve correctly
- Scrivener `./resources/` links resolve inside the .scriv bundle (not each binder RTF folder or the parent Desktop folder)

### Version Marked 3.0.13 (1140)

#### NEW

- Confetti celebration when a subscription, trial, or lifetime license becomes active in the subscription window

#### IMPROVED

- Subscription window shows Activating your subscription… while the billing server confirms a new purchase
- Post-checkout restore retries automatically until Paddle and the billing server sync complete
- Subscribe URL handler uses the same post-checkout activation path as the in-app checkout sheet
- Checkout sheet dismissal refreshes subscription status without manual restore
- Confetti is denser and longer with multiple emitters and timed bursts during checkout and restore success
- Lifetime Manage Subscriptions easter egg uses the full celebration animation
- Diff markers sit on the edited line within a block instead of only at the block top
- Scroll to edit is debounced and MathJax/KaTeX only scroll when diff markers are present

#### FIXED

- Paddle purchases should no longer require Restore Purchases to register after a successful checkout
- Failed post-checkout restore no longer marks the subscription canceled before the server has caught up
- Scrivener compile no longer duplicates text sections for selected documents
- Confetti plays once per license type so status refreshes do not retrigger the animation
- Scrivener and RTF saves use a coalesced compile reload instead of stacked full refreshes, eliminating preview churn and duplicate scroll-to-edit passes
- Scrivener watch handling skips included asset updates during an in-flight compile so icon.png and similar paths no longer trigger extra reloads
- Scrivener synchronous imports suppress the importer delegate refresh when the compiled text is already applied, avoiding a second preview pass
- Edit markers for Scrivener/RTF compare raw compile snapshots (not processed Markdown) so markers appear after real binder edits
- Edit markers anchor at the substantive change (largest text insert) and search inserted text in the preview so markers land on the edited paragraph, not an earlier block
- Dynamic image updates no longer strip existing diff markers or force scroll when Scroll to edit is off
- Window title keeps the filename when Use first H1 as fallback title sets print title from an H1 that matched the old window title
- Quick Open opens centered on screen when no Markdown document window is available

### Version Marked 3.0.12 (1139)

#### CHANGED

- Keep on Top shortcut is now F instead of F, avoiding conflict with Focus view in the preview

#### NEW

- Filter Scrivener Documents panel (Proofing menu) to choose which binder sections appear in the Scrivener preview
- Scrivener filter persists checkbox selections per project UUID; first open selects Draft items with Include in Compile only (Research and other binders start unchecked)
- Empty Scrivener preview with link to open the filter panel via `x-marked://scrivenerfilter`
- F opens Filter Scrivener Documents from the Proofing menu (also in the gear Proofing submenu)
- Open RTF and RTFD files directly in Marked with conversion to Markdown, live preview on save, and export support
- RTF/RTFD images from the document bundle are copied into a Watchers asset cache for preview and export

#### IMPROVED

- Run Command sets pandoc’s working directory to the document folder and requests access to that folder for auxiliary files
- Bibliography errors show a warning when pandoc stderr reports citeproc, bibliography, or permission problems
- Filter panel closes with the window close button; Proofing menu checkmark reflects whether the panel is open
- Scrivener 3 previews can include Research and other binders (not Trash); Scrivener 2 shows Draft only in the panel
- Scrivener re-import cancels in-progress compiles when filter checkboxes change (400 ms debounce)
- Pages RTFD files convert fully by fixing invalid nested lists and stripping span wrappers in HTML to Markdown conversion
- Included RTF and RTFD files in other documents are converted instead of showing an error
- Scrivener RTF compile uses the shared conversion pipeline (behavior unchanged, less duplicated code)

#### FIXED

- Pandoc citeproc and `--bibliography=` paths now receive sandbox access (flags like `--bibliography=/path/to/file.bib` were previously ignored)
- Duplicate Custom Processor Log lines for the same Run Command in one preview pass
- Scrivener import treats missing IncludeInCompile as Yes so Draft items from older or migrated projects are not skipped
- Scrivener filter section All and None buttons work again after outline cell reuse (section index stored separately from view tags)
- Scrivener folder headers (e.g. “Going Further”) appear when child documents are selected, including folders directly under Draft
- Scrivener top-level Text documents outside Draft/Research (e.g. Tutorial intro sheets) show checkboxes and can be included in the preview
- RTF/RTFD preview no longer stuck on the loading screen after conversion (removed nested refresh during import; same stabilization as Scrivener)
- Pages RTFD body text at 16px no longer converts to h5 headings (heading levels are relative to the document body font size)
- Pages double-wrapped lists no longer render as code blocks in preview
- RTF headings no longer wrap title text in bold or leave empty `*`/`_` emphasis markers in Markdown output
- RTF images without captions no longer use the filename as alt/title, including after cache renames to image-1.png (avoids spurious MMD figure captions)
- RTFD images referenced as `file:///filename` (e.g. Pages `pastedGraphic.png`) now resolve against the bundle and copy into the asset cache

### Version Marked 3.0.11 (1138)

#### NEW

- Preview menu shortcut Option-Command-C to open Edit Custom Rules (Conductor)

#### IMPROVED

- Conductor command paths without a leading slash (e.g. `opt/homebrew/bin/pandoc`) are normalized to absolute paths automatically
- External binary execution falls back to running through the shell when direct NSTask launch fails in the sandbox

#### FIXED

- Stop preview hang when a Conductor Run Command processes large documents (pandoc and similar tools no longer deadlock on full stdout pipes)
- Stop crash on launch when an external command was authorized via a folder bookmark (NSTask no longer uses the bookmark directory path as the executable)
- Stop Run Command from prompting for pandoc access on every preview reload after permission was already granted
- Remove duplicate Custom Processor Log entries for each Run Command in the process phase
- Conductor command file picker (folder button beside the command field) no longer grays out Homebrew binaries and extensionless executables
- Sandbox permission dialog for external executables so Homebrew bin symlinks and Cellar binaries are selectable

### Version Marked 3.0.10 (1137)

#### IMPROVED

- Images, figures, and other graphic blocks use page-break spacers so painted content does not bleed onto the previous PDF page
- Open Recent is preserved on crash recovery; missing files are only removed from Recent when the user explicitly opens an unavailable entry, not during automatic session restoration
- Export profile creation selects the new profile in preferences without re-applying all settings to UserDefaults
- Document state lookup resolves bookmarks one at a time instead of flooding ScopedBookmarkAgent with parallel requests
- Window state restoration on quit encodes regular bookmark paths without resolving every bookmark synchronously

#### FIXED

- PDF export no longer repeats or overlaps page content when scrolling through long paginated documents
- PDF export adds scroll padding after pagination so the last pages capture unique content instead of duplicating earlier slices
- PDF export resolves relative image URLs to absolute paths before print preparation removes the document base tag
- PDF export loads HTML with the source document base URL instead of only the app bundle so relative assets resolve during pagination
- Base64 image embedding for export uses the document base path, DOCX asset folder when present, and file:// image src values
- Refresh no longer crashes when preview style is None and cssPath is unset (getAllPrefs passed nil to NSMutableDictionary setObject🐒)
- Conductor preprocess and Insert CSS rules run when enabled Preprocess rules exist, even if the legacy custom preprocessor executable is not installed
- Preview style None uses a blank primary stylesheet instead of silently falling back to Swiss
- Changing preview style rebuilds the preview so Conductor CSS injected into the document head is not dropped when switching themes
- Start Fresh after a crash removes only Marked saved state and Marked autosave data, not the entire Library/Autosave Information folder
- Disabling a Custom Rule now updates the preview instead of leaving the previous styled HTML in place when the source file did not change
- Toggling Custom Rules uses a full preview reload so Processor rules and preview style None apply immediately
- Preview style selected before a Conductor Set Style action is restored when that rule is turned off
- Preprocessor and Processor status bar lights now disable Conductor rules for that phase instead of leaving enabled rules active when the light is off
- Turning a pre/processor light off or on triggers a full preview rebuild so preview style and rule effects update immediately
- Stop crash when adding a new export profile on recent macOS versions
- Manage Profiles window no longer reloads the profile table while the new profile name is being edited
- Prevent Quit from hanging for nearly a minute when many sandbox bookmarks are stored

### Version Marked 3.0.10 (1137)

#### IMPROVED

- Images, figures, and other graphic blocks use page-break spacers so painted content does not bleed onto the previous PDF page
- Open Recent is preserved on crash recovery; missing files are only removed from Recent when the user explicitly opens an unavailable entry, not during automatic session restoration

#### FIXED

- PDF export no longer repeats or overlaps page content when scrolling through long paginated documents
- PDF export adds scroll padding after pagination so the last pages capture unique content instead of duplicating earlier slices
- PDF export resolves relative image URLs to absolute paths before print preparation removes the document base tag
- PDF export loads HTML with the source document base URL instead of only the app bundle so relative assets resolve during pagination
- Base64 image embedding for export uses the document base path, DOCX asset folder when present, and file:// image src values
- Refresh no longer crashes when preview style is None and cssPath is unset (getAllPrefs passed nil to NSMutableDictionary setObject🐒)
- Conductor preprocess and Insert CSS rules run when enabled Preprocess rules exist, even if the legacy custom preprocessor executable is not installed
- Preview style None uses a blank primary stylesheet instead of silently falling back to Swiss
- Changing preview style rebuilds the preview so Conductor CSS injected into the document head is not dropped when switching themes
- Start Fresh after a crash removes only Marked saved state and Marked autosave data, not the entire Library/Autosave Information folder
- Disabling a Custom Rule now updates the preview instead of leaving the previous styled HTML in place when the source file did not change
- Toggling Custom Rules uses a full preview reload so Processor rules and preview style None apply immediately
- Preview style selected before a Conductor Set Style action is restored when that rule is turned off

### Version Marked 3.0.10 (1136)

#### CHANGED

- Exported HTML highlight.js bundle updated to 11.11.1 (jsDelivr cdn-release)

#### NEW

- Center header and footer fields in Export preferences and per-document Print Header Center / Print Footer Center metadata
- Preview style menu option “None” for Conductor-only or unstyled preview without built-in theme CSS

#### IMPROVED

- PDF print and on-screen paginated headers and footers support left, center, and right zones including centered logos
- DOCX export writes center header and footer content with correct Word tab stops
- Markdown Dingus preview style menu includes None and clears theme CSS when None is selected
- Images, figures, and other graphic blocks use page-break spacers so painted content does not bleed onto the previous PDF page

#### FIXED

- HTML export includes Conductor Insert CSS and Insert CSS File styles from the preview document head
- HTML export with None preview style no longer reads a missing CSS path
- PDF export no longer repeats or overlaps page content when scrolling through long paginated documents
- PDF export adds scroll padding after pagination so the last pages capture unique content instead of duplicating earlier slices
- PDF export resolves relative image URLs to absolute paths before print preparation removes the document base tag
- PDF export loads HTML with the source document base URL instead of only the app bundle so relative assets resolve during pagination
- Base64 image embedding for export uses the document base path, DOCX asset folder when present, and file:// image src values

### Version Marked 3.0.9 (1135)

#### IMPROVED

- Conductor-injected stylesheet and style tags are hoisted from the document body into the HTML head during preview generation

#### FIXED

- Insert CSS File inserts after MultiMarkdown and Pandoc metadata blocks, so a following Run Processor action still recognizes document metadata instead of rendering CSS:, HTML Header:, and similar keys as body paragraphs
- Hashtag highlighting no longer wraps #tags inside quoted strings,
  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 processor**s 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