A modern, powerful todo.txt app for iOS
SwiftoDo is a modern, powerful todo.txt app for iOS 10 and above. It is a task list built specifically for the todo.txt file format, and allows you work with your existing todo.txt files via Dropbox sync.

A task list that you control

Your task list is a plain text file, not some proprietary format owned by a company or locked to a specific application.

A simple and timeless format

Plain text is the simplest file format there is. It will always be accessible, by some kind of application, forever.

Few rules to learn

Learn only a few simple formatting rules (which SwiftoDo will take care of for you) to indicate task priority, task completion, and so on.

A GTD-ready system

The todo.txt format was built with Getting Things Done in mind. It supports projects (which begin with “+”) and contexts (which begin with a “@“).

Use alongside any app on any platform

With Dropbox sync enabled, you can sync your task list with any app on any platform.

Available on the App Store


SwiftoDo offers the following features:

Todo.txt format compliance

  • Includes support for due date and threshold date

Task list

  • Dropbox sync
  • Task list sort
  • Task list filter
  • Full-text search
  • Edit multiple tasks at once (good for changing priority or due date)
  • Support for recurring tasks with the rec: tag.
  • Support for hidden tasks with the h:1 tag

Task editor

  • Pickers for priority, project, context, due date, threshold date, and recurrence pattern

iOS integration

  • Universal app for iPhone and iPad
  • Split view and slide-over multitasking on iPad
  • Shake to undo



What is the todo.txt format?

The todo.txt format is defined in the todo.txt project wiki.

How is the todo.txt format useful?

Storing your tasks in a text file that you control gives you tremendous power. You are not locked into a particular system, application, or platform. You can sync the file across devices simply. You can open your task list in any text editor for quick edits, such as pasting in several dozen tasks at once. You can use existing command line tools, such as grep and sort, for searching and sorting.

Due dates and threshold dates aren't part of the todo.txt format spec!

Due date and threshold date are implemented as key:value tags, which are fully compliant with the todo.txt format spec. They both are popular extensions to the todo.txt command line scripts.

How are due dates formatted?

Due dates are formatted as due:yyyy-mm-dd. For example: due:2016-12-31.

What are threshold dates?

A threshold date indicates that a task should not be started until the threshold date. Adding threshold dates is a way to indicate "future tasks". A threshold date is formatted as: t:yyyy-mm-dd.

How are threshold dates formatted?

Threshold dates are formatted as t:yyyy-mm-dd. For example: t:2016-12-31.

Do I have to use the yyyy-mm-dd date format?

Yes. That date format is defined by ISO 8601. It is an internationally accepted way to represent dates. If you don't like typing the date that way, use the due date and threshold date pickers in the task text editor.

My projects (or contexts) are showing up twice! Why are projects and contexts case sensitive?

Projects and contexts, as shown in the filter list and the pickers in the task text editor, show up exactly as you typed them. If your typed them with inconsistent capitalization, no attempt is made to harmonize the capitalization into one canonical version. If you wish to, you can use filters to identify the projects and contexts with capitalization you don't like, and then edit those tasks to make the capitalization consistent. Also, you may use the project and context pickers in the task text editor to apply consistent capitalization to your projects and contexts.

Dropbox sync

How does Dropbox sync work?

Your task list will be downloaded when:

Your task list will be uploaded when:

Will SwiftoDo monitor Dropbox for todo.txt file changes while running?

No. If you modify your todo.txt file outside of SwiftoDo while SwiftoDo is open, SwiftoDo will not be notified of the changes. You should pull-to-refresh the task list to ensure you have the latest copy.

How does manual sync mode work?

Manual sync mode is an option that prevents syncing unless you pull-to-refresh the task list or tap the archive button. Changes to your task list will be cached locally. When you pull-to-refresh, you will be given the opportunity to upload them to Dropbox or to download from Dropbox and overwrite your changes. Archive tasks upon completion is disabled in manual sync mode.

Local file access only

Can I use SwiftoDo without Dropbox?

Yes. You can use SwiftoDo with a local, on-device task list. Just disable (or do not enable) Dropbox sync.

What happens when I archive tasks?

Without Dropbox sync enabled, archiving tasks will store completed tasks in a local "done.txt" file within the app's sandbox. This file can be accessed via iTunes File Sharing.


How do the sort options work?

Except for "order in file" (which is self-explanatory), the various sort options perform a multi-level sort. The first sort level is the element you choose: priority, project, or context. Then, beneath that first sort level, tasks are sorted based on order of descending priority, as evaluated by priority, due date, threshold date, and completion status, in that order. If a task has no signifier of priority, it is sorted based on the order of the file.

You can disable multi-level sort and sort by only the element you choose: priority, project, etc.

You can also reverse the sort order.


What are "Any", "All", and "Mix" filters?

The "Any" filter will return tasks that match any of the projects, contexts, or priorities selected. This is a permissive filter, and will return the most results. Each filter condition is considered independently. For example, use the "Any" filter to return all tasks for the +work project and the +home project, and all tasks with the @phone context, and all tasks with priority (A) or (B).

The "All" filter will return tasks that match all the projects, contexts, or priorities selected. This is the least permissive filter. All filter conditions are considered together. It is meant to narrow down the list to tasks for a single project, a single context, and a single priority. For example, use the "All" filter to return tasks from the +work project and the context @phone and a priority of (A).

The "Mix" filter Is a blend of the "Any" and "All" filter. It will return tasks that match any of the selections within a filter category (project, context, or priority), in all of the filter categories in which a selection was made. It is meant to filter the list down to tasks for multiple projects with contexts and/or priorities in common. For example, use the "Mix" filter to return tasks from the +work project or the +home project, with context @phone or @office, and priority (A) or (B).

Hardware keyboard shortcuts

What hardware keyboard shortcuts are available?

Hold down the command key the view all available hardware keyboard shortcuts.

On the task list,

On the task view,

On the task edit view,

Recurring tasks

How do I create a recurring task?

A task with a well-formed Support for recurring tasks with the "rec:" tag. The “rec:” tag value's format is as follows: a number suffixed by d, b, w, m, or y (days, “business days” or weekdays, weeks, months, and years, respectively). To enable strict recurrence, prefix the pattern with a +.


When are recurring tasks created?

When tasks with a well-formed "rec:" tag are completed, new tasks will be created with adjusted due dates (and, if they exist, adjusted threshold dates). The adjusted due date will be based on the task’s completion date (normal recurrence) or on the task’s due date (strict recurrence).

Hidden tasks

How do I create a hidden task?

There is a setting for showing or hiding tasks with the "h:1" tag. When that setting is checked, any tasks with a "h:1" tag will be hidden.

Why would I want to create a hidden task?

Hidden tasks can be useful to keep your favorite projects and contexts available in the filter even after you have archived all your read tasks associated with them.

Privacy Policy

SwiftoDo does not collect any of your information, period. No data within the app or accessed by the app is transmitted to SwiftoDo.

For Dropbox sync: SwiftoDo will only access the files in Dropbox that you specify. Your Dropbox user name and password are never known to the SwiftoDo application or developer.