A Rust command-line client for Things 3 that talks directly to the Things Cloud API.
$ things3 today --detailed
⭑ Today (6 tasks)
A7 ▢ Follow up with team
│ Shared notes for context
│
M ├╴○ draft update
J └╴○ review checklist
AK ▢ Review inbox and prioritize
AE ▢ Submit reimbursement ⚑ due by 2026-04-15
Cr ● Planning
Dr ▢ Prepare weekly summary
☽ This Evening
Ee ▢ Reflect on highlights
Px ▢ Reset workspace for tomorrowthings3 find --query "rent" --deadline "<=2026-03-31"
things3 new "Follow up with team" --when today
things3 schedule <task-id> --deadline 2026-04-10
things3 mark <task-id> --doneVia Homebrew:
brew install evanpurkhiser/personal/things3-cloudVia Arch Linux AUR:
yay -S things3-cloudFrom crates.io:
cargo install things3-cloudFrom source:
cargo install --path .things3 set-authYou can also set credentials via environment variables:
export THINGS3_EMAIL="you@example.com"
export THINGS3_PASSWORD="your-password"Environment variables override values in the auth file.
Roadmap items are tracked in ROADMAP.md.
- Configure auth with
set-auth(stored in XDG state) - Incremental sync with local cache for fast startup
-
--no-syncflag to skip cloud sync and use local cache only
Views
-
inbox,today,upcoming,anytime,someday,logbook -
projects/project <id>,areas/area <id>,tags - Show notes via
--detailed - Show checklist items via
--detailed -
findwith title/notes/checklists and tag/area/project/status/date filters
Tasks
-
new— create tasks with title, notes, tags, when, deadline, and position -
edit— rename, set/remove notes, move, add/remove tags (multi-ID supported) -
edit --add-checklist/--remove-checklist/--rename-checklist -
mark— done/incomplete/canceled (multi-ID supported) -
mark --check/--uncheck/--check-cancelfor checklist toggles -
schedule— when/start date, deadline, today/evening/someday -
reorder— reorder tasks within lists -
delete— trash tasks
Projects / Areas / Tags
-
projects new/projects edit -
areas new/areas edit -
tags new/tags edit/tags delete
Run all Rust tests:
cargo test --all-targetsThe CLI snapshot suite uses trycmd test cases in trycmd/.
Things Cloud API clients (same approach as this project)
- wbopan/things-cloud-mcp (Go MCP server via Cloud API)
- arthursoares/things-cloud-sdk (Go SDK for Things Cloud)
Local database / URL scheme clients (read from local SQLite, write via URL scheme or AppleScript)
- ossianhempel/things3-cli (Go CLI, local database)
- thingsapi/things.py (Python library, reads database)
- thingsapi/things-cli (Python CLI built on things.py)
- GarthDB/rust-things3 (Rust library and CLI with MCP)
MCP servers (local, via AppleScript or URL scheme)
- drjforrest/mcp-things3 (Python MCP, AppleScript + x-call)
- rossshannon/Things3-MCP (Python MCP with read/write)