News & Updates

Try, Try again

It was soon after I shared a roadmap in the beginning of 2020, that things suddenly changed for the worse around the world. Perhaps for the first time ever, the world truly felt small – united in confusion and hope. A lot was about to change in so many ways this year.

Speaking for myself, the confusion only increased as my favorite time of the year approached; WWDC. This is always the perfect time to re-align one’s focus and app-update strategy for the remaining year. Admittedly, by then I had already lost a lot of valuable time. A few hiccups, setbacks and unplanned surprises along the way (both in my professional and personal life) – and not to mention the many COVID 19 related niggles.

Without going into too much detail – they’re boring, really – the plan was to go into development-overdrive: a major re-write of 2Do’s back-end / UI into pure Swift from the now obsolete, mostly dead Obj-C. Although this sounds like a lot of work – it turned out to be a lot more. Perhaps I set the bar too high for myself or perhaps I was having a hard time making decisions. Or perhaps I had a lot more on my plate ¯\_(ツ)_/¯

At the time of writing I’ve witnessed two WWDCs since the last update I shared. I feel like we’re in the middle of a revolution, one that’s just going to take its time. With these both in hindsight, it has become clearer as to what needs to be done next – for now.

The Goal

As it is with any other app, think of 2Do made up of two distinct parts: the UI (front-end) and the Core Logic / Model / Sync Engine / Plugins / Database (back-end). Okay that sounds like a lot more parts – because they are. The point is, taking a multi-platform, featureful, complex app beyond 2020 has required careful planning and consideration. To all those that ask often: 2Do has not been abandoned. It’s still actively supported, I still care, however it’s also still (due to a series of unfortunate events and setbacks) constantly a work-in-progress. For those interested, here’s a glimpse of the dilemma I’ve recently recovered from, but still suffering through.

Going Native… Or Not

To state the obvious, 2Do is a native app – which means I wrote the iOS, macOS and the Android apps purely for the aforementioned platforms using their designated Software Development Kits (SDKs) in their respective languages (Obj-C / Java) – all in their own time. There’s some shared code between the iOS and macOS (just some) but none that’s shared with Android. For as long as I remember, I have spent 16 to 20 hours straight, every single day – for months in a stretch – on features, improvements, fixes and more. It can be severely time consuming, and tiring, to fix bugs or to implement new features across each platform at times. Besides, how many other native apps are you aware of that offer full feature parity across supported platforms as well as a bring-your-own-data policy? And how many that haven’t charged an additional dime for an upgrade in the last 10 years? Oh yeah.

For this major update, I’ve yo-yo’ed countless times before settling on a UI implementation methodology, only changing my mind once again in order to consider a different approach, all the while calling myself out on being lazy for considering shortcuts. I know this sounds insane, but I’ve invested time, money and effort into a particular approach before giving up and then repeating the same process again, hoping to find a reason I may have missed the last time. For instance, there are a number of cross-platform solutions out there that solve this very problem. Do I get excited at the thought of maintaining and updating a single code-base for all supported platforms (including Windows!)? Absolutely. But do I find any of these solutions attractive? Absolutely not. In my personal opinion, all of the cross-platform solutions out there leave a terrible first-impression. They consume more RAM, are power hungry in some cases and generally slow. The UI feels like a boxed up website and the faux native controls look fake. React-Native is a good contender, however it falls short when you need to customize certain controls for a specific look / feel / usability. 2Do does a lot of that. I refuse to write a non-native cross-platform app that would resemble a google search result in both look and feel. Maybe I’m being irrational, but nothing compares to going fully-native.

For the native-app-loving developers out there, Apple developed and showcased a ground breaking new UI framework a couple of years ago: SwiftUI. By now, SwiftUI has become a force to reckon with. It promises learn-once, write-anywhere. In practice though, it’s still a work-in-progress and after investing time and energy into SwiftUI, it was abundantly clear that I’ll have to give this a pass for now – for at least as long as I wish to support older versions of macOS (10.12 onwards) whilst offering a consistent set of controls / features across all deployed versions. Had SwiftUI been a framework in offering with the ability to back-deploy on older versions of macOS that support Swift 5.x – this would have been a no-brainer. SwiftUI gains new functionality every year with a new release of iOS / macOS but this functionality is not available on older versions of the operating system. It would soon become impractical to propose or expect users to upgrade to the latest macOS version on day one, only so they can install 2Do’s new update that now requires the latest version of SwiftUI.

