Since leaving Oracle I’ve been hard at work on Marked 3, and holy cow it’s a huge update.

I expect to have the beta out in the next week or two. When it’s ready it will be available as a subscription directly via Paddle or the Mac App Store, and all Setapp users will get it as part of their subscription.

There’s a new website up at markedapp.com, though none of download links will work. Soon, though.

I decided to go with subscription pricing because I want to support continuous development. I haven’t charged an upgrade price for almost a decade, so people who paid $10 for the app 10 years ago have gotten all of the improvements for free for years. That’s not sustainable for me, and subscriptions mean I don’t have to release a new app every year, but rather just constantly improve on it.

Here are some of the highlights that I think make Marked 3 worth paying for. (Marked 2 will continue to function but won’t get any more updates.)

Custom Rules

The new Custom Rules setup replaces the old Custom Preprocessor and Custom Processor settings. The old way only allowed one of each, and your only option was to manually enable it or disable it. Now you can have multiple processors that activate automatically based on criterium like file extension, metadata type, or even content detected in the document (regex available!).

  • Drag and drop a file onto the rules editor to see what rules it triggers
  • Select a built-in processor for each rule match
  • Many built-in transforms and actions, including search and replace, fix header heirarchy, etc.
  • Run multiple scripts/commands (custom pre/processors) in sequence
  • Inject JavaScript, text, or HTML
  • Set a style for a particular file type
  • and more!

New Processors

I’ve added CommonMark (with GFM extensions) as a default processor, which brings full compatibility with other apps that use CommonMark, such as Bear.

I also added Kramdown, my personal favorite processor. It’s 99% compatible with MultiMarkdown syntax, and its major draw for me is IALs, a special syntax that can apply CSS classes to any element.

DOCX madness

Marked 2’s DOCX export was terrible. It basically just output rich text content into a DOCX container, with no structural information. I’ve completely rewritten the DOCX export from the ground up. Not only can Marked 3 output perfect DOCX files with a variety of styling options, it can also open most DOCX files and export them to other formats.

  • Export clean DOCX with correct structure and built-in styles
  • Bi-directional MathML to OMML (Word)
  • Convert comments and change tracking to CriticMarkup (also bi-directional)
  • Add your own export styles
  • Handle DOCX highlights, using a <mark> tag with appropriate background color
  • Syntax highlighting in code blocks is preserved when exporting to Word
  • Open DOCX directly in Marked
  • In DOCX import, allow highlights to be suppressed when comments are disabled

Export Profiles

Because the export settings are so vast, I’ve added “Export Profiles.” These allow you to save current settings as a profile, making it easy to switch between settings at export time. Every type of export has a dropdown in the save dialog for selecting a profile. You can use it for something as simple as setting a different header logo for different contexts, or for completely different export settings like page margins, markdown link styles, and anything else that affects any of the export formats.

As part of setting this up, I refactored all of the export code to allow for future automation (AppleScript, Shortcuts). Previously Marked couldn’t bypass the Save dialog, and all of the export functionality was tied to callbacks. Now it’s separate and can be called externally. I’m partially finished with AppleScript support for things like tell app "Marked" to export markdown to PATH with profile "Work". Still working out the syntax and I’ve run into some showstoppers on that, but once I get this release out I’ll get back to working on that. All of this will also be applied to Shortcuts actions and the URL handler.

Paginated PDF magic

Marked used to rely on the macOS print system to generate PDFs, which is basically the same as opening an HTML file in Safari and printing to PDF (with a few niceties like customizable headers and footers). I completely rewrote this in Marked 3, which builds the PDF manually, allowing for much more control.

  • Logos/images in headers and footers
  • Footnotes can appear on the page on which they’re referenced
  • Current heading/section in headers and footers
  • Intra-document links work (navigation anchors, Table of Contents)

New export formats

  • EPUB with full styling, cover image, and metadata
  • TextBundle/TextPack with embedded assets, fully compatible with apps like Ulysses
  • Improved RTF export. If you’re trying to open in Pages, it’s better to export a DOCX and open that, but if you’re trying to get rich text into another app, the improved RTF handling will be useful.

Markdown Dingus

Experiment with Marked’s different built-in processors and see live rendering of both source code and web preview.

Style Stealer

Load any web page you like the look of and replicate its styling as a Marked Custom Style. The Style Stealer window accepts a URL, preferably an article/post page with plenty of content, and allows you to hover and click on the main content area of the page. It will grab the styles for existing elements and inject and read any that are missing, getting their computed style (the result of all CSS applied to the page).

It even does a decent job of grabbing custom fonts, including Google Web Fonts.

And more…

  • Allow user to specify minimum level to include in table of contents
  • Display comments (CriticMarkup, Scrivener, Word) in a sidebar instead of inline
  • [[Wiki Link]] navigation
    • Fully functional back/forward navigation when following links to other Markdown files
    • Make missing file links clickable to create a new file
    • Show wiki backlinks to current document
  • 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
  • Remove RTFD export option. RTFD will be automatically selected when the export includes images
  • Custom Processor Log changed to Custom Rules Log, showing what rules run and any errors
  • Change reading speed right from the detailed stats window

The rest

I might as well stick the rest of the changelog in here… there will almost definitely be more to add by the time the final release is ready, but I’m one step away from beta, so this is a pretty complete list.

NEW

  • Syntax highlighting for CSS and JSON fields
  • Custom Styles can be dragged and dropped on the Settings window to add them
  • Display a message when an empty file is opened
  • Import/Export all preferences as a JSON file

IMPROVED

  • 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 CriticMarkup handling, all native, no reliance on external scripts or tools
  • 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.
  • 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
  • Substitute Goldilocks (Bear style) 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

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