---
title: "S3-compatible log storage"
description: "Store Blyp logs in AWS S3, Cloudflare R2, or MinIO with compressed batches, bounded delivery, and optional SQLite recovery. Core v0.1.35 is published and verified on npm."
canonical_url: "https://www.blyp.dev/docs/changelog/2026-10-21"
markdown_url: "https://www.blyp.dev/docs/changelog/2026-10-21.md"
last_updated: "1970-01-01"
x_farming_labs_generated_preamble: true
---

# S3-compatible log storage
URL: /docs/changelog/2026-10-21
LLM index: /llms.txt
Description: Store Blyp logs in AWS S3, Cloudflare R2, or MinIO with compressed batches, bounded delivery, and optional SQLite recovery. Core v0.1.35 is published and verified on npm.

## @blyp/core v0.1.35

Core v0.1.35 is published and verified on [npm](https://www.npmjs.com/package/@blyp/core/v/0.1.35). The new S3 integration stores logs in your own AWS S3, Cloudflare R2, or MinIO bucket, and CLI v0.1.57 adds Studio support for reading them.

### Your bucket as a primary destination

Set `destination: "s3"` to use object storage alongside Blyp's existing file and database destination options. Outbound connectors can continue forwarding the same logs to observability backends.

- **Compressed batches:** Redacted records are stored as immutable gzip NDJSON objects, partitioned by UTC event hour. By default, a batch seals after 30 seconds, 1 MiB of decoded data, or 5,000 records.
- **Bounded delivery:** Queue limits, request timeouts, and retries with exponential backoff keep resource use bounded. Conditional writes reuse the same object key and payload so an ambiguous successful upload can be retried safely.
- **Optional restart recovery:** Use SQLite buffering on persistent storage to recover committed records and pending batches after a restart. Memory buffering remains the default.
- **Operational helpers:** `@blyp/core/s3` exports configuration and format helpers, plus `getS3SpoolStatus()` and `retryS3Spool()` for inspecting and recovering the persistent spool.

### Read stored logs in Studio

With CLI v0.1.57, open the project's S3 configuration or point Studio directly at an `s3://` source. Select a time range and choose **Load logs** to begin reading. Each load has explicit download, request, record, and decoded-data limits; results are marked partial when an allowance is reached, and **Load more** continues the read.

Charts, search, details, and AI context share the loaded snapshot. Provider credentials stay on the server. Studio reads Blyp's versioned object format; it does not discover arbitrary NDJSON files in a bucket.

### Upgrade and setup

```bash
bun add @blyp/core@0.1.35 @aws-sdk/client-s3
```

```ts
// blyp.config.ts
import { defineConfig } from "@blyp/core/config";

export default defineConfig({
  destination: "s3",
  s3: {
    bucket: "production-logs",
    prefix: "orders/production",
    region: "eu-west-1",
    delivery: { buffer: "memory" },
  },
});
```

The sink runs on Node.js 20+ or Bun and uses the AWS SDK's server-side credential chain. SQLite buffering additionally requires Bun SQLite or a Node runtime with `node:sqlite`. In serverless handlers, await `logger.flush({ timeoutMs: ... })` before the runtime freezes or exits; memory buffering cannot recover unsent data after process exit.

### Release validation

The upstream release reports 537 passing tests, passing type checks and builds, packed ESM/CJS connector and Eve checks, and passing production dependency audits. Local MinIO write/read validation passed. Hosted AWS and R2 validation remains unavailable; npm publication does not imply hosted-provider validation.

[Read the S3 setup guide](/docs/s3) or [view the release on GitHub](https://github.com/Blyphq/blyp/releases/tag/v0.1.35).

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
Docs-scoped sitemap: [/docs/sitemap.md](/docs/sitemap.md).
Well-known sitemap: [/.well-known/sitemap.md](/.well-known/sitemap.md).
