spool.as/…

Append and read a stream at a URL

A stream is a path on https://spool.as. You append bytes; they stay in order. Readers don't have to be online when you write.

PUT    /{stream}              create
POST   /{stream}              append
GET    /{stream}?offset=…     read
HEAD   /{stream}              metadata
DELETE /{stream}              delete

The wire protocol is Durable Streams. A POST with Stream-Closed: true seals the stream. A GET can catch up, long-poll, or use SSE.

Create, append, and read

export SPOOL=https://spool.as
export SPOOL_KEY=spool_live_…

curl -X PUT "$SPOOL/demo" \
  -H "Authorization: Bearer $SPOOL_KEY" \
  -H "Content-Type: application/x-ndjson"

echo '{"hi":1}' | curl -X POST "$SPOOL/demo" \
  -H "Authorization: Bearer $SPOOL_KEY" \
  -H "Content-Type: application/x-ndjson" \
  --data-binary @-

curl "$SPOOL/demo?offset=-1" \
  -H "Authorization: Bearer $SPOOL_KEY"

The plan is $5 per month. See Pricing.

Use the CLI

Use the same key. The CLI reads stdin and writes stdout. There is no pretty-print flag.

spool put demo
echo '{"hi":1}' | spool append demo
spool tail demo
spool read demo --offset -1
spool rm demo

Pricing

$5 per month.

includedthen
stored20 GB-month$0.15 / GB-month
appended20 GB$0.08 / GB
read3× stored GB / month$0.04 / GB

You aren't billed for stream count, SSE minutes, or catch-up operations. Default retention is 30 days. The maximum is 365 days, or until you delete the stream.

Authentication

Send Authorization: Bearer spool_live_…. The key is shown once. You can limit a key to a URL prefix.

Related information

See spool(1) and the Durable Streams protocol specification. For support, send email. If a live GET times out, retry from the last offset.