This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
backendcritical PriorityID: bun-sqlite-wal-s3-streaming-standard

Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard

Mandates production configuration for Bun 1.2's native bun:sqlite engine using Write-Ahead Logging (WAL), busy timeout resiliency, and zero-copy iteration. Enforces direct kernel-level streaming for S3 native storage via Bun.s3 without intermediate heap memory buffering.

Prohibited Anti-Pattern: Blocking In-Memory SQLite Contention & Heap-Exhausting S3 Buffering

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard - Mandates production configuration for Bun 1.2's native bun:sqlite engine using Write-Ahead Logging (WAL), busy timeout resiliency, and zero-copy iteration. Enforces direct kernel-level streaming for S3 native storage via Bun.s3 without intermediate heap memory buffering.
globs: src/**/*.ts, src/db/**/*.ts, src/storage/**/*.ts
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/bun-sqlite-wal-s3-streaming-standard"
---

# Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard

> **Severity**: CRITICAL | **Category**: backend
> **Anti-Pattern Warning**: Blocking In-Memory SQLite Contention & Heap-Exhausting S3 Buffering

## System Constraints
You are a Principal Software Architect enforcing Bun 1.2 embedded SQLite WAL concurrency and S3 native storage invariants. Mandate strict PRAGMA configurations, zero-copy query execution, and streaming S3 I/O.

## Strict Guidelines
- Engineers MUST ALWAYS initialize `bun:sqlite` connections with `PRAGMA journal_mode = WAL;`, `PRAGMA synchronous = NORMAL;`, and `PRAGMA busy_timeout = 5000;` immediately upon opening.
- Engineers MUST NOT read or buffer entire S3 object payloads into memory via `await response.arrayBuffer()` or `Buffer.concat()`; always stream directly via Bun.s3 or standard `ReadableStream` pipelines.
- Code SHOULD use `query.values()` or `query.iterate()` instead of `query.all()` when executing high-throughput batch reads to eliminate redundant V8/JavaScript object key allocation overhead.
- Services MUST execute multi-statement database mutations inside `db.transaction()` closures to guarantee atomicity and optimize WAL write batches.
- Components NEVER instantiate S3 SDK clients (e.g., `@aws-sdk/client-s3`) when the native high-performance Bun 1.2 `S3Client` from `bun` is available.

## Bad vs Good Implementations
### Configuring bun:sqlite with WAL and Zero-Copy Iteration

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Default SQLite settings create a rollback journal that blocks readers during writes, leading to SQLITE_BUSY crashes under load. Calling .all() allocates JavaScript object wrappers with key names for every row, drastically increasing GC pressure.
```typescript
import { Database } from 'bun:sqlite';

// ANTI-PATTERN: Default rollback journal causes lock contention under concurrency.
// Unbounded query.all() allocates full object shapes for millions of rows.
const db = new Database('production.db');

export function fetchRecentEvents(limit: number) {
  const query = db.query('SELECT id, payload, created_at FROM events ORDER BY id DESC LIMIT ?');
  return query.all(limit); // Massive object allocation overhead
}
```

#### Production Standard (Correct)
> **Standard**: Enabling WAL mode alongside synchronous=NORMAL permits non-blocking concurrent reads while writes are ongoing. Setting a busy_timeout allows write queues to drain cleanly. Using query.values() returns lean positional tuples, bypassing object key instantiation.
```typescript
import { Database } from 'bun:sqlite';

// PRODUCTION INVARIANT: Enforce WAL, busy_timeout, and normal sync for concurrency.
const db = new Database('production.db');
db.run('PRAGMA journal_mode = WAL;');
db.run('PRAGMA synchronous = NORMAL;');
db.run('PRAGMA busy_timeout = 5000;');

const recentEventsStmt = db.query<
  [number, string, number],
  [number]
>('SELECT id, payload, created_at FROM events ORDER BY id DESC LIMIT ?');

export function fetchRecentEvents(limit: number): [number, string, number][] {
  // Zero-copy array tuples eliminate object property allocation
  return recentEventsStmt.values(limit);
}
```

