at protocol indexer with flexible filtering, xrpc queries, and a cursor-backed event stream, built on fjall
at-protocol atproto indexer rust fjall

[docs] clarify backfill comparison in readme vs tap

ptr.pet 9835bcb1 3e6b5e16

verified
+3 -3
+3 -3
README.md
··· 14 15 | aspect | `tap` (`/channel`) | `hydrant` (`/stream`) | 16 | :--- | :--- | :--- | 17 - | distribution | sharded work queue: events are load-balanced across connected clients. If 5 clients connect, each receives ~20% of events. | broadcast: every connected client receives a full copy of the event stream. If 5 clients connect, all 5 receive 100% of events. | 18 - | cursors | server-managed: clients ACK messages. The server tracks progress and redelivers unacked messages. | client-managed: client provides `?cursor=123`. The server streams from that point. | 19 - | backfill | integrated queue: backfill events are mixed into the live queue and prioritized by the server. | unified log: backfill simply inserts "historical" events (`live: false`) into the global event log. streaming is just reading this log sequentially. | 20 | event types | `record`, `identity` (includes status) | `record`, `identity` (handle), `account` (status) | 21 | persistence | **full**: all events are stored and replayable. | **hybrid**: `record` events are persisted/replayable. `identity`/`account` are ephemeral/live-only. | 22
··· 14 15 | aspect | `tap` (`/channel`) | `hydrant` (`/stream`) | 16 | :--- | :--- | :--- | 17 + | distribution | sharded work queue: events are load-balanced across connected clients. If 5 clients connect, each receives ~20% of events. | broadcast: every connected client receives a full copy of the event stream. if 5 clients connect, all 5 receive 100% of events. | 18 + | cursors | server-managed: clients ACK messages. the server tracks progress and redelivers unacked messages. | client-managed: client provides `?cursor=123`. the server streams from that point. | 19 + | backfill | backfill events are mixed into the live queue and prioritized (per-repo, acting as synchronization barrier) by the server. | backfill simply inserts historical events (`live: false`) into the global event log. streaming is just reading this log sequentially. synchronization is the same as tap, `live: true` vs `live: false`. | 20 | event types | `record`, `identity` (includes status) | `record`, `identity` (handle), `account` (status) | 21 | persistence | **full**: all events are stored and replayable. | **hybrid**: `record` events are persisted/replayable. `identity`/`account` are ephemeral/live-only. | 22