A simple, efficient terminal-based task manager written in Go. doitdoit helps you manage your daily tasks with a focus on what's ahead, keeping your workflow smooth and keyboard-driven.
This software is licensed under the terms described in LICENCE.md.
Inspired by the O'SaaSy License from 37signals.
- Clean TUI: A multi-column terminal interface displaying tasks for today and the next few days.
- Automatic Rollover: Incomplete tasks from previous days are automatically moved to "Today" when you start the app. No task is left behind.
- Future Planning: "Future" view (
fkey) for scheduling. - Keyboard Driven: Fully navigable and operable using standard Vim-like keys (
h,j,k,l) or arrow keys. - Bulk Import: Easily import a list of tasks from a text file.
- Data Pruning: Automatically cleans up tasks older than 5 days to keep your data file lightweight.
- Cloud Sync Friendly: All data is stored in a single JSON file, making it easy to sync across devices using your preferred file sync service.
- Go (1.19 or later recommended)
go install github.com/dtt101/doitdoit@latestThis builds and places the binary in $GOPATH/bin (usually ~/go/bin); ensure that directory is on your PATH.
git clone https://github.com/dtt101/doitdoit.git
cd doitdoit
go run main.goTo build a standalone binary:
go build -o doitdoit
./doitdoitEnsure you have Go 1.24+ available, then run all tests with:
go test ./...For a fresh run that skips cache, use go test ./... -count=1, and add -cover if you want a quick coverage summary.
On the first run, doitdoit will ask where you want to store your data file (doitdoit.json). You can choose the default location or specify a custom path.
Pro Tip: To sync your tasks across devices, specify a path inside a cloud-synced folder (e.g., ~/Dropbox/doitdoit/ or ~/Google Drive/Tasks/).
- Arrow Keys or
hjkl: Navigate between days (columns) and tasks (rows). f: Toggle the "Future" view to see tasks without a due date.
a: Add a new task to the currently selected day/column.d: Delete the selected task.SpaceorEnter: Toggle task completion status.m: Enter Move Mode.- Use Left/Right to move the task to a different day.
- Use Up/Down to reorder the task within the list.
- Press
morEscto exit Move Mode.
t: Set a due date for a task (Only available in Future view).T: Move the selected Future task directly to Today (Future view).
qorCtrl+c: Quit the application.
The doitdoit binary supports several command-line flags and subcommands:
doitdoit: Launch the main application.doitdoit -days <number>: Launch the app displaying a specific number of days (default is 3).doitdoit -file <path>: specific a path to the data file for this session.doitdoit config show: Display the current path of your data file.doitdoit config move <new_path>: Move your data file to a new location and update the configuration.
To import multiple tasks at once:
- Create a file named
import.txtin the same directory as yourdoitdoit.jsondata file. - Add one task per line in the text file.
- Run
doitdoit. - The tasks will be automatically imported into your "Future" list, and the
import.txtfile will be deleted.
