Skip to main content
ClaudeWave
Skill169 repo starsupdated 29d ago

cloudflare-hyperdrive

Cloudflare Hyperdrive for Workers-to-database connections with pooling and caching. Use for PostgreSQL/MySQL, Drizzle/Prisma, or encountering pool errors, TLS issues, connection refused.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/secondsky/claude-skills /tmp/cloudflare-hyperdrive && cp -r /tmp/cloudflare-hyperdrive/plugins/cloudflare-hyperdrive/skills/cloudflare-hyperdrive ~/.claude/skills/cloudflare-hyperdrive
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# Cloudflare Hyperdrive

**Status**: Production Ready ✅ | **Last Verified**: 2025-11-18

---

## What Is Hyperdrive?

Connect Workers to existing PostgreSQL/MySQL databases:
- Global connection pooling
- Query caching
- Reduced latency
- Works with node-postgres, postgres.js, mysql2

---

## Quick Start (5 Minutes)

### 1. Create Hyperdrive Config

```bash
bunx wrangler hyperdrive create my-db \
  --connection-string="postgres://user:pass@host:5432/database"
```

Save the `id`!

### 2. Configure Binding

```jsonc
{
  "name": "my-worker",
  "main": "src/index.ts",
  "compatibility_date": "2024-09-23",
  "compatibility_flags": ["nodejs_compat"],  // REQUIRED!
  "hyperdrive": [
    {
      "binding": "HYPERDRIVE",
      "id": "<ID_FROM_STEP_1>"
    }
  ]
}
```

### 3. Install Driver

```bash
bun add pg  # or postgres, or mysql2
```

### 4. Query Database

```typescript
import { Client } from 'pg';

export default {
  async fetch(request, env, ctx) {
    const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
    await client.connect();

    const result = await client.query('SELECT * FROM users LIMIT 10');
    await client.end();

    return Response.json(result.rows);
  }
};
```

**Load `references/setup-guide.md` for complete walkthrough.**

---

## Critical Rules

### Always Do ✅

1. **Enable nodejs_compat** flag (required!)
2. **Use env.HYPERDRIVE.connectionString** (not original DB string)
3. **Close connections** after queries
4. **Handle errors** explicitly
5. **Use connection pooling** (built-in)
6. **Test locally** with wrangler dev
7. **Monitor query performance**
8. **Use prepared statements**
9. **Enable query caching** (automatic)
10. **Secure connection strings** (use secrets)

### Never Do ❌

