AD
Boost Your Brand on BlueSky—Exclusive banner space to amplify your reach within the BlueSky community.
BSkyInfo LogoBskyInfo
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryArticlesGuidesGlossaryBluesky SDKsSponsor
Submit
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryGuidesGlossaryArticlesBluesky SDKsSponsorSubmit
  1. SDKs
  2. /Python
  3. /picopds
DavidBuchanan314

picopds

A Python SDK for Bluesky and AT Protocol by DavidBuchanan314

A minimum viable atproto PDS for protocol experimentation purposes

GitHub Stats

67stars
3forks
1contributors
0open issues

Dates

Created:June 16, 2023
Last updated:May 15, 2025

README

The following content is from picopds's GitHub repository. All rights reserved by the original author.

[!NOTE]
My current focus is on millipds, a more "production grade" rewrite of picopds. picopds is no longer maintained (not that it ever really was in the first place, lol).

picopds

A minimum viable atproto PDS for protocol experimentation purposes

It's designed to be a single-user instance (i.e. it only hosts a single repo). This is a hardcoded constraint right now but I might make multiple repos technically possible at some point.

NOTE: This is experimental software, it may explode and eat all your data, etc. etc.

What works:

  • Creating a new DID and publishing it.
  • Creating new records (making posts, liking, replying, following, etc.)
  • Deleting records (post deletion, unlikes, unfollows, etc.)
  • Attaching blobs (e.g. images)
  • Editing records (e.g. editing bio).
  • Federated firehose.
  • AppView proxying for most bsky endpoints (still missing some)

What doesn't work yet:

  • Updating records works but is subtly incorrect (e.g. it will leak blob references)
  • swapCommit/swapRecord options for repo ops (they're silently ignored).
  • Firehose cursoring.
  • Handle firehose "too big" conditions.
  • No Lexicon validation (the client is assumed to be well-behaved!)
  • A lot of error/unhappy-path handling (and sometimes we signal errors in non-standard ways).
  • JWT refresh tokens
  • Various security considerations (e.g. password hashing)
  • Many many many other things...

TODO:

  • Fix aforementioned non-working things
  • Figure out how to garbage-collect MST blocks
  • Don't hold full MST state in memory, load blocks from DB on-demand
  • Put blobs larger than some threshold in the filesystem, not in sqlite
  • Tests
  • Docs

Planned Extended Features:

  • Design and implement a protocol for client-signed commits (so the server can avoid holding signing keys, and enabling the use of user-local HSMs)

  • A read-only web interface for external sharing of posts.

Usage:

  1. Copy config.py.example to config.py, and edit it.

  2. Run python3 create_identity.py

  3. Update config.py with the new DID value you just generated

  4. Create an _atproto TXT DNS record that points your handle domain name to your DID (or alternatively use the HTTP method) (more info here).

  5. Run pds.py, and make the web server publicly accessible somewhere (I'm using an nginx reverse proxy). You might want to create a systemd unit, or docker container, or something like that (I wouldn't know, I suck at devops/sysadmin).

  6. Run request_crawl.py to inform the PDS that we exist. (Maybe I'll make this automatic at some point in the future).

  7. Log in with a client (the official https://bsky.app works) and make a post, and the BGS should see it!

Topics

atpatprotoatproto-pdsatprotocolpds

Related SDKs

dannguyendancow-bluesky-fun-api-tool

Just having fun with python and Bluesky's AT Protocol. Trying to build a simple CLI and enough of SDK to easily explore and collect my own Bluesky data

1•Python
TahomaSoftSaxeBlueskyPython

A small python library to post basic text and media to bsky.app via atproto's xrpc API.

1•Python
Gorcenskiskeeter-deleter

A script for auto-deleting Bluesky posts

65•Python
Zetaphorbsky-altometer

A site that measures the current percentage of Bluesky posts missing alt text

7•Python
snarfedbridgy-fed

🌉 A bridge between decentralized social networks

1002•Python
snarfedgranary

💬 The social web translator

485•Python

Resources

GitHub Repository

License

MIT

Author

DavidBuchanan314
DavidBuchanan314

Activity

Last commit: May 15, 2025
Commit frequency: Unknown

Our Sponsors

Your Brand Here!

50K+ engaged viewers every month

Limited spots available!

📧 Contact us via email🦋 Contact us on Bluesky
BSkyInfo LogoBskyInfo

The Most Comprehensive Bluesky Tools Directory

Stay updated with the latest Bluesky tools and ecosystem news 🦋

Bluesky butterfly logo
Quick LinksSubmit a ToolSponsorAboutLegal Information
ToolsFeed DirectoryLabeler DirectorySchedulingAnalyticsAll ToolsCategoriesCollectionsTags
ResourcesArticlesBluesky GuidesBluesky GlossaryBluesky SDKsBluesky ResourcesSkyRaffleMeida Coverage
Our ProductsRaffleBlueAiTeach ToolsLaiewAI affiliate listFirsto

This website may contain affiliate links

© 2025 BskyInfo. All rights reserved.