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
INSTALL_DIR=$HOME/.local/bin curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | sh
# Pin a specific version (defaults to the latest release)
VERSION=vX.Y.Z curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | sh
# Override the asset download base URL (for mirrors / testing)
RELEASE_BASE_URL=https://example.com/things curl -fsSL https://raw.githubusercontent.com/ryanlewis/things-cli/main/install.sh | 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
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.
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)'