-
Notifications
You must be signed in to change notification settings - Fork 325
Description
Disclaimer: written with AI, came up in a vibe coding session (but reviewed/edited by @divyenduz the human). Already tried the latest versions of @electric-sql/[email protected] and @electric-sql/[email protected].
Bug Description
When using @electric-sql/pglite-socket with @electric-sql/[email protected] in Bun runtime, the server crashes with a WASM error when a PostgreSQL client attempts to connect.
Error Message w/ pglite 0.2.17
RuntimeError: Unreachable code should not be executed (evaluating 'getWasmTableEntry(e)(t)')
at invoke_ii (.../node_modules/@electric-sql/pglite/dist/index.js:3:230030)
at execProtocolRaw (.../node_modules/@electric-sql/pglite/dist/index.js:3:239233)
at handleData (.../node_modules/@electric-sql/pglite-socket/dist/chunk-F6KLIXM7.js:1:2032)
Error Message w/ pglite 0.3.10
Command failed, RuntimeError: Unreachable code should not be executed (evaluating 'this.mod._pgl_backend()')
at unknown
at unknown
at unknown
at <anonymous> (/Users/divyendusingh/Documents/zoid/playground/dbdev/node_modules/@electric-sql/pglite/dist/index.js:3:192674)
at async create (/Users/divyendusingh/Documents/zoid/playground/dbdev/node_modules/@electric-sql/pglite/dist/index.js:3:186333)
at async cmd (/Users/divyendusingh/Documents/zoid/playground/dbdev/src/commands/start.ts:27:27)
at async Te (/Users/divyendusingh/Documents/zoid/playground/dbdev/node_modules/@stricli/core/dist/index.js:7:41)
at processTicksAndRejections (native:7:39)
Minimal Reproduction
import { PGlite } from '@electric-sql/pglite';
import { PGLiteSocketServer } from '@electric-sql/pglite-socket';
async function main() {
const db = await PGlite.create('memory://', {
debug: 0,
});
const server = new PGLiteSocketServer({
db,
port: 5432,
host: '127.0.0.1',
});
await server.start();
console.log('Server started on port 5432');
}
main().catch(console.error);Steps to reproduce:
- Save the above code as
index.ts - Create
package.json:
{
"name": "repro",
"type": "module",
"dependencies": {
"@electric-sql/pglite": "0.2.17",
"@electric-sql/pglite-socket": "0.0.15"
}
}- Run:
bun install && bun run index.ts - In another terminal:
PGSSLMODE=disable psql -h localhost -p 5432 -U postgres -d postgres
Expected Behavior
The psql client should successfully connect to the PGlite Socket Server and be able to execute queries.
Actual Behavior
The server crashes immediately when the client attempts to connect, with a WASM "Unreachable code" error in execProtocolRaw.
Environment
- Bun: v1.3.0
- @electric-sql/pglite: 0.2.17
- @electric-sql/pglite-socket: 0.0.15
- OS: macOS arm64 (Darwin 24.6.0)
- Architecture: arm64
Additional Context
- The same code works correctly in Node.js runtime
- The error occurs specifically when handling the PostgreSQL wire protocol messages
- Downgrading to
@electric-sql/[email protected]avoids the WASM crash but causes a different error (runExclusive is not a function) since that method doesn't exist in v0.2.12 - The error suggests this might be a WASM compilation or compatibility issue between PGlite's WASM module and Bun's WASM runtime
Workaround
Currently no workaround available for using PGlite Socket Server with Bun. A handrolled proxy server using execProtocolRaw directly with PGlite 0.2.12 works, but that's not a viable long-term solution.