1. **Never skip nodejs_compat** (drivers won't work)
2. **Never use original DB connection string** in Workers
3. **Never leave connections open** (pool exhaustion)
4. **Never skip error handling** (DB can fail)
5. **Never hardcode credentials** in code
6. **Never exceed connection limits**
7. **Never use eval/Function** (blocked in Workers)
8. **Never skip TLS** for production DBs
9. **Never use blocking queries** (Worker timeout)
10. **Never expose DB errors** to users

---

## Database Drivers

### PostgreSQL (node-postgres)

```typescript
import { Client } from 'pg';

const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();
const result = await client.query('SELECT * FROM users');
await client.end();
```

### PostgreSQL (postgres.js)

```typescript
import postgres from 'postgres';

const sql = postgres(env.HYPERDRIVE.connectionString);
const users = await sql`SELECT * FROM users`;
```

### MySQL

```typescript
import mysql from 'mysql2/promise';

const connection = await mysql.createConnection(env.HYPERDRIVE.connectionString);
const [rows] = await connection.execute('SELECT * FROM users');
await connection.end();
```

---

## With Drizzle ORM

```typescript
import { drizzle } from 'drizzle-orm/node-postgres';
import { Client } from 'pg';

const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();

const db = drizzle(client);
const users = await db.select().from(usersTable);

await client.end();
```

---

## Common Use Cases

### Use Case 1: Read-Only Queries

```typescript
export default {
  async fetch(request, env, ctx) {
    const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
    await client.connect();

    const users = await client.query('SELECT * FROM users WHERE active = true');
    await client.end();

    return Response.json(users.rows);
  }
};
```

### Use Case 2: Parameterized Queries

```typescript
const userId = new URL(request.url).searchParams.get('id');

const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();

const result = await client.query(
  'SELECT * FROM users WHERE id = $1',
  [userId]
);

await client.end();
```

### Use Case 3: Transactions

```typescript
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();

try {
  await client.query('BEGIN');
  await client.query('UPDATE accounts SET balance = balance - 100 WHERE id = $1', [1]);
  await client.query('UPDATE accounts SET balance = balance + 100 WHERE id = $1', [2]);
  await client.query('COMMIT');
} catch (e) {
  await client.query('ROLLBACK');
  throw e;
} finally {
  await client.end();
}
```

---

## Supported Databases

**PostgreSQL:**
- Amazon RDS
- Amazon Aurora
- Neon
- Supabase
- Railway
- Render
- DigitalOcean
- Any PostgreSQL 11+

**MySQL:**
- Amazon RDS
- Amazon Aurora
- PlanetScale
- Any MySQL 5.7+

---

## Official Documentation

- **Hyperdrive Overview**: https://developers.cloudflare.com/hyperdrive/
- **Get Started**: https://developers.cloudflare.com/hyperdrive/get-started/
- **Configuration**: https://developers.cloudflare.com/hyperdrive/configuration/

---

## Bundled Resources

**References** (`references/`):
- `setup-guide.md` - Complete setup walkthrough (create config, bind, query)
- `connection-pooling.md` - Connection pool configuration and best practices
- `query-caching.md` - Query caching strategies and optimization
- `drizzle-integration.md` - Drizzle ORM integration patterns
- `prisma-integration.md` - Prisma ORM integration patterns
- `supported-databases.md` - Complete list of supported PostgreSQL and MySQL providers
- `tls-ssl-setup.md` - TLS/SSL configuration for secure connections
- `troubleshooting.md` - Common issues and solutions
- `wrangler-commands.md` - Complete wrangler CLI commands for Hyperdrive

**Templates** (`templates/`):
- `postgres-basic.ts` - Basic PostgreSQL with node-postgres
- `postgres-js.ts` - PostgreSQL with postgres.js driver
- `postgres-pool.ts` - PostgreSQL with connection pooling
- `mysql2-basic.ts` - MySQL with mysql2 driver
- `drizzle-postgres.ts` - Drizzle ORM with PostgreSQL
- `drizzle-mysql.
access-control-rbacSkill

Role-based access control (RBAC) with permissions and policies. Use for admin dashboards, enterprise access, multi-tenant apps, fine-grained authorization, or encountering permission hierarchies, role inheritance, policy conflicts.

aceternity-uiSkill

100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or encountering animation, shadcn CLI integration errors.

ai-elements-chatbotSkill

shadcn/ui AI chat components for conversational interfaces. Use for streaming chat, tool/function displays, reasoning visualization, or encountering Next.js App Router setup, Tailwind v4 integration, AI SDK v5 migration errors.

ai-sdk-coreSkill

Vercel AI SDK v5 for backend AI (text generation, structured output, tools, agents). Multi-provider. Use for server-side AI or encountering AI_APICallError, AI_NoObjectGeneratedError, streaming failures.

ai-sdk-uiSkill

Vercel AI SDK v5 React hooks (useChat, useCompletion, useObject) for AI chat interfaces. Use for React/Next.js AI apps or encountering parse stream errors, no response, streaming issues.

api-authenticationSkill

Secure API authentication with JWT, OAuth 2.0, API keys. Use for authentication systems, third-party integrations, service-to-service communication, or encountering token management, security headers, auth flow errors.

api-changelog-versioningSkill

Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use when managing API versions, communicating breaking changes, or creating upgrade guides.

api-contract-testingSkill

Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing microservices communication, preventing breaking changes, or validating OpenAPI specifications.