Next up is Mac Catalyst. Apple originally promised to turn iPad apps into beautiful, native macOS apps – in a click of a checkbox (which later turned out to be several clicks along with potentially a lot of code changes). 2Do already has an iPad app, clearly a perfect candidate – but it also already has a powerful, designed-for-macOS mac app. Would I dump the current macOS app and replace it with an app I know I designed for a Touch-First device? No. Mac Catalyst is also not an option given it’s generally lacking when it comes to customizations and overall painful to deal with (from what I witnessed in a brief attempt), especially if you rely on certain frameworks that aren’t Mac Catalyst ready yet.

What does this all leave me with? The only option to keep things the way they are. I will continue to design, develop and refine each app for the platform it’s targeted for, using the current set of native frameworks offered for iOS / macOS (UIKit / AppKit). This however means each update, on each platform, would take its own time to complete.

My App, My Data

It’s no secret that I’ve resisted the temptation of going all proprietary when it comes to Cloud Sync. Most apps out there offer their own sync solution. It’s easier that way. They have one implementation to perfect – and only one that could ever go wrong. With complete control over the data at all times, from your device to in-transit to the cloud and back again, they’re able to optimize related workflows, streamline their sync implementation and offer additional value added services – but most importantly, they have you locked into their ecosystem. Now that everything you do, from the moment you wake up to your parent’s next anniversary, is stored in their proprietary cloud, you’re most likely to stay with that service out of convenience and simply continue to pay a subscription for the service you’re receiving in return. It’s a great overall experience for the consumer – certainly more profitable for the creator – plus, there’s very little at stake here, other than potentially losing control over your privacy of course, or being unable to sync with a particular service of choice using the app you otherwise now love.

I’ve dabbled with the idea myself at times – but something that would remain as an optional add-on, only for the purpose of offering additional value added features (I’m not going to divulge my super secret, brilliant idea in this blog post, if you’re wondering :P). I’ve even invested time and effort (and money) into its implementation before it, too, fell apart.

All this to say that I’ve come to value the the current policy 2Do has upheld, only after doing the same for BusyCal, and that is to remain entirely cloud agnostic. There’s merit in remaining open. Being able to support potentially any 3rd party cloud service, or open specifications such as CalDAV or Exchange EWS, offers great value to any user whilst staying clear from taking up the burden of managing sensitive user data. For 2Do’s next update, I dream of an app that’s open to syncing with a lot more services out there (Reminders / CalDAV / Google Tasks / Exchange / WebDAV / Dropbox / OneDrive / Google Drive / OwnCloud / Todoist even). And as an additional feature, being able to sync with multiple sources at a time – allowing you to manage your personal accounts as well as our work related accounts all within the same app.

This dream doesn’t come easy though.

The Sync Challenge

Sync – especially when it comes to the number of services it would eventually support – has been one of the most challenging aspects of working on the new update. Although this gives 2Do the freedom to potentially sync with and support any 3rd party cloud service under the sun, it does however impose limitations, several at times, such as features that a particular cloud service may not support, or may do so partially. This is incredibly difficult to model for in your technical designs when you’re working on offering rich functionality within the app itself (projects / checklists / tags / actions / locations / attachments etc) while translating this into a partial representation during sync with a 3rd party service. Given each cloud service is different, the complexity during actual implementation increases exponentially.

All of these limitations then trickle down to the UI. 2Do occasionally has to dumb down its UI in order to support the sub-set of features a particular cloud service may not support. This can be an annoying UI/UX challenge to have to deal with. Do you hide the certain features or do you simply show them as disable? Do you enable the functionality and let items slip through sync, probably confusing them when things appear to be missing on another device?

What’s Taking So Long ?!

So why is it taking me this long to work on an update when competition has added feature X, Y, Z and released version 4, 5, and 6 and just miles ahead in every direction? I don’t mean this in a condescending way, since this is a problem of my own creation – but, I don’t know, maybe because competition doesn’t have one developer working across multiple platforms and multiple apps whilst re-writing the entire back-end (remember the many parts?) as well as the front-end, while also coming up with a sync solution that works across a myriad of cloud services? It’s truly very time consuming and admittedly I haven’t been able to give it the kind of time I had originally hoped I would be able to. BusyCal – the other app that’s taken all of my time – went through a similar period where it took an arm and a leg to get it to the point it is now; yet there are mountains to tread.

The Good… News

There’s actually a point to this post, and some good news to share – if you’d consider calling it that.

I’m actually mostly done re-writing the entire back-end / core-logic / sync engine / automatic undo registration and a lot more, all entirely in Swift. In fact, I’m super proud of the new implementation. It’s beautiful, it’s performant, the sync engine is incredibly capable, robust, scalable and extendable. I haven’t finished supporting all of the services I eventually would want to in the end, but adding support for a new service is going to be a lot less work down the line.

