Drafts 5.2 – The Navigation Update

I really like seeing the pace of Drafts development. I can’t remember exactly where I heard Greg talk about it, but with the subscription model, he no longer has to wait a long period of time for big updates to drop new features; the releases can be done quickly, with focused changes in each one. This is great for him, and even better for users. Like the previous point release, the 5.2 update includes updates that provide better functionality within the app.

Draft Navigation

When writing my review, I needed a way to navigate between the different sections, and all of the subheadings I had created. I had developed an action to navigate to each of the markdown headers, which I was happy with at the time. It was nice to have that functionality to switch around where I was in my review.

Well, I’m happy to say that I have been Sherlocked.

In the upper right corner of the editor, there is a small triangle icon; when you tap the icon, you are presented with a navigation menu. Not only does this navigate headers in Markdown, but it also navigates projects in TaskPaper, and code blocks in JavaScript. It also include a top and bottom button, as well as a select all button.

Syntax navigation in Markdown, JavaScript, and TaskPaper

Additionally, using the keyboard shortcut ⌘\, you can use your external keyboard now to navigate your way through longer writing, coding, or task management projects. This implementation is much better than I could have ever programmed in an action, and it’s great to see this type of behavior built into the application itself. As more syntax highlights come in the future, it will be nice to have navigation along with them.1

Loading Modules

My favorite feature of Drafts has been workspaces. In the initial app release, it was possible to use the URL scheme to switch workspaces. Someone in the Drafts Community forum created a workspace switcher action group that could be customized to switch workspaces, using shortcut keys for external keyboards. While switching workspaces in this manner was fantastic, I wanted to see more in the way of loading modules. From my review:

Pushing modules further, I would love to see Workspaces get improved by allowing a pre-defined action group. That way when switching workspaces, the user can automatically have all necessary tools at their disposal right away, thus speeding up capture.

The idea of modules – using a workspace in conjunction with action groups – has been a game changer for the way I use Drafts. And now through scripting and URL steps, I can not only change workspaces, but I can also change the action groups in both the action drawer and extended row; this takes the module concept to completion. For those that don’t want to get into scripting, new URL schemes are available to switch action groups: – /loadActionGroup?name=GROUP-NAME loads action group in action drawer, while /loadKeyboardActionGroup?name=GROUP-NAME loads action group in extended keyboard. If you want to switch workspaces and both action groups, you can have a single module action with three URL steps, one each for the component you are changing.

But for those that use scripting, there are additional methods that allow for some further capabilities with modules. Not only can you switch the workspace and load action groups, but you can show or hide the drafts or action drawer/list; if you had pinned the drawer previously, it will show up as pinned.

When running on the iPad, I want to have my draft list shown (and pinned); however, I don’t want this to be done on the iPhone. When I run an action on either device, I want it to have unique behavior. Thankfully, there is a device script object that pulls which device I’m running the action on, allowing me to change the behavior of the action. For an example of using modules in this way, I’ve shared a Writing Module which contains the following script step:

// Get device model
var model = device.model;

var module = "Writing"
var workspace = Workspace.find(module);
var keyboard = ActionGroup.find(module);
var group = ActionGroup.find("Social");

// Show draft list if action is run on an iPad
if (model == "iPad") {
    app.showDraftList();
}
else {
    app.hideActionList();
}

app.loadActionGroup(group);
app.loadKeyboardActionGroup(keyboard);
app.applyWorkspace(workspace);
editor.activate();

This loads the Writing workspace and extended row, and puts my Social action group to the side. I can use this module to create posts like this one or share a thought or tweet storm to Twitter. When I’m done writing, I can use the external keyboard to quickly switch modules into scripting or task management.

