Install
things-cli runs on macOS and ships as a single static Go binary. Pick
whichever install method fits your workflow.
things-cli is an independent third-party tool and is not
affiliated with Cultured Code.Homebrew
brew install ryanlewis/tap/things
Or, if you’d rather add the tap explicitly:
brew tap ryanlewis/tap
brew install things
The cask is auto-published from each tagged release into
ryanlewis/homebrew-tap.
One-line install script
curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | sh
Downloads the latest release for your architecture, verifies the
checksum against checksums.txt, and installs the things binary to
/usr/local/bin.
The script reads three optional environment variables:
# Install somewhere other than /usr/local/bin
curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | INSTALL_DIR=$HOME/.local/bin sh
# Pin a specific version (defaults to the latest release)
curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | VERSION=vX.Y.Z sh
# Override the asset download base URL (for mirrors / testing)
curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | RELEASE_BASE_URL=https://example.com/things sh
go install
If you have a recent Go toolchain:
go install github.com/ryanlewis/things-cli/cmd/things@latest
The binary lands in $GOBIN (or $GOPATH/bin) as things.
Prebuilt binary
Grab a .tar.gz from the
latest release:
things_<version>_darwin_arm64.tar.gz— Apple Siliconthings_<version>_darwin_amd64.tar.gz— Intel
Extract, move things onto your $PATH, and you’re done.
tar -xzf things_<version>_darwin_arm64.tar.gz
mv things /usr/local/bin/
things --version
Updating
things update
Updates the CLI the same way you installed it: Homebrew, the install
script, or go install. Add --dry-run to see the command without
running it. If it cannot reach GitHub to check the latest release, it
stops rather than risk installing an older version (Homebrew excepted).
See things update.
Verifying the install
things --version # prints the build version
things # default view: today
The first invocation reads the Things3 database from
~/Library/Group Containers/JLMPQHK86H.com.culturedcode.ThingsMac/ThingsData-*/Things Database.thingsdatabase/main.sqlite
in read-only mode. Things3 must be installed and have been launched at
least once for the database to exist.
If a command says the database is missing or cannot be opened, run
things doctor. It tells a missing database apart from macOS refusing
access, and reads no task data. See things doctor.
Quickstart
# What's on today
things
# Inbox, upcoming, anytime — all built-in views
things inbox
things upcoming -t urgent
# Capture a task
things add "Buy milk" --when today --tags errand,shopping
# Show, edit, complete
things show 3
things edit 3 --add-tags urgent --deadline 2026-05-01
things complete 3
# Reveal in the Things app
things open today
Every read command takes -j / --json for structured output:
things upcoming --json | jq '.[] | select(.deadline)'