general-purpose cli for atproto record operations
Project description
pdsx
general-purpose cli for atproto record operations
installation
uv add pdsx
# or
uvx pdsx --help
quick start
important: flags like -r, --handle, --password go BEFORE the command (ls, get, etc.)
# read anyone's posts (no auth needed)
uvx pdsx -r zzstoatzz.io ls app.bsky.feed.post -o json | jq -r '.[].text'
# update your bio (requires auth)
export ATPROTO_HANDLE=your.handle ATPROTO_PASSWORD=your-app-password
uvx pdsx edit app.bsky.actor.profile/self description='new bio'
features
- crud operations for atproto records (list, get, create, update, delete)
- blob upload: upload images, videos, and other binary content
- cursor pagination: paginate through large collections
- optional auth: reads with
--repoflag don't require authentication - shorthand URIs: use
app.bsky.feed.post/abc123when authenticated - multiple output formats: compact (default), json, yaml, table
- unix-style aliases:
ls,cat,rm,edit,touch/add - jq-friendly json output
- python 3.10+, type-safe
usage examples
read operations (no auth with -r)
# list records from any repo (note: -r goes BEFORE ls)
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 5 -o json
# read someone's bio
pdsx -r zzstoatzz.io ls app.bsky.actor.profile -o json | jq -r '.[0].description'
pagination
# get first page (note: -r before ls, --cursor after)
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 10
# output includes cursor if more pages exist:
# next page cursor: 3lyqmkpiprs2w
# get next page
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 10 --cursor 3lyqmkpiprs2w
blob upload (auth required)
# upload an image
pdsx upload-blob ./photo.jpg
# returns blob reference like:
# {
# "$type": "blob",
# "ref": {"$link": "bafkreif..."},
# "mimeType": "image/jpeg",
# "size": 123456
# }
# use blob reference in records (e.g., create post with image)
# copy the blob reference output and use it in your record creation
write operations (auth required)
# update using shorthand URI
pdsx edit app.bsky.actor.profile/self description='new bio'
# delete using shorthand URI
pdsx rm app.bsky.feed.post/abc123
# create a record
pdsx create app.bsky.feed.like subject='at://...' createdAt='2024-01-01T00:00:00Z'
note: when authenticated, use shorthand URIs (collection/rkey) instead of full AT-URIs (at://did:plc:.../collection/rkey)
output formats
compact (default)
app.bsky.feed.post (3 records)
3m4ryxwq5dt2i: {"created_at":"2025-11-04T07:25:17.061883+00:00","text":"..."}
json
pdsx ls app.bsky.feed.post -o json | jq '.[].text'
table
pdsx ls app.bsky.feed.post -o table
development
git clone https://github.com/zzstoatzz/pdsx
cd pdsx
uv sync
uv run pytest
uv run ty check
license
mit
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pdsx-0.0.1a6.tar.gz.
File metadata
- Download URL: pdsx-0.0.1a6.tar.gz
- Upload date:
- Size: 91.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11b2f2d964ef45f52da3abd6b88bae35673df5cf1828630dd448e92df34238dc
|
|
| MD5 |
ba8efcb43241af12f2c7c6e80573cd04
|
|
| BLAKE2b-256 |
d7e19ba3bffa4666c8441a5cab7d4f3a4e32478690eb7a9dc88d4ec857e5fa45
|
File details
Details for the file pdsx-0.0.1a6-py3-none-any.whl.
File metadata
- Download URL: pdsx-0.0.1a6-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab283cacb38f449300254670d832552bbd6ec7235f21661cc085109570c1b5b8
|
|
| MD5 |
8e479a69002e55d63473e3ff0523918c
|
|
| BLAKE2b-256 |
b220a3f727866d2cab53310fce40dce3ffa349364e80f9200a57d97ce0334b34
|