__ __
/\ \__ /\ \__
__ \ \ ,_\ _____ _ __ ___\ \ ,_\ ___
/'__'\ \ \ \/ /\ '__'\/\''__\/ __'\ \ \/ / __'\
/\ \L\.\_\ \ \_\ \ \L\ \ \ \//\ \L\ \ \ \_/\ \L\ \
\ \__/.\_\\ \__\\ \ ,__/\ \_\\ \____/\ \__\ \____/
\/__/\/_/ \/__/ \ \ \/ \/_/ \/___/ \/__/\/___/
\ \_\
\/_/
This is an implementation of an ATProto PDS, built with Axum and Atrium. Heavily inspired by David Buchanan's millipds.
This PDS implementation uses a SQLite database to store private account information and file storage to store canonical user data.
If you want to see this PDS in action, there is a live account hosted by this PDS at @test.justinm.one!
Warning
This PDS is undergoing heavy development. Do NOT use this to host your primary account or any important data!
cargo run
* migrations/ - SQLite database migrations
* src/
* endpoints/ - ATProto API endpoints
* auth.rs - Authentication primitives
* config.rs - Application configuration
* did.rs - Decentralized Identifier helpers
* error.rs - Axum error helpers
* firehose.rs - ATProto firehose producer
* main.rs - Main entrypoint
* metrics.rs - Definitions for telemetry instruments
* plc.rs - Functionality to access the Public Ledger of Credentials
* storage.rs - Helpers to access user repository storage
- Authentication
- OAuth support
- Storage backend abstractions
- Azure blob storage backend
- Backblaze b2(?)
- Telemetry
- Metrics (counters/gauges/etc)
- Exporters for common backends (Prometheus/etc)
- Service proxying
- UG /xrpc/_health (undocumented, but impl by reference PDS)
- com.atproto.identity
- AP /xrpc/com.atproto.identity.updateHandle
- AP /xrpc/com.atproto.identity.requestPlcOperationSignature
- AP /xrpc/com.atproto.identity.signPlcOperation
- UG /xrpc/com.atproto.identity.resolveHandle
- com.atproto.server
- UG /xrpc/com.atproto.server.describeServer
- UP /xrpc/com.atproto.server.createAccount
- AP /xrpc/com.atproto.server.createInviteCode
- UP /xrpc/com.atproto.server.createSession
- AG /xrpc/com.atproto.server.getServiceAuth
- AG /xrpc/com.atproto.server.getSession
- com.atproto.repo
- AP /xrpc/com.atproto.repo.applyWrites
- AP /xrpc/com.atproto.repo.createRecord
- AP /xrpc/com.atproto.repo.putRecord
- AP /xrpc/com.atproto.repo.deleteRecord
- UG /xrpc/com.atproto.repo.describeRepo
- UG /xrpc/com.atproto.repo.getRecord
- UG /xrpc/com.atproto.repo.listRecords
- AP /xrpc/com.atproto.repo.uploadBlob
- com.atproto.sync
- UG /xrpc/com.atproto.sync.getBlob
- UG /xrpc/com.atproto.sync.getBlocks
- UG /xrpc/com.atproto.sync.getLatestCommit
- UG /xrpc/com.atproto.sync.getRecord
- UG /xrpc/com.atproto.sync.getRepoStatus
- UG /xrpc/com.atproto.sync.getRepo
- UG /xrpc/com.atproto.sync.listBlobs
- UG /xrpc/com.atproto.sync.listRepos
- UG /xrpc/com.atproto.sync.subscribeRepos
az group create --name "webapp" --location southcentralus
az deployment group create --resource-group "webapp" --template-file .\deployment.bicep --parameters webAppName=testapp
az acr login --name <insert name of ACR resource here>
docker build -t <ACR>.azurecr.io/testapp:latest .
docker push <ACR>.azurecr.io/testapp:latest