In comparison to the current Obj-C counterpart, the new implementation in Swift is 80% fewer lines of code and is 3x more performant. The implementation is also mostly cloud service agnostic, which means it works by making fewer assumptions about the data it’s syncing, resulting in fewer potential breakage-points / bugs etc.

Apart from the sync engine, the entire database related code, including the model layer has been re-written. It’s robust, supports automatic, reliable undo-redo registration for both iOS and macOS (2Do did not currently support this on iOS, and the macOS version had known limitations), automatic change propagation throughout the UI and has the ability to support multiple windows in future. It’s also extremely performant, optimizing disk reads / writes where possible, with support for concurrency and automatic failover. It’s brilliant. And finally for the first time, I’m proud to say that all of these changes have amazing code coverage (via automatic tests / unit tests) as well as improved internal documentation. Just so much better code in general.

The Bad… News ?

Going back to the challenges I’ve faced, picking the correct approach for re-doing the UI in a way that’s future proof, has haunted me for too long. I’ve come to a conclusion that I’ve been trying too hard. Working on a UI refresh that no one’s asked for. Yes, it would be nice to add support for new UI features and cool new ways of manipulating and accessing your data, but what would be nicer would be an app that feels regularly updated.

My (new) plan is to take a step – no, many steps back. I’ve decided the new update would in fact only ship with an internal re-write of everything discussed, but with a UI that feels mostly similar (although re-written in large parts). Other than minor UI tweaks, I’m going to focus on getting it all working together – supporting all the functions and features it already supports and taking from there. Dark mode, widgets and the works. Simply adding functionality iOS has introduced over the last few years would be enough to get back on track.

Will I finally charge for this update? I really don’t know. I also don’t care about that right now. We’ll see when the time comes. I also no longer consider 2Do a threat to any other app, or vice versa. At this point, I don’t want to feel distracted by what some other app is currently capable of. 2Do has hit rock bottom in downloads, sales and usage. In a way that takes a lot of the pressure off, as I feel this gives me the time and freedom I need to continue hacking away at a sensible pace. I no longer worry about being judged, or the app receiving a one star review because of lack of dark mode or widgets or some other missing feature. To be blunt, all of the currently missing features would take no more than a week to implement if I started today. I just don’t want to add anything new to the already dying, bloated Obj-C code – especially when I know the new code is so much better and fixes so many inherent bugs. I need to – I have to – I must finish what I started. It needs to be good day-one, all brand spanking new from the ground up. I feel I’m so, so close, yet a millennia away from finishing. This frustrates me more than anything.

I’m truly sorry it’s taking this long. I have had to prioritize my time and energy on the various products I support – giving more time to the one that’s doing better in terms of downloads / sales. There’s no giving up on 2Do though, stop asking me if I have. It’s taking a lot longer but I’ve covered major grounds already – there’s just a little more distance to go.

Thank you for staying with 2Do and for all the wonderful emails, words of appreciation and support you send in daily. If you’ve moved on, I’m happy you’re giving others a reason to grow. Either way, I look forward to sharing more news in coming months.

20th November, 2021


I wanted to share a quick update on my current & future plans for 2Do, as well as some other odd bits in general.

Cool fact – 2Do is going to be 11 years old this fall 🙌. It’s surreal to see that it’s still around, and I’m still busy working on the same app day in and day out! It’s a weird feeling, because even family and friends at times can’t believe that’s all I do. “How many updates can an app have? Is there really nothing else you do?” 🙄 Well, if it wasn’t for a major update of iOS / macOS / Android each year to be continuously re-modeling and re-writing portions of your app around, perhaps there wouldn’t be many.

Another cool fact – I’m the proud new owner of BusyCal & BusyContacts 🎉. This happened late in 2017, so it’s been a little while.

I had big plans of preparing a major update for 2Do in 2019 to coincide with its 10th anniversary, but as fate would have it, iOS 13 and macOS 10.15 got announced and created a major support nightmare. This affected all calendar / task management apps (including Apple’s own Reminders app between versions of macOS), but became a major show stopper for BusyCal. We were spending more time replying to angry and confused emails than doing real work. Considering 2Do (and BusyCal) don’t charge a monthly subscription, it was imperative that in order to survive against rising competition, and to remain afloat, I focus entirely on BusyCal to bring it up to speed. Unfortunately this fiasco took away 6+ painful months of my time 🤦‍♂️ This also means I’m now 6 or so months away from releasing a meaningful update for 2Do (other than minor fixes and improvements of course).

