Perennial Task Just Got More Flexible - Arthur Dick

Wednesday, July 16th, 2025

At its heart, Perennial Task has always been about a simple philosophy: giving you total control over your tasks in a way that feels natural, powerful, and timeless. Each task is a file, you own your data, and you manage your responsibilities right from the command line where you work.

In my journey to make Perennial Task the best tool for cultivating recurring responsibilities, I’ve listened to feedback and looked for ways to make the system even more intuitive. Today, I'm thrilled to announce a major update that fundamentally refines how tasks are scheduled, making the application more flexible and powerful than ever before.

From Two Paths to One

Previously, Perennial Task had a split personality when it came to time-based tasks. You had:

This system worked, but it wasn't perfect. What if you had a task that needed to happen on the 1st of every month, regardless of whether you completed it on the 1st or the 3rd? The old system couldn't handle that elegantly. This led to a core realization: the distinction between "due" and "recurring" was artificial. They were just two sides of the same coin.

Introducing the Unified "Scheduled" Task

With the latest version, I've unified these concepts into a single, elegant Scheduled task type.

A task is now either Normal (a simple to-do) or Scheduled. That's it. A scheduled task has a due date, and it can optionally reschedule itself. This small change in concept leads to a massive leap in flexibility, all thanks to a new element in the task's XML file: <reschedule>.

Here’s how it works. A scheduled task might look like this:

<task>
    <name>Pay Monthly Rent</name>
    <due>2025-08-01</due>
    <reschedule>
        <interval>1 month</interval>
        <from>due_date</from>
    </reschedule>
</task>

The magic lies in two simple tags:

This new structure elegantly covers every scenario. A task with just a <due> tag is a simple, one-off event. A task with a <reschedule> tag is a true perennial responsibility, adapting to whatever schedule you need.

A Seamless Transition: Your Tasks Are Safe

Change can be intimidating, especially when it comes to a system you rely on. That's why I've made this transition fully backward compatible.

You don't have to do anything to your existing tasks. The application is smart enough to understand both the old and new formats. The next time you prn complete a task that uses the legacy "recurring" format, it will be automatically and silently migrated to the new <reschedule> format. Your data remains safe, and your workflow continues uninterrupted.

What This Means for You

This update is more than just a technical refactoring. It's about aligning the tool more closely with the way we actually think about our responsibilities. It means less time fighting with your tools and more time focusing on what matters.

I believe this change makes Perennial Task an even more powerful ally in your quest to build habits, maintain consistency, and cultivate the important tasks that return, season after season.

Update to the latest version today and feel the difference. Happy tasking!

Tags: software developmentproductivity

← Why I Ditched TaskwarriorBlog Index ↑