This project helps you migrate your Things 3 database into OmniFocus.
This is done with the use of the TaskPaper format. This script will convert each Area into a TaskPaper file. There it's just a matter of copy-pasting the content of each file into a OmniFocus folder.
The following is not supported:
- Trashed items
- Projects NOT in an Area
- Repeating schedule on repeating tasks
- Repeating tasks and projects will be migrated, but their repeating schedule will have to be set manually in OmniFocus
- See: How to use
- Logbook items (completed/dropped tasks or projects)
- Logbook items can be migrated with an experimental option, but most of them won't be marked as complete/dropped in OmniFocus
- See:
--include-logbook
option
- Clone this repository
- Install the dependencies with Pipenv
pipenv install
- Run the app
pipenv run python app.py
Optionally, you can specify the path to your Things3 database file, or the output directory.
pipenv run python app.py --dbpath /path/to/things3/database/main.sqlite --output /path/to/output/dir
Note: --dbpath
supports globbing (e.g. ~/**/main-*.sqlite
)
- Copy the content of each file/area into a OmniFocus folder
- Identify the repeating tasks and projects by looking at the
MANUALLY_CONVERT__REPEATING
tag - In Things3, go to the
Repeating
section - Set the repeating schedule for each task/project
- Delete the
MANUALLY_CONVERT__REPEATING
tag
Why?
The repeating schedule is stored in a complex format in the Things3 DB. I probably could have spent time deciphering it ... but then I realized I really didn't have that many repeating tasks, so I just decided to do it manually.
- Identify the someday projects by looking at the
MANUALLY_CONVERT__SOMEDAY
tag - Set the status of each someday project to
On Hold
- Delete the
MANUALLY_CONVERT__SOMEDAY
tag
Why?
Can't set a project toOn Hold
via TaskPaper (or couldn't figure out how to do it)
- Set the tag
SOMEDAY
toOn Hold
- Optional: Rename the
SOMEDAY
tag
Why?
Need to let OmniFocus know theSOMEDAY
tag represents tasks that are on hold
- Identify the projects by looking at the
MANUALLY_CONVERT__SINGLE-ACTIONS
tag - Convert each project to a Single-Action list
- Delete the
MANUALLY_CONVERT__SINGLE-ACTIONS
tag
Why?
The tasks that were in an Area without a project will be in a project named[AREA_NAME]
(whereAREA_NAME
is the name of the area). This is because OmniFocus does not allow tasks to live in a folder.These projects are no real project, but are instead Single-Action lists. Setting a project to be a Single-Action list is not possible via TaskPaper (or couldn't figure out how to do it), so we have to do it manually.
This option will include the Project/Tasks that completed or dropped. It is disabled by default because when importing in OmniFocus:
- It won't make a Task as complete/dropped if not all of its children have been explicitly marked complete/dropped as well
- It won't ever mark a Project as complete/dropped, even if all of its children have been explicitly marked complete/dropped.
So, it results in a LOT of noise. But, the option is there, in case you want to try it out.