@goldlapel/drizzle
v0.1.0-rc25
Published
Gold Lapel plugin for Drizzle ORM — automatic Postgres query optimization
Maintainers
Readme
@goldlapel/drizzle
Gold Lapel plugin for Drizzle ORM — automatic Postgres query optimization with one line of code. Includes L1 native cache — an in-process cache that serves repeated reads in microseconds with no TCP round-trip.
Install
npm install @goldlapel/goldlapel @goldlapel/drizzleQuick start
Option A: drizzle() (node-postgres driver)
Returns a wired Drizzle DB instance with the connection routed through Gold Lapel and L1 native cache active:
import { drizzle } from '@goldlapel/drizzle'
const db = await drizzle()
const users = await db.select().from(usersTable)Pass Drizzle options like schema and logger directly:
import { drizzle } from '@goldlapel/drizzle'
import * as schema from './schema.js'
const db = await drizzle({ schema, logger: true })Option B: init() (any Drizzle driver)
Rewrites DATABASE_URL to point at the proxy. Works with any Drizzle driver — node-postgres, postgres.js, Neon, etc.:
import { init } from '@goldlapel/drizzle'
await init()
// Now create Drizzle as usual — it reads the rewritten DATABASE_URL
import { drizzle } from 'drizzle-orm/node-postgres'
const db = drizzle(process.env.DATABASE_URL)Driver note
drizzle() uses drizzle-orm/node-postgres under the hood and includes L1 native cache automatically. If you use a different driver (postgres.js, Neon serverless, etc.), use init() instead — it rewrites DATABASE_URL and works with any driver, but does not include L1 cache (the proxy still handles all server-side optimizations).
Options
Both drizzle() and init() accept an options object:
| Option | Description |
|--------|-------------|
| url | Upstream Postgres URL. Defaults to process.env.DATABASE_URL. |
| port | Port for the Gold Lapel proxy. Defaults to 7932. |
| config | Config object passed to Gold Lapel (see below). |
| extraArgs | Array of extra CLI args passed to the Gold Lapel binary. |
drizzle() also accepts L1 cache options:
| Option | Description |
|--------|-------------|
| invalidationPort | Port for cache invalidation. Defaults to proxy port + 2 (7934). |
| nativeCache | Set to false to disable L1 native cache. Enabled by default. |
drizzle() forwards all other options to drizzle-orm/node-postgres:
const db = await drizzle({
url: 'postgresql://user:pass@host:5432/mydb',
port: 9000,
config: { mode: 'waiter', poolSize: 30 },
invalidationPort: 9002,
schema,
logger: true,
})To disable L1 cache (proxy-only mode):
const db = await drizzle({ nativeCache: false, schema })Config
The config object lets you tune Gold Lapel without CLI flags. Keys use camelCase:
const db = await drizzle({
config: {
mode: 'waiter',
poolSize: 30,
disableN1: true,
refreshIntervalSecs: 120,
},
schema,
})Any key accepted by the Gold Lapel CLI works here — see the Gold Lapel docs for the full list. Boolean flags like disableN1 take true/false; everything else takes a string or number.
Re-exports
For convenience, @goldlapel/drizzle re-exports from @goldlapel/goldlapel:
import { start, stop, proxyUrl, GoldLapel, wrap, NativeCache } from '@goldlapel/drizzle'