MultiMarkdown Composer version 4 Beta

Short Version

It's time for an update regarding the status of MultiMarkdown Composer!

There's an entirely new beta for MMD Composer. For simplicity in naming, it will be referred to as version 4. This means that v3 will be a beta version only. The next production version will be version 4.

While v4 is in the initial phases of beta testing, v3 will still be available to ease the transition.


Download the beta here

Once you're up and running, Composer can check for updates. Most of the time it works fine, but if there's a problem installing an update then just download the latest version directly.

Long Version

As I have written elsewhere, a lot has been going on behind the scenes related to MultiMarkdown Composer.

Composer v3 first went into semi-public beta (to owners of v2) around February of 2015. It introduced many technical improvements and new features. While it was in beta several things happened that caused development to take longer than expected. In fact, during the last two and a half years, I went back and completely rewrote MultiMarkdown (version 6), and used that create an entirely new text editing engine and framework.

Wedging the new engine into MultiMarkdown Composer 3 wouldn't really work that well, and it made more sense to rewrite the remainder of the app to take advantage of all the improvements. To improve performance and reliability, this involved rewriting the entire application. It was easier since I could take all the lessons learned from prior versions, but still required a great deal of time and effort (and as announced, I will have more time for development over the next 12 (now 11) months!)

The new text engine library provides all the "smart" editing features of Composer (paired quotes, list formatting, header formatting, etc.) It replaces the previous engine, but in addition to speed and accuracy, adds much more:

  • Text expansion: The new engine provides the ability to support automatic text expansion of defined keywords. This is similar to Text Expander, but nowhere near as powerful. The goal is not to replace Text Expander for those who use it, but to provide a lightweight alternative for those who don't. It will also be easier to provide a consistent writing environment across devices by using a built-in approach. The text expansions are controlled using JSON configuration files:

        "expansions" : [
                "key" : "ftp",
                "expansion" : "Fletcher T. Penney"
  • Built-in change tracking: Change tracking using CriticMarkup in v2 was built on top of the text engine, making it a bit more difficult to provide a perfectly consistent experience. v3 improved on this, but the new engine builds change tracking into the core at a fundamental level. This makes it much easier to control how everything interacts to ensure the proper result.

  • Custom undo engine: I needed more control than what the standard undo/redo provided with macOS/iOS could provide. The new engine has built-in undo support that integrates with all the other features, allowing proper performance under a variety of scenarios. More importantly, it provides some flexibility that could not be achieved otherwise. The first to be enabled is to provide for a "history mode" -- normally, if you make several changes to a document, then undo them, and then type something -- then you will have lost those changes that were undone. There is no way to get them back if you realize that you made a mistake. History mode stores all of the change history, no matter what you do (within reason based on how much memory you have in your computer!). You can undo/redo backwards and forwards through the entire history of the document while working on it. I plan on extending this to allow for "Selective Undo", where you will be able to look at a list of all the changes made to the document while you've been working, and selectively choose which changes to undo and redo from the list.

In addition to the new engine, there are some other changes in Composer v4:

  1. I have phased out the HUDs. These were useful early on, and MultiMarkdown Composer v3 tried to use both HUDs and sidebars for things like the Table of Contents navigator, and the CriticMarkup change panel. Continuing to support both was going to cause too much technical overhead, and the sidebars are really much better.... IMHO.

  2. Instead of the "Style Sheets" used in v2, v4 uses "Themes". These files are written using the JSON syntax, which is really easy to understand (these are different than the themes introduced in v3):

        "backgroundColor" : "eee",
        "foregroundColor" : "000",
        "lineHeight" : 1.7,
        "horizontalPadding" : 50.0,
        "verticalPadding" : 50.0,
        "criticAddition" : {
            "foregroundColor" : "00bb00",
            "markupForegroundColor" : "00bb00"
  3. The preview pane now uses a separate CSS file, instead of being controlled by the Theme. This will make it easier to share your custom CSS between Composer and your web sites.

What's Next?

  • I anticipate releasing the v4 beta the week of August 14.

  • It will be an open beta -- it will not require ownership of v2 to use.

  • I anticipate using in-app purchases to provide a strategy for pro features, rather than having different versions. The v4 beta will be a beta of the Pro version.

  • I am considering having the app available for free to serve as a "demo", with in-app purchases to unlock more advanced features, and the pro features. I am open to feedback on this idea, and have to decide how to balance the three versions properly.

What's Missing From the Beta?

There are several features from v2/v3 that have not been implemented yet:

  • Some of the "polish" features -- syntax guide, etc.

  • Auto formatting features in tables

  • App Store requirements -- in-app purchases, sandboxing features, etc.

  • Line folding -- this was in the v3 beta, but I wasn't quite satisfied with the performance and stability. I need to rewrite this.

  • TextBundle format support -- MMD v6 includes built-in TextBundle conversion, and I want to incorporate the improvements. v4 beta can export the compressed version (TextPack), but can't open these files yet.

  • Syntax highlighting is accurate, but doesn't always refresh properly when typing. v3 beta had an advanced (but complex) algorithm for determining the minimum range of text that needed to be refreshed to ensure an accurate result. It compared this with a full refresh to find edge cases that didn't work. (This is why the v3 beta gets slow with long documents -- it's doing a lot of work). v4 has a simpler algorithm that is faster, but is not perfect. I need to work on the edge detection further.

  • File transclusion -- I need to work on making transclusion compatible with app sandboxing, so this doesn't work yet.

What Can You Do to Help?

Try out the beta. Use it. But most importantly, let me know what is broken and what could be improved. The help menu has a command "Submit Bug" that will take you to the support forums where you can see if a bug has already been reported, or submit a new one.

If you have a crash, please email me the crash report and describe what you were doing at the time. This will allow me to fix the issue and prevent the crash from happening again.

And, as always, thank you all for your support over the years!!!