-
-
Notifications
You must be signed in to change notification settings - Fork 521
Description
Provide environment information
System:
OS: macOS 15.1.1
CPU: (10) arm64 Apple M1 Max
Memory: 8.57 GB / 64.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 20.18.1 - ~/.nvm/versions/node/v20.18.1/bin/node
npm: 10.8.2 - ~/.nvm/versions/node/v20.18.1/bin/npm
pnpm: 9.14.2 - ~/.nvm/versions/node/v20.18.1/bin/pnpm
Watchman: 2024.12.02.00 - /opt/homebrew/bin/watchmanTL;DR
I've hit a wall trying to switch the Postgres driver in the create-t3-turbo template from drizzle-orm/vercel-postgres to drizzle-orm/node-postgres. While database migrations are working fine, the app keeps failing during startup and hydration in different Node.js environments. I'm seeing net.Socket errors and Edge runtime issues with the Node.js crypto module. I've tried several workarounds, but nothing's sticking.
Describe the bug
I've run into some frustrating runtime compatibility issues while trying to swap out the Postgres driver in the create-t3-turbo template. Here's what I'm seeing:
- On Node v22.12.0, I'm getting hit with
net.Socketconstructor errors in the Next.js React Server Components (RSC) environment - On Node v20.18.1, I'm running into Edge runtime issues with the Node.js
cryptomodule and missingpg-nativedependencies
The weird part? Database operations like schema migrations using drizzle-kit push work perfectly fine. It's just when the app tries to start up that everything falls apart.
Link to reproduction
LinnJS/t3-turborepo-node-pg-driver#1
To reproduce
- Clone the my reproduction repository .
- Pull origin
git fetch origin main - Switch branch
git checkout feat/add-pg-driver - Install
pnpm install --filter @acme/nextjs... - Run http://localhost:3000
pnpm dev --filter @acme/nextjs...
Previous Attempted Workarounds
I've thrown quite a few potential solutions at this problem:
- Removed all "Edge" exports from the project
- Tweaked the Webpack config in
next.config.jsto exclude problematic Node.js modules - Verified that CLI database operations work (they do!)
- Even got it working in a closed-source project by suppressing similar errors, but can't replicate that success in a clean setup
Despite all these attempts, the issue keeps showing up during runtime when using the Node.js runtime.
Additional information
Introduction
Hey there! I've been diving deep into the create-t3-turbo template and hit some pretty significant roadblocks while trying to switch database drivers. My goal was to use the node-postgres driver for better compatibility with self-hosted setups, but I'm running into walls with both RSC and Edge runtime environments.
Description
The problems started when I tried switching from drizzle-orm/vercel-postgres to drizzle-orm/node-postgres in the packages/db and packages/api directories. I'm seeing runtime errors related to Node.js native modules like net and crypto. It seems to be tied to Next.js runtime limitations.
Error Messages
Original Repository (Node v22.12.0)
TypeError: net.Socket is not a constructor
at getStream (webpack-internal:///(rsc)/../../node_modules/pg/lib/stream.js:23:12)
at new Connection (webpack-internal:///(rsc)/../../node_modules/pg/lib/connection.js:18:36)
at new Client (webpack-internal:///(rsc)/../../node_modules/pg/lib/client.js:48:7)Reproduction Repository (Node v20.18.1)
Error: The edge runtime does not support Node.js 'crypto' module.
Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime
at <unknown> (webpack-internal:///(middleware)/../../node_modules/next/dist/esm/server/web/globals.js:34)And just to make things more interesting, I'm also seeing this in the reproduction:
Module not found: Can't resolve 'pg-native' in '/Users/.../node_modules/pg/lib/native'
Import trace for requested module:
../../node_modules/pg/lib/native/client.js
../../node_modules/pg/lib/native/index.js
../../node_modules/pg/lib/index.js
../../packages/db/src/client.ts
../../packages/auth/src/config.ts
../../packages/auth/src/index.tsReproduction Repository
Related Discussions
Discord Thread Reference
If you want to join the discussion, I've started a thread in Theo's Typesafe Cult
Additional Context
From what I can tell, these errors are popping up because of how Next.js interacts with Node.js native modules in RSC and Edge runtime environments. This feels more like a fundamental runtime compatibility issue rather than just a configuration problem.
Expected Behavior
In an ideal world, the app should just connect to Postgres using the node-postgres driver without throwing fits about net.Socket, crypto, or pg-native. It should run smoothly on the Node.js runtime like any other normal app.
Questions
I'm still wrestling with these questions:
- Is there a "right way" to use
node-postgreswith Next.js RSC? - Are there known limitations I should be aware of?
- How are others handling Node.js native modules in the Edge runtime?
Contributing Back to the Community
Once we crack this, I'd love to give back by:
- Writing up a detailed guide on switching from
vercel-postgrestonode-postgres - Documenting all the configuration changes and workarounds needed
- Sharing best practices for using
node-postgresin Next.js RSC/Edge environments - Warning others about the pitfalls I've discovered
Thanks in advance for any help or insights you can share! Let's figure this out together.