Post

finally landed it! Tap is your all-in-one sync tool for the Atmosphere: webhooks, backfill, filtering, signaling collections, no cbor/msts/signatures/cursors. this thing's got it all! give it a go and let me know what you think & if you run into any issues docs.bsky.app/blog/introdu...

docs.bsky.appIntroducing Tap: Repository Synchronization Made Simple | BlueskyJust about every app built on AT needs data from a repository at some point. For many use cases – feed generators, labelers, bots – streaming live data through a Relay or Jetstream works well. But som...

70 reposts398 likes

Questions after reading the introduction: Is TAP a mirroring tool? Does it keep all the data about the repos that you asked it for in its own database? Should you query that database directly or does it have a query API?

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

Hey, some first questions: - "id" is like seq in the firehose, right? (incrementing by 1?) - is there something like a "cursor" at all, I mean for the Tap, i.e. connecting to /channel passing the cursor of how far you got before disconnecting last time?

`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

- do I understand correctly that this is meant to have basically a single consumer (as opposed to jetstream having consumers processing copies of the same stream), so things like acks are tracked globally, not per connection?

- does the acks mode mean that the service sends one event and then waits until it gets an ack in response before sending another? or that it streams them normally, but if they aren't acked at whatever point later, they will be re-sent on next connect?

Looks cool! 👀 So this is basically meant to make it easier to build new apps like e.g. Leaflet (and possibly a full bsky AppView too), so you can let it handle some of the boilerplatey streaming/syncing work you'd need to otherwise do yourself, right?

Just how many terabytes for a full sync are we talking about here? Asking for a mate who definitely isn’t even thinking about a full sync, for the lols, maybe.

ah ok. honestly always found that repo layout confusing. i would never think to look for packages inside something called “cmd”. is that a Go convention? it’s nice there’s at least links from README into individual packages. need to add tap there so others can find it

So Tap implements things that aren’t described within the statusphere example, yeah? Any plans to update or include a separate example that uses Tap? Asking because of my current endeavor to actually learn things 🙃