# @pdsjs/blobs-fs ## 2.5.2 ## 2.5.1 ## 2.5.0 ## 2.4.3 ## 2.4.2 ## 2.4.1 ## 2.4.0 ### Patch Changes - 6b79149: Video-ready blob hosting. Blob uploads and downloads stream: `uploadBlob` hashes and stages bytes chunk by chunk instead of buffering the body, and `getBlob` answers byte ranges from a streamed read, so a 300 MB video fits through a Durable Object and seeks in a browser. The blob port gains optional `createWriter` and `getStream`; the fs, R2, S3 and Deno stores implement both, and each platform injects its native SHA-256. Drive stores a file as one blob of its own type when the store streams, takes large files across several requests through upload sessions, and offers a Link dialog with the blob ref any record can embed. The Worker serves public blobs through the edge cache, and a site's `/.blobs/` route serves ranges and now applies the same space-privacy filter as `getBlob`. A new `videos.mjs` example app is a gallery over the drive's videos. The node server accepts a `blobUploadLimit` option (`PDS_BLOB_UPLOAD_LIMIT` in the example), which Bluesky video posting needs. ## 2.3.0 ## 2.2.0 ### Minor Changes - 224cb48: Scheduled backups, with a Backups page in the account UI. A backup is a snapshot in a new `BackupTargetPort` — a directory (`createFsBackupTarget`), an S3-compatible bucket (`createS3BackupTarget`), or on Cloudflare an R2 bucket bound as `BACKUPS`. Each snapshot holds the full signed repo CAR (the same bytes `com.atproto.sync.getRepo` serves) and a manifest, written last so an interrupted snapshot never counts; blobs are stored content-addressed at `blobs/` and shared across snapshots, so a run only uploads what the target doesn't already hold. Retention keeps the newest N snapshots and reaps blobs no kept manifest references. Scheduling rides the maintenance tick each runtime already had: the hourly interval on Node and Deno, and the Durable Object alarm on Cloudflare, which now fires hourly to match. Settings and run history live in the existing `metadata` table as one JSON document, read through new optional `getBackupState`/`setBackupState` methods on `ActorStoragePort`. The signing key stays out of snapshots unless opted in: entering a passphrase on the Backups page seals a copy under PBKDF2 → AES-256-GCM (`key.enc` in each snapshot), and the page warns when the key has rotated since it was sealed. The page also offers one-click manual runs, run history, schedule and retention settings, and a direct `.car` download that works even with no target configured. ## 2.1.0 ## 2.0.0 ## 1.0.2 ## 1.0.1 ## 1.0.0