GothenburgBitFactory / GothenburgBitFactory/taskwarrior
Task modification very slow when project feedback is involved
- Dominant language
- C++
- Stars
- 6.1k
- Forks
- 423
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 11
Description
Taskwarrior 3.x.x is significantly slower than 2.x.x after migration: basic commands take >1 second per task creating major annoyances for me who uses taskwarrior every day. Removing rows from `tasks` did reduce the command time to 1/400.
I also created an index on `operations` as it was the largest table but that results in no performance difference. Before the prune I had 7573 rows in `tasks` and I think that is not an unusually high amount of tasks.
Every operation takes approx 1 second per task and is **significantly** slower than in the 2.x.x version:
This is that it looks like to run modify on ten tasks at the same time:
task 3.4.2 built for Linux
```
cbulle@debian-trixie:~$ time task 3 modify wait:mon
Modifying task 3 'hidden'.
Modified 1 task.
TASKDATA override: /tmp/.task.backup
Project 'finance' is 95% complete (6 of 125 tasks remaining).
real 0m1.086s
user 0m1.069s
sys 0m0.017s
cbulle@debian-trixie:~$ time yes | task 10-20 modify wait:mon | ts
2026-06-27 06:34:35 This command will alter 11 tasks.
2026-06-27 06:34:35 - Wait will be changed from '9999-12-30' to '2026-06-29'.
2026-06-27 06:34:36 Modify task 10 'hidden'? (yes/no/all/quit) Modifying task 10 'hidden'.
2026-06-27 06:34:36
2026-06-27 06:34:36 - Wait will be changed from '2027-08-30' to '2026-06-29'.
2026-06-27 06:34:37 Modify task 11 'hidden'? (yes/no/all/quit) Modifying task 11 'hidden'.
2026-06-27 06:34:37
2026-06-27 06:34:37 - Wait will be changed from '9999-12-30' to '2026-06-29'.
2026-06-27 06:34:38 Modify task 12 'hidden'? (yes/no/all/quit) Modifying task 12 'hidden'.
2026-06-27 06:34:38
2026-06-27 06:34:38 - Wait will be changed from '9999-12-30' to '2026-06-29'.
2026-06-27 06:34:39 Modify task 13 'hidden'? (yes/no/all/quit) Modifying task 13 'hidden'.
2026-06-27 06:34:39
2026-06-27 06:34:39 - Wait will be changed from '9999-12-30' to '2026-06-29'.
2026-06-27 06:34:40 Modify task 14 'hidden'? (yes/no/all/quit) Modifying task 14 'hidden'.
2026-06-27 06:34:40
2026-06-27 06:34:40 - Wait will be changed from '2026-05-03' to '2026-06-29'.
2026-06-27 06:34:41 Modify task 15 'hidden'? (yes/no/all/quit) Modifying task 15 'hidden'.
2026-06-27 06:34:41
2026-06-27 06:34:41 - Wait will be changed from '2026-10-01' to '2026-06-29'.
2026-06-27 06:34:43 Modify task 16 'hidden'? (yes/no/all/quit) Modifying task 16 'hidden'.
2026-06-27 06:34:43 This is a recurring task. Do you want to modify all pending recurrences of this same task? (yes/no)
2026-06-27 06:34:43 - Wait will be changed from '2026-06-28' to '2026-06-29'.
2026-06-27 06:34:44 Modify task 17 'hidden'? (yes/no/all/quit) Modifying task 17 'hidden'.
2026-06-27 06:34:44
2026-06-27 06:34:44 - Wait will be changed from '2026-12-01' to '2026-06-29'.
2026-06-27 06:34:45 Modify task 18 'hidden'? (yes/no/all/quit) Modifying task 18 'hidden'.
2026-06-27 06:34:45
2026-06-27 06:34:45 - Wait will be changed from '2026-03-05' to '2026-06-29'.
2026-06-27 06:34:45 Modify task 19 'hidden'? (yes/no/all/quit) Modifying task 19 'hidden'.
2026-06-27 06:34:45
2026-06-27 06:34:45 - Wait will be changed from '2026-06-28' to '2026-06-29'.
TASKDATA override: /tmp/.task.backup
Warning: You have specified that the 'wait' date is after the 'due' date.
Project '40c3' is 0% complete (1 task remaining).
Project 'finance' is 95% complete (6 of 125 tasks remaining).
Project 'freunde' is 98% complete (2 of 105 tasks remaining).
Project 'haushalt' is 99% complete (2 of 650 tasks remaining).
Project 'health' is 99% complete (1 of 403 tasks remaining).
Project 'job' is 98% complete (1 of 59 tasks remaining).
Project 'partner' is 97% complete (5 of 219 tasks remaining).
Project 'sec' is 96% complete (1 of 32 tasks remaining).
Project 'self' is 99% complete (1 of 162 tasks remaining).
2026-06-27 06:34:46 Modify task 20 'hidden'? (yes/no/all/quit) Modifying task 20 'hidden'.
2026-06-27 06:34:46 Modified 11 tasks.
real 0m10.578s
user 0m10.555s
sys 0m0.053s
cbulle@debian-trixie:~$ time task stats
TASKDATA override: /tmp/.task.backup
Category Data
Pending 2
Waiting 32
Recurring 2
Completed 5555
Deleted 1982
Total 7573
Annotations 7953
Unique tags 11
Projects 232
Blocked tasks 0
Blocking tasks 0
Undo transactions 850
Sync backlog transactions 84285
Tasks tagged 31.6%
Oldest task 2019-02-24
Newest task 2026-06-26
Task used for 7.3y
Task added every 8h
Task completed every 11h
Task deleted every 1d
Average time pending 12d
Average desc length 47 characters
real 0m1.230s
user 0m1.194s
sys 0m0.036s
```
The v2 on the other hand was very snappy and quick given the (almost) same amount of items.
Taskwarrior v3 slower than v2 after upgrade / performance regression / migration to new version 3 causes slow operations / Performance issue post-migration slow per task / bulk commands extremely slow (but was slow in 2.x.x!) / ~1s delay for task commands / 3.0.0 new data format slowdown every task command is slower than before.
Contributor guide
Research direction
Reproduce the delay with `task 3 modify wait:mon`, the ten-task bulk command, and `task stats` using the reported migrated data set. Compare the v3 behavior with v2 and inspect the task and operations data handling, especially the project-feedback path. Done means identifying and correcting the regression so per-task and bulk commands no longer incur the reported roughly one-second delay, with measurements to demonstrate the improvement.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- cli, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100