### Native Bun.s3 Multipart Upload Streaming

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Awaiting arrayBuffer() loads the entire file into Bun's heap. If multiple uploads execute simultaneously or files exceed memory constraints, the process crashes via Out-Of-Memory (OOM).
```typescript
import { S3Client } from 'bun';

const client = new S3Client();

// ANTI-PATTERN: Ingesting whole stream into memory buffer before uploading to S3
export async function backupDatabaseToS3(req: Request) {
  const buffer = await req.arrayBuffer(); // Memory spike risking OOM on large payloads
  const file = client.file('backups/daily.db');
  await file.write(buffer);
  return new Response('Uploaded');
}
```

#### Production Standard (Correct)
> **Standard**: Leverages Bun.s3 file.writer() and streams the incoming request body directly to S3 via pipeTo. Backpressure is automatically maintained, and heap usage stays strictly flat regardless of file size.
```typescript
import { S3Client } from 'bun';

const client = new S3Client();

// PRODUCTION INVARIANT: Stream input directly to S3 writer without in-memory buffering
export async function backupDatabaseToS3(req: Request): Promise<Response> {
  if (!req.body) {
    return new Response('Missing request body', { status: 400 });
  }

  const s3File = client.file(`backups/${crypto.randomUUID()}.db`);
  const writer = s3File.writer({ retry: 3, queueSize: 4 });

  // Stream chunks directly from request to S3 without heap retention
  await req.body.pipeTo(writer);

  return new Response(JSON.stringify({ key: s3File.name }), {
    status: 201,
    headers: { 'Content-Type': 'application/json' }
  });
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard

Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard defines an industrial-grade behavioral standard for backend engineering. Mandates production configuration for Bun 1.2's native bun:sqlite engine using Write-Ahead Logging (WAL), busy timeout resiliency, and zero-copy iteration. Enforces direct kernel-level streaming for S3 native storage via Bun.s3 without intermediate heap memory buffering. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Blocking In-Memory SQLite Contention & Heap-Exhausting S3 Buffering Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftBlocking In-Memory SQLite Contention & Heap-Exhausting S3 BufferingCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS initialize `bun

Engineers MUST ALWAYS initialize `bun:sqlite` connections with `PRAGMA journal_mode = WAL;`, `PRAGMA synchronous = NORMAL;`, and `PRAGMA busy_timeout = 5000;` immediately upon opening.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT read or buffer entire S3 object payloads into memory via `await response.arrayBuffer()` or `Buffer.concat()`

Engineers MUST NOT read or buffer entire S3 object payloads into memory via `await response.arrayBuffer()` or `Buffer.concat()`; always stream directly via Bun.s3 or standard `ReadableStream` pipelines.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Code SHOULD use `query.values()` or `query.iterate()` instead of `query.all()` when executing high-throughput batch reads to eliminate redundant V8/JavaScript object key allocation overhead.

Code SHOULD use `query.values()` or `query.iterate()` instead of `query.all()` when executing high-throughput batch reads to eliminate redundant V8/JavaScript object key allocation overhead.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Services MUST execute multi-statement database mutations inside `db.transaction()` closures to guarantee atomicity and optimize WAL write batches.

Services MUST execute multi-statement database mutations inside `db.transaction()` closures to guarantee atomicity and optimize WAL write batches.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Components NEVER instantiate S3 SDK clients (e.g., `@aws-sdk/client-s3`) when the native high-performance Bun 1.2 `S3Client` from `bun` is available.

Components NEVER instantiate S3 SDK clients (e.g., `@aws-sdk/client-s3`) when the native high-performance Bun 1.2 `S3Client` from `bun` is available.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Bun 1.2 SQLite WAL Concurrency & S3 Zero-Copy Streaming Standard critical for AI coding assistants?

Mandates production configuration for Bun 1.2's native bun:sqlite engine using Write-Ahead Logging (WAL), busy timeout resiliency, and zero-copy iteration. Enforces direct kernel-level streaming for S3 native storage via Bun.s3 without intermediate heap memory buffering. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Blocking In-Memory SQLite Contention & Heap-Exhausting S3 Buffering) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

Bun