daniel 🫠
banner
dholms.at
daniel 🫠
@dholms.at
dreaming of protocol level sovereignty

bsky team 🌅
"connect with your indelible stain" is pure poetry
December 18, 2025 at 11:14 PM
Reposted by daniel 🫠
I knew a protocol would be cool bro I told you bro
December 18, 2025 at 10:44 PM
tap is more robust at sync and flexible for different backends/usecases.

quickslice is "everything-included" in a single container - making it less flexible but much simpler to quickly prototype or stand up an application
December 15, 2025 at 11:59 PM
not quite. quickslice has a broader focus - sync, oauth, schemas, & a graphql api. tap is just for sync.

you could imagine a future version of quickslice relying on or incorporating tap instead of the current solution which is to be downstream of jetstream
December 15, 2025 at 11:59 PM
no, i should probably add a section on that.
the main things are: run it on postgres, increase outbox & resync parallelism (config vars), use multiple websocket consumers

if you connect multiple websocket consumers, it will transparently shard the outbox across them
December 15, 2025 at 4:32 PM
ah yeah it needs to have it hard-coded. i should add an introspection route for checking the config of tap
December 15, 2025 at 4:29 PM
check out the "per-repo ordering rules" at the bottom of the README

acks will ensure ordering for live events on a per-repo basis

github.com/bluesky-soci...
github.com
December 15, 2025 at 4:28 PM
yeah exactly single consumer. if you connect more than one consumer, it will transparently shard the output
December 15, 2025 at 4:26 PM
`id` does increment by 1 but you shouldn't treat it as such. just an opaque identifier for the event

instead of cursors, tap uses "acks" which are on a per-repo basis rather than total ordering. moves responsibility for durability to producer (tap) instead of consumer
December 15, 2025 at 4:25 PM
yes
December 12, 2025 at 10:40 PM
in depends what type of database you're putting it in & what sort of indexes you have on it. i'd estimate ~10TB
December 12, 2025 at 9:45 PM
yes totally! we want to revamp the statusphere example with Tap & the new lexicon SDK
December 12, 2025 at 9:03 PM
yeah it doesn't store the full repo, it stores metadata about it

and you can filter it down to only certain collections with --collection-filters

that will also decrease the amount of metadata you need to store
December 12, 2025 at 8:19 PM
it keeps metadata about the repos that you synced. but it sits between the Atmosphere network & your application. It hands off all the records to your application so you can put them into a database however you like
December 12, 2025 at 8:06 PM
yup exactly! and especially if there's already data out in the network that you need to backfill
December 12, 2025 at 7:49 PM
hmm yeah that shouldn't be bad to add

it'll require doing full enumeration for every collection, but that's probably not the end of the world
December 12, 2025 at 7:35 PM
yeah one thing i'm really excited about is that this makes it easy to define the network boundary for your small world appview

you can tell it exactly which repos you want to sync & update that set dynamically
December 12, 2025 at 7:33 PM
after a successful ack? no

but if Tap crashes and doesn't get the ack or if the event times out (default is 60s) then it gets redelivered
December 12, 2025 at 7:28 PM
this is a fully sync1.1 compliant sync consumer 👌
December 12, 2025 at 7:24 PM
I was thinking of you when I put together the Railway deploy doc. I want you to run it in webhook mode on there and lmk what you think!
December 12, 2025 at 7:23 PM