Skip to content

Comparison

Switch to Zen Mode
FeatureMutsumiDooitTaskwarriorUltralistdstask
TUITextualTextualncursesBubble TeaCustom
CLIclickCustomCustomCustom
StorageJSONSQLiteFlat fileJSONGit
ConfigTOMLPythonRC fileYAMLYAML
Custom fieldsextra="allow"UDA
Priority3-level enumIntegerIntegerBooleanP1-P3
SubtasksNested JSONparent_idDepends
Multi-key sequencesdd, ggdd, da
Keybinding presets31N/A1N/A
Cascading completionYesYes
File watchingwatchdog
Agent integrationFirst-classHooks
i18n3 languages
Themes4 + customYes
NetworkNeverNeverSync serverNeverGit
SearchDim-as-filterFilterReport filter
  • Multi-key sequences: Key buffer with prefix matching, no timeout
  • Inline confirmation bar: "Delete 'xxx'? [y/N]" — one keystroke
  • Cascading completion: Parent done → children done
  • Priority cycling: +/- keys
  • Sort overlay: s key picker
  • Help screen: ? auto-generated reference
  • CLI-for-every-action: Agent/script integration
  • Custom fields concept: Arbitrary metadata on tasks
  • Keybinding muscle memory: j/k/dd/gg/G/y/p
  • Keyboard-first philosophy: Primary interaction mode
FeatureSourceWhy
SQLiteDooitAgents output JSON natively
Python configDooitRCE vector — TOML is safe
Plugin systemDooitComplexity budget
Unbounded urgencyDooit3 named levels suffice
Sync serverTaskwarriorLocal Only principle
Hook scriptsTaskwarriorEvent logs are passive
NLP datesTodoistAmbiguous — use ISO 8601
DesignWhy Unique
JSON as ModelLingua franca of AI agents
Agent Agnostic MVCExplicit AI agent integration
3 keybinding presetsRespects personal muscle memory
extra="allow"Zero-ceremony custom fields
Scope hybridManual > due_date > fallback inbox
Dim-as-filter searchPreserves spatial context
Triple input parityKeyboard + Mouse + CLI