Other than several subtle improvements, the update would include what you would expect: Dark mode, Multi-window support (for iPadOS), several new UI related features and enhancements, improved search, improved drag & drop, faster / better sync options, Reminders import, improved integration with calendaring events (which 2Do already supports, but not that visible on the phone), multiple-attachment support and maybe shared lists (without relying on CalDAV). The idea is to modernize and fine-tune the app further, without taking away existing features and annoying many. I also plan to keep 2Do open – i.e. you’re still welcome to use your sync method of choice. The plan is to support a couple more sync options and possibly (and eventually) move away from Dropbox (for various reason). You guys will love it when it’s ready to ship. It’s still a very long road ahead of me, but I’m steadily making progress.

Now a little digression – honestly, as much as I personally dislike subscriptions, I can’t say I haven’t been stumped repeatedly when it comes to working out costs involved in bringing out these “amazing new features” without ending up with a huge-ish bill at my end of the spectrum. In order to do anything meaningful, such as faster sync across devices with encryption at rest, support for multiple attachments / cloud storage, shared to-do lists and more, I end up with large overheads / subscriptions that I must pay for monthly in order to provide this functionality. Some of these don’t even make sense though. One weird experience I had recently was with (an app I use frequently). They charge meeting organizers a monthly subscription for creating / managing meetings, that you and I can join for free. Fair enough. I thought it would be cool and convenient to offer this as a sync service in BusyCal in addition to the half-dozen other services it supports, only to be surprised that they want developers to sign up to a $35/month subscription separately in order to use their API. What? Why! So that we can help them reach more users at our expense? We’re not going to make more money out of this you know. Plus there’s a real person that would need to write real code to support your service, and possibly provide support / troubleshooting for free. That almost turns me into an investor, investing my money into a service and promoting it for free. Yikes 😬! Imagine if Dropbox / iCloud / Fruux / Yahoo! / Facebook / LinkedIn / Twitter / Fastmail and the other 2 million and one widely used services began charging developers a monthly fee to make their service available to others. shakes head. Scary thought.

So any way, I currently have two options:

  1. I consume the cost and factor this in as overheads for running the business and continue to charge the one-time fee. Sort of how a car manufacturer would pay for material / rent / salaries / utility bills while accounting for a single sale per customer.
  2. Charge users a subscription for features requiring cloud storage / sync

Option 1 is a tongue-in-cheek. What if monthly sales drop but ongoing overheads continue to increase as existing users continue to store, potentially, thousands of attachments and accumulate thousands of tasks over time? This can scale up pretty rapidly. Do I then shutdown the server one day when overheads surpass sales? I would also have to release 2Do as a brand new app (in order to simulate a “paid upgrade”), giving up on years of accumulated ratings / reviews etc and hoping instead for some big-named blogs to notice in order to gain some traction. That’s highly unlikely. If anything, 2Do might simply lose all its visibility on the app store at once.

Option 2 sounds reasonable, but at the same time is terrible in so many ways. I will have to still charge users that one-time upgrade fee to unlock “Pro” features though, before offering optional subscription to users that wish to use these optional features. There’s no way to put this mildly. Users just don’t read fine-print. They also don’t understand complicated payment models. I know many developers have resorted to this, but it doesn’t appeal to me. Not only will this become a support nightmare, App Store won’t help as it’ll show a “This app offers Subscription” notice on the store page. Potential new customers will read that, won’t know or care if this refers to an optional feature-set  and pick some other app over 2Do. Furthermore, I hate the idea of showing alerts each time a user accidentally taps on a feature that requires optional subscription. 😖 It’s worse as it is when you need to display a tiny banner around “Pro” features the user needs to unlock.

What makes matters worse is that Apple still has not been able to figure out a way to provide developers with an option to charge for upgrades. I would have loved to avail that after 11 years of providing free updates.

So what do I do?

This sounds a bit crazy, but I’m going to bank-in on the fact that I’m an indie developer, which means I have finite needs. Most of these, minus greed, are met with the gracious support I receive from monthly new users. My aim then, is to ensure 2Do remains in business. Option 1 more or less meets this aim. Unless Apple announces a novel new way for developers to charge for upgrades during this years WWDC (don’t count on it, they’re in on this crazy subscription-all-the-things trend), 2Do’s next major update will possibly be a free upgrade on iOS 🤯. It may however be a paid upgrade on macOS, but I haven’t worked out the kinks on that one yet. It’s too early to say, but a lot of work will go into these updates, that’s for sure. Setapp users – you have nothing to worry about.

If I do end up charging for an update, I’ll make sure it’s fair, offers a generous “you’re-free-to-upgrade window” covering several months, including an upgrade discount offer.

I look forward to sharing more details with you guys soon. Stay tuned (preferably on twitter @2DoApp)!