I have even created some additional options in each one: if I’m on my iPad, my drafts list is shown on the side; on the iPhone, it hides the action drawer, presenting you with the editor activated. In some of the modules, I have also loaded different action groups based on the device I’m using. This gives me full control of what I do and where I share my writing, all with a single action; coupled with the use of keyboard shortcuts, this is now a powerful app-like switcher right inside Drafts. I even created a Select Module action with select boxes to load modules when on my iPhone, which I have added to each of my action groups for faster switching.2 I have placed a duplicate action at the beginning of every action group so that I can switch modules on the fly, especially when on the iPhone. And I’ve thrown them into a module action group, though I haven’t made it an extended keyboard row option because I use the single action to switch on the iPhone and the keyboard shortcuts on the iPad.

Other Improvements

Speaking of sharing actions, there have been a few new elements added in the Action Directory. There are two new visual indicators: trusted member and tested action. These indications give users confidence that the actions listed have come from trusted sources and that they do not contain any errors. When I refer to errors here, I am not speaking about programming knowledge and efficiencies. It specifically refers to the result of the action and that it won’t damage any of your data. This will be handled by the developer on a case-by-case basis: after all, this is Agile Tortoise’s app, and they need to make these decisions for their app and business.

Another nice feature that has been added is the ability to assign tags after a successful action; this can be found in the action editor. When I post to Twitter, I will archive the draft and assign a tweet tag. There isn’t a special script code block required like I had before, it’s simply baked into the action. Users could apply something like a sent tag for messages or emails, or a submitted tag for when you’re sending your writing off for review/editing. The nice aspect of this is that you don’t have to apply the tags up front, but you can apply them after the fact.


The small but useful changes and new features are another nice release for Drafts. The navigational improvements are absolutely fantastic for how you move through Drafts. I’m getting very close to never leaving the keyboard when I’m on the iPad. I love how fast I’m able to switch through modules now, providing different the various different mini-apps at my fingertips to productively get everything done.


  1. The navigation feature is based on the syntax highlighting. When customizable options come in a future update, you’ll be able to specify the navigation as well. 
  2. I also have one for buttons, which saves a tap. I do like the idea of “loading” a module, which is why I went with select boxes with a single “Load” button. Yes, I’m nerdy. 

Drafts 5.1 Update

While I’m working on another large post, I wanted to put out at least a small bit about some of the added features in the 5.1 update of Drafts that has been released.

Tag Filter Improvements

I really love the addition of tags, and more importantly, workspaces. I did, however, have a couple of gripes about the features. My single gripe about filtering using tags from the review:

A nice addition to tagging not present in the app is an or function, which would expand the filtering to get drafts that are tagged with red or blue instead of red and blue as it is today, giving better functionality to the feature.

This has now been fixed. Whether in the tag drawer or within a workspace, you can specify “All” or “Any” for the tags. This distinguishes the behavior of the tags so that you can include the correct one(s) as you filter. For example, I have a GTD workspace. Previously, I’d have to rely on a single tag for this to work, and I settled on gtd. But now I can create new tags to not only add new drafts with similar tags, but I can also provide context within the workspace. I can have tasks, events, lists, calendars, etc. included in my GTD workspace simply by choosing “Any” for the tags.

Tag filtering has been improved

This added flexibility I wanted to see has been quickly added, which is already reaping dividends for my productivity. Now all I need is the ability to set a default action group for my workspace, and I’ll be all set.

Action Debugging Features

Action logging has been added to the action drawer. In the top right corner of the drawer, you’ll see a clock-like icon located in between the search and menu icons. This contains the log of every action run, rather than finding it in the draft information screen, which is on a per-draft basis. This not only provides a nice log, but provides quick access for when you’re de-bugging scripts. I’ve been doing a few large scripts as of late, and it has been saving me time along the way. You can also delete the logs as you go, if that’s your particular cup of tea.

