--- title: Use Neon with Cloudflare Workers subtitle: Connect a Neon Postgres database to your Cloudflare Workers application enableTableOfContents: true updatedOn: '2025-06-30T11:30:21.897Z' --- [Cloudflare Workers](https://workers.cloudflare.com/) is a serverless platform allowing you to deploy your applications globally across Cloudflare's network. It supports running JavaScript, TypeScript, and WebAssembly, making it a great choice for high-performance, low-latency web applications. This guide demonstrates how to connect to a Neon Postgres database from your Cloudflare Workers application. We'll use the [Neon serverless driver](/docs/serverless/serverless-driver) to connect to the database and make queries. ## Prerequisites To follow along with this guide, you will need: - A Neon account. If you do not have one, sign up at [Neon](https://neon.tech). Your Neon project comes with a ready-to-use Postgres database named `neondb`. We'll use this database in the following examples. - A Cloudflare account. If you do not have one, sign up for [Cloudflare Workers](https://workers.cloudflare.com/) to get started. - [Node.js](https://nodejs.org/) and [npm](https://www.npmjs.com/) installed on your local machine. We'll use Node.js to build and deploy the Workers application. ## Setting up your Neon database ### Initialize a new project Log in to the Neon Console and navigate to the [Projects](https://console.neon.tech/app/projects) section. 1. Click the **New Project** button to create a new project. 2. From the Neon **Dashboard**, navigate to the **SQL Editor** from the sidebar, and run the following SQL command to create a new table in your database: ```sql CREATE TABLE books_to_read ( id SERIAL PRIMARY KEY, title TEXT, author TEXT ); ``` Next, insert some sample data into the `books_to_read` table so that you can query it later: ```sql INSERT INTO books_to_read (title, author) VALUES ('The Way of Kings', 'Brandon Sanderson'), ('The Name of the Wind', 'Patrick Rothfuss'), ('Coders at Work', 'Peter Seibel'), ('1984', 'George Orwell'); ``` ### Retrieve your Neon database connection string Navigate to your **Project Dashboard** in the Neon Console and click **Connect** to open the **Connect to your database** modal to find your database connection string. Enable the **Connection pooling** toggle to add the `-pooler` option to your connection string. A pooled connection is recommended for serverless environments. For more information, see [Connection pooling](/docs/connect/connection-pooling). Your pooled connection string should look similar to this: ```bash postgresql://alex:AbC123dEf@ep-cool-darkness-123456-pooler.us-east-2.aws.neon.tech/dbname?sslmode=require&channel_binding=require ``` Keep your connection string handy for later use. ## Setting up your Cloudflare Workers project ### Create a new Worker project Run the following command in a terminal window to set up a new Cloudflare Workers project: ```bash npm create cloudflare@latest ``` This initiates an interactive CLI prompt to generate a new project. To follow along with this guide, you can use the following settings: ```bash ├ In which directory do you want to create your application? │ dir ./my-neon-worker │ ├ What type of application do you want to create? │ type "Hello World" Worker │ ├ Do you want to use TypeScript? │ no typescript ``` When asked if you want to deploy your application, select `no`. We'll develop and test the application locally before deploying it to Cloudflare Workers platform. The `create-cloudflare` CLI installs the `Wrangler` tool to manage the full workflow of testing and managing your Worker applications. ### Implement the Worker script We'll use the [Neon serverless driver](/docs/serverless/serverless-driver) to connect to the Neon database, so you need to install it as a dependency: ```bash npm install @neondatabase/serverless ``` Now, you can update the `src/index.js` file in the project directory with the following code: ```js import { Client } from '@neondatabase/serverless'; export default { async fetch(request, env, ctx) { const client = new Client(env.DATABASE_URL); await client.connect(); const { rows } = await client.query('SELECT * FROM books_to_read;'); return new Response(JSON.stringify(rows)); }, }; ``` The `fetch` handler defined above gets called when the worker receives an HTTP request. It will query the Neon database to fetch the full list of books in our to-read list. ### Test the worker application locally You first need to configure the `DATABASE_URL` environment variable to point to our Neon database. You can do this by creating a `.dev.vars` file at the root of the project directory with the following content: ```text DATABASE_URL=YOUR_NEON_CONNECTION_STRING ``` Now, to test the worker application locally, you can use the `wrangler` CLI which comes with the Cloudflare project setup. ```bash npx wrangler dev ``` This command starts a local server and simulates the Cloudflare Workers environment. ```bash ❯ npx wrangler dev ⛅️ wrangler 3.28.1 ------------------- Using vars defined in .dev.vars Your worker has access to the following bindings: - Vars: - DATABASE_URL: "(hidden)" ⎔ Starting local server... [wrangler:inf] Ready on http://localhost:8787 ``` You can visit `http://localhost:8787` in your browser to test the worker application. It should return a JSON response with the list of books from the `books_to_read` table. ``` [{"id":1,"title":"The Way of Kings","author":"Brandon Sanderson"},{"id":2,"title":"The Name of the Wind","author":"Patrick Rothfuss"},{"id":3,"title":"Coders at Work","author":"Peter Seibel"},{"id":4,"title":"1984","author":"George Orwell"}] ``` ## Deploying your application with Cloudflare Workers ### Authenticate Wrangler with your Cloudflare account Run the following command to link the Wrangler tool to your Cloudflare account: ```bash npx wrangler login ``` This command will open a browser window and prompt you to log into your Cloudflare account. After logging in and approving the access request for `Wrangler`, you can close the browser window and return to your terminal. ### Add your Neon connection string as a secret Use Wrangler to add your Neon database connection string as a secret to your Worker: ```bash npx wrangler secret put DATABASE_URL ``` When prompted, paste your Neon connection string. ### Publish your Worker application and verify the deployment Now, you can deploy your application to Cloudflare Workers by running the following command: ```bash npx wrangler deploy ``` The Wrangler CLI will output the URL of your Worker hosted on the Cloudflare platform. Visit this URL in your browser or use `curl` to verify the deployment works as expected. ```text ❯ npx wrangler deploy ⛅️ wrangler 3.28.1 ------------------- Total Upload: 189.98 KiB / gzip: 49.94 KiB Uploaded my-neon-worker (4.03 sec) Published my-neon-worker (5.99 sec) https://my-neon-worker.anandishan2.workers.dev Current Deployment ID: de8841dd-46e4-436d-b2c4-569e91f54c72 ``` ## Removing the example application and Neon project To delete your Worker, you can use the Cloudflare dashboard or run `wrangler delete` from your project directory, specifying your project name. Refer to the [Wrangler documentation](https://developers.cloudflare.com/workers/wrangler/commands/#delete-3) for more details. To delete your Neon project, follow the steps outlined in the Neon documentation under [Delete a project](/docs/manage/projects#delete-a-project). ## Source code You can find the source code for the application described in this guide on GitHub. Use Neon with Cloudflare Workers ## Resources - [Cloudflare Workers](https://workers.cloudflare.com/) - [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/) - [Neon](https://neon.tech)