Feb 25th, 2020

2Do on Android learns a new Trick with CalDAV

I’m thrilled to announce the availability of CalDAV sync on Android! With 2Do v2.10 (currently in beta) you can now sync with your CalDAV server of choice (iCloud Reminders, Fruux, Fastmail, OwnCloud and Synology to name a few). CalDAV is great because it’s open, widely supported, and best of all, you can share lists with other users and pseudo-collaborate on stuff. Neat.

The big deal about all this is the fact that this is a totally free addition for all existing pro users (remember, 2Do doesn’t charge you recurring subscription fees). There are no hidden upgrade charges, no bait and switch, no tricks. Since 2Do can be downloaded and used in all its glory for free (well, almost – you still need to pay once to be able to sync), you can still take this new feature for a test-run during the initial two-week free trial period.

So how do we milk money out of this new sync addition? We don’t. Frankly, supporting CalDAV is like learning to ______ (fill in the blank with anything super difficult that comes to mind) – it’s just hard, and adds to the overall support burden given the three-thousand-and-one flavours of clients and servers out there that we need to mix well with. Initially the plan was to charge a one-off upgrade fee for this, especially since a lot of effort and time went into its development, and will continue with ongoing improvements. Pro users would have paid around $2.99 once and sync endless times with endless devices and servers.

It turns out, 2Do doesn’t get much press on Android and I could count the number of active Pro users we have on a few thousand fingers. With an upgrade model like this, we may have gotten lucky and earned $192.98 extra the first month, and $74.40 the second (these are made-up estimates), whilst angry (and nasty) emails and reviews left by a small handful would have effectively put us out of business. It just wasn’t worth it.

On the bright side, it would genuinely make us a lot happier to see folks using 2Do, syncing it with their favourite CalDAV server and enjoying being a lot more productive.

If you’re on Android and haven’t given 2Do a chance, I guarantee you there’s no other CalDAV task manager that comes close. Try it out now.

You can join the open beta group by clicking here.

November 27, 2018

Little Things

The upcoming update for iOS (v3.8.3) is all about those subtle improvements that would probably otherwise go unnoticed in the grand scheme of things, so I wanted to highlight some of these now. After all, it’s always the little things that count.


For those of us that use a hardware keyboard with our iPads and iPhones, the ⌘V keyboard shortcut (paste) has just become even more relevant. You can now, quite easily, turn text in your clipboard into tasks. Simply copy multiple lines of text from any app that you would wish to turn into separate tasks, open 2Do and hit ⌘V.

There’s even more: if you copy and paste nested lines of text, 2Do will automatically create projects / sub-tasks for you. For example, this:

Topics to revise
     States of Matter
     Periodic Table
Call Pete and ask for class notes
Things needed for class project
     Paper cups

Will turn into this:


Clipboard Tasks

Project View


Note: Nesting should use tab characters or three or more spaces.


2Do has always supported a rich set of URL schemes that can be invoked manually or via automation apps such as Workflow and Launch Center Pro.

Coming in this update are several new additions:


In order to turn pasted text into tasks, the following addition will take your workflows to the next level (thanks @nahumck!):

twodo://x-callback-url/paste?text=[some URL encoded text to convert into tasks]&inProject=[Title of project to paste into]&forList=[List to add to]

Supply a URL encoded string as text and automate the process of moving stuff into 2Do!

Launch 2Do in search mode with the search field pre-filled

This addition eliminates the need for creating multiple Smart Lists that got seldomly used. So for example you can now use your favorite 3rd party launcher-app to open 2Do to quickly show you all high priority tasks that are overdue (type: overdue AND hiprio):


Fetch internally used Task identifiers

You can chain actions using the Workflow app by adding a task, obtaining the internally use task identifier and then using it to create further sub-tasks:

twodo://x-callback-url/getTaskID?task=[Known task’s title]&forList=[Containing List name]&saveInClipboard=[prompt-num:Save UID in Clipboard]


You can now attach an image or an audio file to a task by passing it as a base64 encoded string to the following URL scheme:

twodo://x-callback-url/add?task=Cool&picture=<base64-encoded string>&audio=<base64-encoded string>

You can also instruct 2Do to use the most recent photo placed on the camera roll automatically. Read more about it here.

Jul 10, 2016

Putting your tasks to sleep

Over ambitiousness or a change of plan, whatever the catalyst, there are times when you need to put things on hold indefinitely, only in hope that you’ll get back to them one day.

Speaking for myself, I’ve taken numerous U-turns in the past several years when it’s come to working on the “Next Big Thing” for 2Do. Most of these have been due to external influences that I had no control over, while some had simply been a matter of “how much time will A take?” vs. “no, actually B will have a bigger impact”. And yet, there were times when all the cool stuff needed to be put on hold while I focused on getting bugs squashed, only of course to potentially introduce new ones (am on it!).

