{"_id":"@middle-management/pglite-pg-adapter","_rev":"4-da32cc530832d59a9da514c083ad2bda","name":"@middle-management/pglite-pg-adapter","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@middle-management/pglite-pg-adapter","version":"0.0.1","keywords":["postgresql","pglite","pg","adapter","database","sql","typescript","embedded","sqlite","wasm"],"author":{"name":"Robert Sköld","email":"robert@middlemanagement.se"},"license":"MIT","_id":"@middle-management/pglite-pg-adapter@0.0.1","maintainers":[{"name":"slaskis","email":"robert@publicclass.se"}],"homepage":"https://github.com/middle-management/pglite-pg-adapter#readme","bugs":{"url":"https://github.com/middle-management/pglite-pg-adapter/issues"},"dist":{"shasum":"1b0d433535fc7ba9a2cf2ebd799dd72f7d9a089f","tarball":"https://registry.npmjs.org/@middle-management/pglite-pg-adapter/-/pglite-pg-adapter-0.0.1.tgz","fileCount":6,"integrity":"sha512-cvomMpuN8189m1mWY2tChr1giw+Gs1KJAGuF/lwf6wI/wQ6uzHyd2xMPnHWC1r+6cRbVxtYpDs744rZB7RkBxg==","signatures":[{"sig":"MEUCIH5hUJDBJDHsdCZaKDYViFsfb+p6P2WPAJZkYJIysP0bAiEAozWcknMbJfyXX3heudrgmnIYcw13DVUpfqd5L6Qqb74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51484},"jest":{"preset":"ts-jest","testTimeout":30000,"testEnvironment":"node"},"main":"dist/pg-adapter.js","types":"dist/pg-adapter.d.ts","engines":{"node":">=16.0.0"},"gitHead":"0c14eae8ee104ffabaa5296a925483d827acc1ce","scripts":{"dev":"tsx --watch examples/usage.ts","test":"NODE_OPTIONS='--experimental-vm-modules' jest","build":"tsc","example":"tsx examples/usage.ts","prepublishOnly":"npm run build && npm run test -- --testPathIgnorePatterns performance.test.ts"},"_npmUser":{"name":"slaskis","actor":{"name":"slaskis","type":"user","email":"robert@publicclass.se"},"email":"robert@publicclass.se"},"repository":{"url":"git+https://github.com/middle-management/pglite-pg-adapter.git","type":"git"},"_npmVersion":"10.7.0","description":"PostgreSQL pg package API adapter for @electric-sql/pglite","directories":{},"_nodeVersion":"18.20.3","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.6.0","ts-jest":"^29.1.0","@types/pg":"^8.10.0","typescript":"^5.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@electric-sql/pglite":"^0.3.0"},"peerDependencies":{"@electric-sql/pglite":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pglite-pg-adapter_0.0.1_1751617488015_0.27916377789777624","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@middle-management/pglite-pg-adapter","version":"0.0.2","keywords":["postgresql","pglite","pg","adapter","database","sql","typescript","embedded","sqlite","wasm"],"author":{"name":"Robert Sköld","email":"robert@middlemanagement.se"},"license":"MIT","_id":"@middle-management/pglite-pg-adapter@0.0.2","maintainers":[{"name":"slaskis","email":"robert@publicclass.se"}],"homepage":"https://github.com/middle-management/pglite-pg-adapter#readme","bugs":{"url":"https://github.com/middle-management/pglite-pg-adapter/issues"},"dist":{"shasum":"927c65557e60d9e6521d660f2be708e72bc40d07","tarball":"https://registry.npmjs.org/@middle-management/pglite-pg-adapter/-/pglite-pg-adapter-0.0.2.tgz","fileCount":6,"integrity":"sha512-q5IW0rZ/X+M5xAb9EisV6oXnQ3HmKjS3LLt2JXtVrUIWJ0kraE16UlCsMD7SflcAQP7N0G9KvoICIg69rMoYIA==","signatures":[{"sig":"MEUCIGGbLUZS/AB5kPG0asUtocPnwRX2wkrNBz8yb2oHncZFAiEA89+9wr10wx1TaKbgh/aVygxCaeTd3HZhtMGEOflH0UM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51037},"jest":{"preset":"ts-jest","testTimeout":15000,"testEnvironment":"node"},"main":"dist/pg-adapter.js","types":"dist/pg-adapter.d.ts","engines":{"node":">=16.0.0"},"gitHead":"60dbff7af44accb70ca0df48ca24cc8521848445","scripts":{"dev":"tsx --watch examples/usage.ts","test":"NODE_OPTIONS='--experimental-vm-modules' jest","build":"tsc","example":"tsx examples/usage.ts","benchmark":"tsx examples/performance-benchmark.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"slaskis","actor":{"name":"slaskis","type":"user","email":"robert@publicclass.se"},"email":"robert@publicclass.se"},"repository":{"url":"git+https://github.com/middle-management/pglite-pg-adapter.git","type":"git"},"_npmVersion":"10.7.0","description":"PostgreSQL pg package API adapter for @electric-sql/pglite","directories":{},"_nodeVersion":"18.20.3","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.6.0","ts-jest":"^29.1.0","@types/pg":"^8.10.0","typescript":"^5.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@electric-sql/pglite":"^0.3.0"},"peerDependencies":{"@electric-sql/pglite":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pglite-pg-adapter_0.0.2_1751716356192_0.43741485729613383","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@middle-management/pglite-pg-adapter","version":"0.0.3","keywords":["postgresql","pglite","pg","adapter","database","sql","typescript","embedded","sqlite","wasm"],"author":{"name":"Robert Sköld","email":"robert@middlemanagement.se"},"license":"MIT","_id":"@middle-management/pglite-pg-adapter@0.0.3","maintainers":[{"name":"slaskis","email":"robert@publicclass.se"}],"homepage":"https://github.com/middle-management/pglite-pg-adapter#readme","bugs":{"url":"https://github.com/middle-management/pglite-pg-adapter/issues"},"dist":{"shasum":"be6d88aba66a173e6091a487041e54a89bb255f0","tarball":"https://registry.npmjs.org/@middle-management/pglite-pg-adapter/-/pglite-pg-adapter-0.0.3.tgz","fileCount":6,"integrity":"sha512-KS5ftEszWPJiQA6YC7Eegn5+XAG8QrN8mGZi7dIrPMe8tO31om5juyEzDLrOxW8eWPTHR8uegpND7tL5UV4cmQ==","signatures":[{"sig":"MEQCIFWIHG68dt36DfkkwJr/SclVoTLga0nEiKIhJBkIwCW5AiAuGy8mQcpol+9Uw5UWeZEDNeMOT+vcYuhzkFkaA/SmWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51047},"jest":{"preset":"ts-jest","testTimeout":15000,"testEnvironment":"node"},"main":"dist/pg-adapter.js","types":"dist/pg-adapter.d.ts","engines":{"node":">=16.0.0"},"gitHead":"ab490f17e067cf67cc21a490c467a03079a77da1","scripts":{"dev":"tsx --watch examples/usage.ts","test":"NODE_OPTIONS='--experimental-vm-modules' jest","build":"tsc","example":"tsx examples/usage.ts","benchmark":"tsx examples/performance-benchmark.ts","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"slaskis","email":"robert@publicclass.se"},"repository":{"url":"git+https://github.com/middle-management/pglite-pg-adapter.git","type":"git"},"_npmVersion":"10.7.0","description":"PostgreSQL pg package API adapter for @electric-sql/pglite","directories":{},"_nodeVersion":"18.20.3","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","jest":"^29.6.0","ts-jest":"^29.1.0","@types/pg":"^8.10.0","typescript":"^5.1.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@electric-sql/pglite":"^0.3.0"},"peerDependencies":{"@electric-sql/pglite":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pglite-pg-adapter_0.0.3_1755529041809_0.742837297198734","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@middle-management/pglite-pg-adapter","version":"0.0.4","description":"PostgreSQL pg package API adapter for @electric-sql/pglite","main":"dist/pg-adapter.js","types":"dist/pg-adapter.d.ts","scripts":{"build":"tsc","test":"NODE_OPTIONS='--experimental-vm-modules' jest","benchmark":"tsx examples/performance-benchmark.ts","prepublishOnly":"npm run build && npm test","example":"tsx examples/usage.ts","dev":"tsx --watch examples/usage.ts"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/pg":"^8.10.0","jest":"^29.6.0","ts-jest":"^29.1.0","tsx":"^4.19.2","typescript":"^5.1.0","@electric-sql/pglite":"^0.3.0"},"peerDependencies":{"@electric-sql/pglite":"^0.3.0"},"engines":{"node":">=16.0.0"},"repository":{"type":"git","url":"git+https://github.com/middle-management/pglite-pg-adapter.git"},"keywords":["postgresql","pglite","pg","adapter","database","sql","typescript","embedded","sqlite","wasm"],"author":{"name":"Robert Sköld","email":"robert@middlemanagement.se"},"license":"MIT","jest":{"preset":"ts-jest","testEnvironment":"node","testTimeout":15000},"_id":"@middle-management/pglite-pg-adapter@0.0.4","gitHead":"2592bc993b655561d9f6e12f8f41a58ebdc13546","bugs":{"url":"https://github.com/middle-management/pglite-pg-adapter/issues"},"homepage":"https://github.com/middle-management/pglite-pg-adapter#readme","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-HnPA9acouJ53H6M83ryk6No/Y8bIOe+e1ukmok4HfDU1293V4MXtcIr8jB3+0QmSlwV/+blnQeKzO1kbZfdDXA==","shasum":"8974673085a281b375b3f1d4998e36a442cf0e14","tarball":"https://registry.npmjs.org/@middle-management/pglite-pg-adapter/-/pglite-pg-adapter-0.0.4.tgz","fileCount":6,"unpackedSize":50497,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFpBqRqIqnB9cKDZm3IteyWug/DpMrzvVgunEdJQAUAfAiEA9bQ5bmGXBo3oGbxDG/MqChFXyITIeNL0ppNVurveN54="}]},"_npmUser":{"name":"slaskis","email":"robert@publicclass.se"},"directories":{},"maintainers":[{"name":"slaskis","email":"robert@publicclass.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pglite-pg-adapter_0.0.4_1772548051188_0.024798187053043375"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-04T08:24:47.948Z","modified":"2026-03-03T14:27:31.541Z","0.0.1":"2025-07-04T08:24:48.199Z","0.0.2":"2025-07-05T11:52:36.374Z","0.0.3":"2025-08-18T14:57:21.970Z","0.0.4":"2026-03-03T14:27:31.426Z"},"bugs":{"url":"https://github.com/middle-management/pglite-pg-adapter/issues"},"author":{"name":"Robert Sköld","email":"robert@middlemanagement.se"},"license":"MIT","homepage":"https://github.com/middle-management/pglite-pg-adapter#readme","keywords":["postgresql","pglite","pg","adapter","database","sql","typescript","embedded","sqlite","wasm"],"repository":{"type":"git","url":"git+https://github.com/middle-management/pglite-pg-adapter.git"},"description":"PostgreSQL pg package API adapter for @electric-sql/pglite","maintainers":[{"name":"slaskis","email":"robert@publicclass.se"}],"readme":"# PGlite PostgreSQL Adapter\n\n\n Create your own PGlite instances and share them across multiple clients and pools for maximum performance and control.\n\n## Features\n\n- **Full API Compatibility** - Same interface as the popular `pg` package\n- **User-Controlled Instances** - You create and manage PGlite databases\n- **Shared Database Architecture** - Multiple clients/pools can share the same database\n- **Superior Performance** - Shared instances are significantly faster than separate databases\n- **Memory Efficient** - Share expensive database instances across your application\n- **Full TypeScript Support** - Complete type safety with proper definitions\n- **Transaction Support** - Full ACID compliance with proper isolation\n- **Event Emitters** - Standard pg events (connect, end, error)\n- **LISTEN/NOTIFY Support** - PostgreSQL pub/sub notifications with full compatibility\n\n## Installation\n\n```bash\nnpm install @electric-sql/pglite\n# Copy the adapter files to your project or install as a package\n```\n\n## Quick Start\n\n### Basic Usage\n\n```typescript\nimport { Client } from './src/pg-adapter';\nimport { PGlite } from '@electric-sql/pglite';\n\n// You create and control the database\nconst db = new PGlite('./my-database');\n\nconst client = new Client({ pglite: db });\nawait client.connect();\n\nconst result = await client.query('SELECT $1 as message', ['Hello World']);\nconsole.log(result.rows[0].message); // \"Hello World\"\n\nawait client.end();\nawait db.close(); // You decide when to close the database\n```\n\n### Pool Usage\n\n```typescript\nimport { Pool } from './src/pg-adapter';\nimport { PGlite } from '@electric-sql/pglite';\n\nconst db = new PGlite('./my-database');\nconst pool = new Pool({ pglite: db, max: 10 });\n\n// Direct pool queries\nconst result = await pool.query('SELECT NOW()');\n\n// Get client from pool\nconst client = await pool.connect();\ntry {\n  const users = await client.query('SELECT * FROM users');\n  console.log(users.rows);\n} finally {\n  client.release(); // Important!\n}\n\nawait pool.end();\nawait db.close();\n```\n\n## Architecture Patterns\n\n### 1. Shared Database Pattern\n\nShare one database across multiple clients for maximum efficiency:\n\n```typescript\nconst sharedDB = new PGlite('./shared-database');\n\nconst client1 = new Client({ pglite: sharedDB });\nconst client2 = new Client({ pglite: sharedDB });\nconst pool = new Pool({ pglite: sharedDB, max: 5 });\n\n// All clients share the same database\nawait client1.connect();\nawait client2.connect();\n\nawait client1.query('CREATE TABLE messages (content TEXT)');\nawait client2.query('INSERT INTO messages VALUES ($1)', ['Hello']);\n\n// Data is immediately visible across all clients\nconst result = await client1.query('SELECT * FROM messages');\nconsole.log(result.rows); // [{ content: 'Hello' }]\n```\n\n### 2. Multiple Pools, Shared Database\n\nUse different pools for different purposes while sharing the same database:\n\n```typescript\nconst appDB = new PGlite('./app-database');\n\nconst readPool = new Pool({ pglite: appDB, max: 5 });\nconst writePool = new Pool({ pglite: appDB, max: 3 });\n\n// Both pools access the same data\nawait writePool.query('INSERT INTO users (name) VALUES ($1)', ['Alice']);\nconst users = await readPool.query('SELECT * FROM users');\n```\n\n### 3. Database per Feature\n\nCreate separate databases for different features or microservices:\n\n```typescript\nconst userDB = new PGlite('./users');\nconst analyticsDB = new PGlite('./analytics');\nconst cacheDB = new PGlite(); // In-memory\n\nconst userPool = new Pool({ pglite: userDB, max: 5 });\nconst analyticsPool = new Pool({ pglite: analyticsDB, max: 3 });\nconst cachePool = new Pool({ pglite: cacheDB, max: 10 });\n\n// Completely isolated databases\nawait userPool.query('CREATE TABLE users (id SERIAL, name TEXT)');\nawait analyticsPool.query('CREATE TABLE events (timestamp TIMESTAMP, event TEXT)');\nawait cachePool.query('CREATE TABLE cache (key TEXT, value TEXT)');\n```\n\n## Performance Benefits\n\n### Speed Improvements\n\nShared instances provide significant performance benefits:\n\n```typescript\n// ❌ Slow: Creating separate databases\nfor (let i = 0; i < 10; i++) {\n  const db = new PGlite(); // Each creates a new database\n  const client = new Client({ pglite: db });\n  // ... use client\n  await db.close();\n}\n\n// ✅ Fast: Sharing one database\nconst sharedDB = new PGlite();\nfor (let i = 0; i < 10; i++) {\n  const client = new Client({ pglite: sharedDB });\n  // ... use client (no need to close database each time)\n}\nawait sharedDB.close();\n```\n\n**Benchmark Results:**\n- **Setup Time**: 50-80% faster with shared instances\n- **Memory Usage**: 60-70% less memory consumption\n- **Throughput**: 2-3x higher operations per second\n\n### Memory Efficiency\n\n```typescript\n// Memory usage comparison (10 clients):\n// Separate instances: ~45MB\n// Shared instance: ~15MB\n// Memory savings: ~67%\n```\n\n## API Reference\n\n### ClientConfig\n\n```typescript\ninterface ClientConfig {\n  pglite: PGlite;                // Required: Your PGlite instance\n\n  // Standard pg options (accepted for compatibility, ignored)\n  user?: string;\n  password?: string;\n  host?: string;\n  port?: number;\n  database?: string;\n  connectionString?: string;\n  ssl?: boolean | object;\n}\n```\n\n### Client\n\n```typescript\nclass Client extends EventEmitter {\n  constructor(config: ClientConfig)\n\n  connect(): Promise<void>\n  end(): Promise<void>\n\n  // Query methods (same as pg.Client)\n  query<T>(text: string): Promise<QueryResult<T>>\n  query<T>(text: string, values: any[]): Promise<QueryResult<T>>\n  query<T>(text: string, callback: QueryCallback<T>): void\n  query<T>(config: QueryConfig): Promise<QueryResult<T>>\n  // ... more overloads\n\n  readonly connected: boolean\n}\n```\n\n### Pool\n\n```typescript\nclass Pool extends EventEmitter {\n  constructor(config: PoolConfig)\n\n  connect(): Promise<PoolClient>\n  query<T>(text: string, values?: any[]): Promise<QueryResult<T>>\n  end(): Promise<void>\n\n  readonly totalCount: number\n  readonly idleCount: number\n  readonly waitingCount: number\n}\n```\n\n## Advanced Usage\n\n### Transactions\n\n```typescript\nconst client = await pool.connect();\ntry {\n  await client.query('BEGIN');\n  await client.query('INSERT INTO accounts (name, balance) VALUES ($1, $2)', ['Alice', 1000]);\n  await client.query('INSERT INTO transactions (account_id, amount) VALUES (1, -100)');\n  await client.query('COMMIT');\n} catch (error) {\n  await client.query('ROLLBACK');\n  throw error;\n} finally {\n  client.release();\n}\n```\n\n### LISTEN/NOTIFY Support\n\n```typescript\n// Set up notification listener\nclient.on('notification', (msg) => {\n  console.log(`Received on ${msg.channel}: ${msg.payload}`);\n});\n\n// Start listening to a channel\nawait client.query('LISTEN order_updates');\n\n// Send notifications\nawait client.query(\"NOTIFY order_updates, 'Order #1234 shipped'\");\n\n// Multiple channels\nawait client.query('LISTEN user_events');\nawait client.query('LISTEN system_alerts');\n\n// Stop listening\nawait client.query('UNLISTEN order_updates');\nawait client.query('UNLISTEN *'); // Stop all\n```\n\n### Error Handling\n\n```typescript\n// Promise-based\ntry {\n  await client.query('SELECT * FROM users');\n} catch (error) {\n  console.error('Query failed:', error.message);\n}\n\n// Callback-based\nclient.query('SELECT * FROM users', (err, result) => {\n  if (err) {\n    console.error('Query failed:', err.message);\n  } else {\n    console.log('Users:', result.rows);\n  }\n});\n```\n\n### Database Lifecycle Management\n\n```typescript\n// Pattern 1: Application-scoped database\nconst appDB = new PGlite('./app.db');\nconst pool = new Pool({ pglite: appDB, max: 10 });\n\n// Use throughout app lifecycle\n// ...\n\n// Clean shutdown\nawait pool.end();\nawait appDB.close();\n\n// Pattern 2: Request-scoped databases\napp.use(async (req, res, next) => {\n  req.db = new PGlite('./per-request.db');\n  req.pool = new Pool({ pglite: req.db, max: 3 });\n\n  res.on('finish', async () => {\n    await req.pool.end();\n    await req.db.close();\n  });\n\n  next();\n});\n```\n\n## Migration from pg\n\nReplace your pg imports and configuration:\n\n```typescript\n// Before (pg)\nimport { Client, Pool } from 'pg';\n\nconst client = new Client({\n  user: 'postgres',\n  host: 'localhost',\n  database: 'myapp',\n  password: 'secret',\n  port: 5432,\n});\n\n// After (pglite-pg-adapter)\nimport { Client, Pool } from './src/pg-adapter';\nimport { PGlite } from '@electric-sql/pglite';\n\nconst db = new PGlite('./myapp-database');\nconst client = new Client({ pglite: db });\n```\n\n### LISTEN/NOTIFY Migration\n\nYour existing PostgreSQL LISTEN/NOTIFY code works without changes:\n\n```typescript\n// This works exactly the same with pglite-pg-adapter\nclient.on('notification', (msg) => {\n  console.log(`Channel: ${msg.channel}, Payload: ${msg.payload}`);\n});\n\nawait client.query('LISTEN my_channel');\nawait client.query(\"NOTIFY my_channel, 'Hello World'\");\n```\n\n### pg Type Compatibility\n\nThe adapter classes can be directly cast as `pg.Client`, `pg.Pool`, and `pg.PoolClient` types for seamless integration with existing libraries:\n\n```typescript\nimport { Client, Pool } from './src/pg-adapter';\nimport * as pg from 'pg';\n\nconst db = new PGlite('./database');\nconst client = new Client({ pglite: db });\nconst pool = new Pool({ pglite: db, max: 5 });\n\n// Direct casting works perfectly\nconst pgClient = client as any;\nconst pgPool = pool as any;\n\n// Use with existing libraries that expect pg types\nclass DatabaseService {\n  constructor(private pool: pg.Pool) {}\n  \n  async getUser(id: number) {\n    return this.pool.query('SELECT * FROM users WHERE id = $1', [id]);\n  }\n}\n\n// Works seamlessly\nconst service = new DatabaseService(pool as any);\n```\n\n## Testing\n\nThe adapter includes comprehensive tests demonstrating performance benefits:\n\n```bash\nnpm test                    # Run all tests\nnpm run test:performance   # Run performance benchmarks\nnpm run test:coverage      # Generate coverage report\n```\n\n### Test Results\n\n```\n✅ Shared instance setup:     45.2ms\n❌ Separate instances setup:  234.1ms\n⚡ Performance improvement:   80.7%\n\n✅ Shared instance memory:    12.4MB\n❌ Separate instances memory: 41.2MB\n💚 Memory savings:            69.9%\n```\n\n## Best Practices\n\n### 1. Share Instances When Possible\n```typescript\n// ✅ Good: One database, multiple clients\nconst db = new PGlite('./app.db');\nconst readPool = new Pool({ pglite: db, max: 5 });\nconst writePool = new Pool({ pglite: db, max: 3 });\n\n// ❌ Avoid: Separate databases for same data\nconst readDB = new PGlite('./read.db');\nconst writeDB = new PGlite('./write.db');\n```\n\n### 2. Use Appropriate Database Scopes\n```typescript\n// Application data: Persistent file\nconst appDB = new PGlite('./app-data.db');\n\n// Cache data: In-memory\nconst cacheDB = new PGlite();\n\n// User sessions: Temporary file\nconst sessionDB = new PGlite('./tmp/sessions.db');\n```\n\n### 3. Proper Cleanup\n```typescript\n// Always clean up resources\nprocess.on('SIGINT', async () => {\n  await pool.end();\n  await db.close();\n  process.exit(0);\n});\n```\n\n## Differences from pg\n\n- **No Network**: PGlite runs in-process\n- **File-based**: Data stored in files, not a server\n- **User-managed**: You control database lifecycle\n- **Shared instances**: Multiple clients can share databases\n- **Limited metadata**: Some result metadata not available\n- **LISTEN/NOTIFY**: Fully supported with same API as pg\n\n## Performance Tips\n\n- **Share PGlite instances** between clients/pools for the same data\n- **Use in-memory databases** (`new PGlite()`) for temporary/cache data\n- **Separate databases** only when you need data isolation\n- **Pool sizing**: Start with 5-10 max connections, adjust based on workload\n- **Batch operations**: Use transactions for multiple related queries\n\n## License\n\nMIT\n\n---\n\n**Performance Note**: This adapter can provide 2-3x performance improvements and 60-70% memory savings compared to creating separate PGlite instances. Always prefer shared instances when working with the same dataset.\n","readmeFilename":"README.md"}