anyr 0.3.0

CLI for Anytype - list, search, and perform CRUD operations on Anytype objects.
anyr-0.3.0 is not a library.

anyr

List, search, and manipulate anytype objects from the command-line

Homepage: https://github.com/stevelr/anytype

# show options
anyr --help

# check authentication status (HTTP + gRPC)
anyr auth status
# authenticate with desktop and http endpoint
anyr auth login

# List spaces your user is authorized to access
anyr space list -t     # output as table (-t/--table)

# List Pages in space "Work"
anyr object list "Work" --type page -t

# List Files in a space (requires gRPC credentials)
anyr file list "Personal" -t

# Download/upload file bytes
# use `--dir DIR`  to set download dir, or `--file PATH` for destination file path
anyr file download <FILE_OBJECT_ID> --dir /tmp
anyr file upload "Personal" -f ./path/to/file.png

# Get chat messages from space "Chat"
anyr chat messages list "Chat" -t
# Post message
anyr chat messages send "Chat-" --text "hello world?"

Common options

These options apply to most commands.

Examples

List objects in a space

# List <ENTITY> in a space. (entities: object, member, property, template)
# anyr <ENTITY> list <SPACE_ID_OR_NAME>

# list objects in space 'Personal'
anyr object list "Personal" -t

# list types in space 'Personal'
anyr type list "Personal" -t

Search in space

# search space "Work" for tasks containing the text "customer"
anyr search --space "Work" --type Task --text customer -t

List tasks in space

space="Work" # specify space using name or id
for task in `anyr search --type Task --space $space --json | jq -r '.items[] | .id`; do
  data=$(anyr object get $space $task --json)
  status=$(jq -r '.properties[] | select (.key=="status") .select.name' <<< "$data")
  name=$(jq -r '.name' <<< "$data")
  # get created_date as YYYY-MM-DD
  created_date=$(jq -r '.properties[] | select (.key=="created_date") .date' <<< "$data" | sed 's/T.*$//')
  # generate formatted table with date, status, and name
  printf "%10s %-12s %s" $created_date $status $name
done

Find files

# list images in space Personal, larger than 1MB with a name containing "report"
anyr file list "Personal" --type image --size-gte 1048576 --name-contains report -t

# list pdf or docx files in space Personal
anyr file list "Personal" --ext-in pdf,docx -t

List items in query or collection

# list queries in space. "$space" can be id ("bafy...") or name ("Projects")
anyr search --type set --space $space -t
# list collections in the space
anyr search --type collection --space $space -t
# from above, get id of query or collection of interest, then
# list items in query or collection, in view "All"
anyr view objects --view All $space $query_or_collection_id -t

Get objects from a collection list or grid view

# show names of all tasks in space "Work", using view 'All'
anyr view objects --view All "Work" Task -t

# show columns: Name, Created By, and Status (note: column names are specified by property_key)
anyr view objects --view All "Work" Task --cols name,creator,status

# get tasks from view ByProject in json, with all properties
anyr view objects --view ByProject "Work" Task --json

If you have a list or grid formatted view, you can use view objects to list the view items by specifying the space name, list, and view.

  • Results are filtered and sorted by the criteria in the view.
  • View can be specified by the view id or view name.
  • The --json and --pretty format outputs include all properties of the objects.

Table listing features for view objects:

  • Table listing defaults to name column only. Specify columns in table output with --cols/--columns and a comma-separated list of property keys. Example --cols name,creator,created_date,status
  • Format dates with strftime format: --date-format or ANYTYPE_DATE_FORMAT, defaults to %Y-%m-%d %H:%M:%S.
  • Members names are displayed instead of member id.

Chat order ids

Chat message order ids are converted to lowercase hex before display in table-format output, to make them easier to read and type, while preserving lexicographic order. Any argument that accepts an order id also accepts the hex form. Example: the order id !!@, is displayed as 2121402c, and you can pass 2121402c back to commands that accept an order id.

Install

Release binaries are on github

Macos via Homebrew

brew install stevelr/tap/anyr

Linux (arm64/x86_64)

curl -fsSL https://github.com/stevelr/anytype/releases/latest/download/anyr-installer.sh | sh

Windows Powershell

irm https://github.com/stevelr/anytype/releases/latest/download/anyr-installer.ps1 | iex

Cargo

cargo install -p anyr

Build from source

Cargo

Requirements:

  • protoc (from the protobuf package) in your PATH. On macos, brew install protobuf
  • libgit2 in your library path.
cargo install -p anyr

Nix

nix build

Configure

Configuration can be set with command-line parameters or environment variables.

  • Url The default url is the desktop client http://127.0.0.1:31009. Override with --url or the environment variable ANYTYPE_URL.

  • Key Storage The default key storage method should work on most platforms. Options for overriding the defaults are described below in Key storage.

# use headless server and custom key path
anyr --url "http://127.0.0.1:31012" --keystore "file:path=$HOME/.config/anytype/apikeys.db" ARGS ...`

# custom endpoint url and key path in environment
export ANYTYPE_URL=http://127.0.0.1:31012
export ANYTYPE_KEYSTORE="file:path=$HOME/.config/anytype/apikeys.db"
anyr ARGS ...

Generating and saving credentials

  • Desktop: If the Anytype desktop app is running, type anyr auth login and the app will display a 4-digit code. Enter the code into the anyr prompt, and a key is generated and stored in the KeyStore.

  • Headless server: If you are using the headless cli server, start the server, run anytype auth apikey create anyr to generate and display a key, then either:

    • paste it into anyr auth set-http (reads from stdin), or
    • save it in a file and set the key file path as described in Key storage.

See anytype README.md for more info, and the helper script init-cli-keys.sh for generating and saving http and gRPC credentials.

Logging

Debug logging

RUST_LOG=debug anyr space list -t

Log HTTP requests and responses:

RUST_LOG=warn,anytype::http_json=trace anyr space list -t

Testing

Python CLI tests expect the same environment variables as the API tests:

  • ANYTYPE_TEST_URL (or ANYTYPE_URL)
  • ANYTYPE_TEST_KEY_FILE (or ANYTYPE_KEY_FILE)
  • ANYTYPE_TEST_SPACE_ID
source .test-env
python tests/cli_commands.py

License

Apache License, Version 2.0