Coming back to the subject, it’s worth reiterating how big of a feature search is in 2Do. Saved searches (a.k.a Smart Lists) have been a much loved feature of the app, and for good reason too; with the help of extremely flexible and easy to combine built-in search keywords, you are able to mine, extract and group related information which would be otherwise scattered all over the place – or worse – hidden and forgotten out of sight. In addition, each list can have its own custom defined Focus Filter; a special search filter that you are able to toggle on and off at any time, in order to list only the tasks you wish to immediately focus on (thus the name).

For many users, combining the two filters has catered for most of their needs.

But what if you wanted to do the exact opposite, i.e. to selectively hide stuff from an existing list because they were no longer relevant? Such as that round the world trip you had planned for next month, but your colleague gets sacked and you’re now the only one left that can fill in their boots. Or that weekly task of taking out the bins you now must put on hold, as you really did make it to the trip and not back for another 4 weeks? Surprisingly, there has never been a way to hide / pause / snooze / put-on-hold such tasks in 2Do before, at least not without several compromises. The closest thing that matches this behavior is a Scheduled task (i.e. a task with a future start date, which is kept hidden till it’s time for it to be displayed), but that doesn’t fit the bill here.

v3.8 (now available) for iOS is about to change this for good. You will now, for the first time ever, be able to pause and resume Tags on the fly! So how does this work? Take a look:

Here, the list shows a bunch of frequently requested features that I need to implement fairly soon. However, given current technological constraints, I realize much of this will simply have to wait. I don’t want to lose track of these tasks though, nor archive them, nor turn them into yet another list only to mark it as hidden (remember those comprises I was talking about earlier?). In fact, I may even come back to review these again after publishing v3.8 just to see if I can squeeze a few into v3.9.

What to do… what to do. Not much if you’re stuck with v3.7, but once you update to v3.8 (and Mac v2.2 to follow suit), you will be able to either assign these tasks an already paused tag or pause the currently used tag: supercoolfeature.


Simply swipe the task list to reveal the utility panel, swipe left on the tag you wish to pause and hit – you guessed it – Pause (you resume it the same way).


All related tasks automatically hide for you. You even get a neat little indicator on the sort bar that you can toggle to show / hide paused tasks. Presence of this indicator will suggest there are paused tasks in the selected list. This is really helpful because you won’t need to resume each tag one by one only to see what’s hidden. Perfect for weekly reviews!


In fact, since search will always find these hidden tasks, you can filter them out if you choose to do so,  by using a new built-in keyword: type: !paused


You may of course resume these tags at any time. It couldn’t be simpler. Instead of creating a new Smart List out of every list you wish to exclude these tasks from, you can now pause as many tags as you like, and doing so will in effect put all associated tasks to a deep, ever-so-peaceful sleep.


Dec 19, 2015

You’ve got Task

Email to 2Do


UPDATE: Learn how to use Email to 2Do

Email has become a big part of our lives. There’s no denying that. In fact, everyone’s trying to crack email these days by linking them to 3rd party task managers in one way or another, thus allowing you to keep track of the small stuff that ends up falling through the cracks. All these 3rd party email apps are pretty awesome, but this still involves several manual steps / taps / swipes, where you need to sift through tasks and manually share them with your task manager of choice, such as 2Do.

Wouldn’t it be cool though, if all this was to work the other way round? Instead of you laboriously filtering through your emails, 2Do simply did this for you? Automatically, in the background, based on rules you configured? So, for example, you could have all your emails from a particular sender or with a particular subject line captured as tasks. And wouldn’t it be cool if you could link any email address with 2Do (currently limited to a single email address) so that all this happened magically without you caring how or when? In fact, you could finally tap on that ‘Flag’ button right from your wrist using an Apple Watch and capture that email as a task without lifting another finger. Actually, all this really would be pretty cool. And we’ve got news for you… that’s exactly what we’ve been hard at work for some time now!

Email to 2Do is an optional one-time-only purchasable add-on that you’ll be able to buy ($3.99) and configure in zero time, starting v3.8. For those unconvinced, we’re so sure you’ll love it that it’ll come with a free trial period of 14 days (which other iOS app does that?). The possibilities are endless. You could create a special email address for 2Do and remotely forward or send emails to this address for 2Do to pick up behind the scenes and convert to tasks. You could even use this with IFTTT! Currently we plan on supporting all major IMAP service providers, including but not limited to: iCloud, Google, Outlook, Yahoo! and of course your very own custom IMAP server.