In addition to the log, individual action steps can now be disabled in your actions by swiping on the step in the action editor. This is useful when you want to troubleshoot errors and check steps along the way. Another useful option for this is for when you are someone who likes to move around apps. For example, many of you know that I like to change up my task management app of choice. Rather than create all-new actions every time I switch, I can simply disable the URL block for GoodTask and add a new URL block for Things or OmniFocus or 2Do. I don’t need to clutter up my action drawer with similar actions that are based on a URL scheme any more. I’m going to need to refactor some of my actions, but I can already see how this is going to benefit me in so many ways. I’ve even done a packing list action for you already to show you how it works.

Event Action Step

You can now create calendar events by simply tapping on an action which brings up the default system card for event creation, as you would see in Calendar.app. There is a simple default action in the directory which creates a single event that takes the first line of your draft as a title, and the body of the draft as a note. You can select the rest of the parameters as you would in the calendar. when completed, you’re back in Drafts, ready to go.

I’ve already modified this to take a selection rather than a draft (I don’t usually use the note field in a calendar event entry), so that I can quickly add meetings or personal events from a larger note, rather than having to create a new draft when I want to create an event.


We’re a month into the new version of Drafts, and already there’s been some added features which were missing from the previous version, as well as some carefully considered features to help make life a bit easier for users. There are some other small features added, so be sure to read those in the release notes.

Drafts 5 Review

My review of Drafts is out. But it’s not here, not exactly anyway…

Drafts 5: The MacStories Review

I reached out to Federico a year ago and asked if he had anyone slated to write the review.1 I suggested to him that I would like to write it for MacStories, that I would be happy to do so. It wasn’t long before he responded “yes, let’s do this”.

It was an amazing experience. As the production of the review progressed, that feeling only increased. The entire Team at MacStories has been delightful to work with, and I couldn’t be happier than I am now with everything that has transpired over the past few months. It has been an honor to work with that team!

Writing while Greg was developing Drafts 5 through the beta process was a valuable insight into app development. It is rare to directly see the careful consideration an app developer makes when rolling out new features. Using the Slack channel as a sounding board, he would often listen to the suggestions being made; if he ever thought it was the wrong thing to do, he would state why instead of just “no”. I know he has more planned for the future, and I’ll be sure to follow-up when he does.

You can read the review at the link above. And if you aren’t a member of Club MacStories, you should sign up: there’s an ePub version of this as well.

Thanks again to Federico and the team at MacStories for giving me the opportunity to write for them, and for you the readers. This has been a labor of love for me, and I hope that shows through in the review.

Thanks to all of you for reading!


  1. I cannot believe that it has been a year. 

Cheating

For the past few weeks, I’ve been battling a couple of different illnesses. First, it wast the GI flu, then it was whatever I have now. And both times, I was basically down and out most of the day. I absolutely detest getting sick, and I’m admittedly useless when I get sick. Thankfully, my wife has been able to take care of things for the most part. I just pray that she or my kids (who likely gave this to me) don’t catch it.

So in these times of being sick, I’m faced with a dilemma: how on earth do I complete my move goal? At the time of this writing, I’ve completed my move goal 296 times in a row – but it comes with a caveat. My wife will tell me that I’m cheating, but really, I blame Apple for what I’m doing. How am I “cheating”?

I lower my move goal.

I blame Apple because they really need to provide ways for people who are sick to have some rest days. How am I supposed to complete my normal 550 move goal when I have a 102ºF fever? There should be a way to change the Activity rings to a “sick” mode, where it lowers all three rings to a reasonable amount. While I’m at it: there should be a rest day, at least one day a week, that I can not complete my rings and the move goal streak can continue. Activity++ does this, and I like that the streak just continues even if you’ve taken a day off.

When I’m done being sick, I’ll change my move goal back to what it was and complete it regularly. But if I get sick again, I’ll likely lower it to reduce my stress and keep the streak alive. Sure, I could let my streak lapse and start over. But unless you’re a superhuman, it’s difficult when life gets in your way and things slip a day. I’m all for the gamification of things like activity, but I’m also going to game the system if there isn’t a reasonable way to let me take care of myself.