2Do has always remained true to its core goals – which has been to provide you with tools that work with services you choose for yourself, not the other way round. 2Do syncs with the service you’re comfortable with, and will now integrate seamlessly with an email address from your service provider of choice.

Oh by the way, the plugin is going to be extremely secure. Where possible, 2Do will authenticate using industry standard OAuth 2.0, thus not requiring any credentials at all. For iCloud we would recommend you use 2-step authentication and use application specific passwords where necessary. This keeps your real password safe. For custom servers, your credentials will be stored securely in your device’s encrypted Keychain. Absolutely no communication will be made outside of 2Do to any 3rd party server (including 2Do’s own servers). 2Do will also not use, save, share or communicate your email addresses outside of your device (just as we don’t when it comes to your sync accounts). We care about your privacy, just as we care about our own.

Nov 23, 2015

2Do for iOS v3.7 highlights

After several weeks of intense coding and testing, we’re very pleased to announce a brand spanking new update for all to enjoy! This update is jam-packed with goodies, stability improvements and bug fixes. The update has been pushed out and should make its way through to the App Store in the next few hours (~ 15th Oct, 9am GMT).

iOS 9 and 3D Touch Support

  • [NEW] Multi-tasking / Split screen support on iPads (on supported models)
  • [NEW] Siri Spotlight support. 2Do indexes all your tasks, along with extra information such as notes, dates, actions and image attachments so you can find them easily and be able to see quick snapshots in search.
  • [NEW] Home screen Quick Actions support for iPhone 6s and 6s Plus. Quickly create tasks, access all your today and tomorrow tasks and see an overview at the same time.
  • [NEW] Peek and Pop task previews for iPhone 6s and 6s Plus. 3D Previews also show the task’s modification date and creation date.

Other new stuff

  • [NEW] Add Task screen now has a special ‘Lightning Bolt’ button in the center of the screen. Tap on this in the middle of adding a task to quickly save and begin adding a new task. If you add a project, it cleverly selects it as the destination for the next task.
  • [NEW] On the iPhone when editing a task, you now have an up / down arrow visible at the top (similar to Mail app), which allows you to navigate to the next / previous task in the list without leaving the screen.
  • [NEW] Improved nag alerts; supported nag intervals are every 5mins, 15mins, 30mins, 1hr, day
  • [NEW] Start dates are now 1st class citizens. Similar to the due date shortcut bar when adding a new task, 2Do can now display one for picking start dates and times. Switch this ON from Settings > Appearance > Customize Date Shortcuts.
  • [NEW] A shortcut time-picker now appears under the default due date / start date bar when adding a new task and a date is picked. These individual times (4 in total) can be customized from Settings > Advanced > Default Due Time and Default Start Time.
  • [NEW] Search Preset added to the search preset picker: Type: browse (for filtering on all tasks with URL actions)
  • [NEW] Search preset for filtering out all tasks without a start date: Type: nostart
  • [NEW] CMD+M ‘Move’ shortcut in batch edit mode for the iPad
  • [NEW] Up and down arrow keys to switch between tasks (iPad)
  • [NEW] Scheduled tasks can be toggled on and off in Project view as well
  • [NEW] Two new batch edit options: Priority, Location. Rotate device to landscape to see more options if they don’t otherwise fit on screen.
  • [NEW] Search now supports excluding words from search by prepending it with an exclamation, e.g. “good !bad” will search for tasks with the word good but not bad.
  • [NEW] You can now change the number of auto-backups created

We’re now preparing a similarly impressive update for the Mac: v2.1. Stay tuned!

Oct 15, 2015

“So, how do you do it?”

Immediately after releasing Push sync for iOS last night (in 2Do v3.6 – and yes, it’s coming to the Mac very soon), we’ve read some great feedback but have also been approached by the inquisitive and the concerned – and rightly so – asking “So, how do you do it? Does our private data even transfer over a secure connection? Do you save any of our private stuff on your servers? Do you keep track of our tasks in order to determine which device syncs what, when and how? How exactly are you pushing this information from device to device?”

These are all amazing questions, and for all these amazing questions, we’ve got one amazing answer: “Our Push sync solution is perhaps the most secure in the entire universe!”

Woah! Did we just say that? No seriously, we aren’t insane – at least not yet. The question is, how on earth can we make such a bold statement? And to think, we don’t even know how to spell encrypshion (that was deliberate!). You see, the most secure form of communication is … when you have absolutely no communication at all. That’s right! 2Do makes all this happen without actually communicating anything with anyone (communication quite literally involves an exchange of information between two or more parties). It shares no private data, or even public for that matter, with any server / device / human / satellite / living or non-living thing. That’s how we’re able to pull it off on top of all the existing sync solutions supported: Dropbox, Reminders, Toodledo, Fruux, Yahoo! and Custom 3rd party CalDAV servers.

Without going too much into the nitty gritty details, this is how we pull it off:

iPhone: Ya’ll! I just finished syncing.

iPad: Cool! I’ve gotta check this out, now!

iPod: Hey, not fair! I was about to sync some pending changes!

iPhone: Relax, dude. Just shout when you’re done.

In technical terms, this is what we call the Observer design pattern. One device syncs, makes an anonymous broadcast over a secure iCloud connection (zero information shared, just a shout out, absolutely nothing to secure, but the connection is secure any way). Other observing devices see this, and react accordingly. Each device maintains its own, private and encrypted connection to the sync service of your choice, and at no time does any of this information gets shared between devices.

So you see, you’ve got nothing to worry about! Unlike several other services, we don’t make you fill out any forms, force you into signing up to our own insecure cloud, or share details with any of our dodgy partners. While most product developers will explain, “You see, in order to provide you with fast, reliable sync in the background, we just have to implement our own cloud service – and that’s why we can’t support any of the more popular ones that people actually use at home or at work”. Yup, we believe you! Let me go ahead and pour out my life onto your servers for the benefit of your employees during those boring lunch breaks, eh? And then you can email us after a month, advising us to change our passwords, completely precautionary of course, since you care so much. Don’t we just love you for that!

Your data belongs to you. You sync it with whatever service you’re comfortable with. We’re not going to dictate or vouch for one service over another. They’re all awesome. Best of all, why reinvent the wheel when most of these services already do a pretty decent job when it comes to sharing data amongst other 3rd party apps (CalDAV, to name one). We’d rather spend all that energy working on the actual stuff that keeps you productive.

2Do speaks to no motherships. And that says a lot about our respect for your data.

Aug 25, 2015

Push Sync

Push Sync

We’re very excited to announce that for the very first time, 2Do will include support for transparent, background Push Sync. In simpler words, making a change on one device will (almost) immediately sync all of your other devices, transparently in the background. You no longer will have to rely on iOS to (in)frequently sync 2Do in the background, or wait for changes to appear after you’ve launched the app, including app badge updates. This will work irrespective of which sync method you’re currently using, giving you the freedom to pick whatever sync method you prefer, including your very own CalDAV server (unlike other apps that force you into using their custom cloud storage just for this one feature to work). How amazing is that?

This new feature is at first going to be available for all iOS devices, starting with v3.6, and will later be extended to support Mac OS X. Push Sync will not only result in rapid sync, but will also extend the battery life of your devices as it’s going to be a lot more energy efficient.

There will be no switches to toggle, and no settings to mess around with – it’ll just work after you update to v3.6. In fact, you won’t even notice it, except your other devices won’t show you stale data at launch anymore. It’s that cool!

Update: v3.6 is now available on the App Store!

Watch 2Do in Action

For all our existing and new users alike, we’re happy to announce that 2Do for Apple Watch is ready. As you all are probably aware, Apple Watch will be available to pre-order starting the 10th of April and should be in your hands on the 24th. We’ve made sure you’ve got one more reason to buy that watch!

2Do for Apple Watch is going to be a natural extension to the app on your iPhone, iPad and Mac. If you happen to be aware of the subtleties and limitations involved in developing for Apple Watch, you’d appreciate that we went all-out on getting this ready for you. Instead of dumbing down the app in the spirit of we wanted to keep it simple, our team took up the challenge and developed a truly remarkable companion app – one that you’ll actually want to use.

2Do on the Watch will give you direct access to all your popular lists, including a hand-picked list. This could be anything from a simple list to a Smart List built around a complex set of rules. You’ll immediately be able to familiarize yourself with the task list layout, as it has been designed to resemble the main app. Additional information regarding dates and times will be displayed where possible. If you’ve got the habit of organizing your tasks into projects and checklists, 2Do’s got you covered. It’ll let you dig deeper into the list hierarchy and access all your sub-tasks, so you’ll never have to take out your phone again when shopping… unless of course you want to.

We didn’t leave the task details screen out either. At a glance you’ll get all the relevant details assigned to the task, such as start dates and due dates, durations, tags, locations or actions; and a simple swipe to the left takes you to all your notes. Beautiful.

You’ll also have the option to schedule or delete your tasks directly from this screen.

2Do for Apple Watch will be making its way through the App Store and onto your wrists as soon as Apple begins accepting 3rd party apps, which we’re hoping will be around the launch date: 24th of April, 2015.