Skip to main content
Neon Postgres Docs
current

Search documentation

Type to search this documentation.

On this pageOverview

Connect a Remix application to Neon

Remix is now React Router v7. The features of the Remix framework have been merged into React Router v7. If you are starting a new project, we recommend using React Router. Follow our React Router gui...

Remix is an open-source full stack JavaScript framework that lets you focus on building out the user interface using familiar web standards. This guide explains how to connect Remix with Lakebase Postgres using a secure server-side request.

To create a project on Neon and access it from a Remix application:

  1. Create a Neon project

    If you do not have one already, create a Neon project. Save your connection details including your password. They are required when defining connection settings.

    1. Navigate to the Projects page in the Neon Console.
    2. Click New Project.
    3. Specify your project settings and click Create Project.
  2. Create a Remix project and add dependencies

    1. Create a Remix project if you do not have one. For instructions, see Quick Start, in the Remix documentation.
    2. Add project dependencies using one of the following commands:npm install @neondatabase/serverlessnpm install postgresnpm install pg
  3. Store your Neon credentials

    Add a .env file to your project directory and add your Neon connection string to it. You can find the connection string for your database by clicking the Connect button in the Console nav. For more information, see Connect from any application.

    Bash
    DATABASE_URL="postgresql://<user>:<password>@<endpoint_hostname>.neon.tech:<port>/<dbname>?sslmode=require&channel_binding=require"
  4. Configure the Postgres client

    There are two parts to connecting a Remix application to Neon. The first is db.server. Remix will ensure any code added to this file won't be included in the client bundle. The second is the route where the connection to the database will be used.

    db.server

    Create a db.server.ts file at the root of your /app directory and add the following code snippet to connect to your Neon database:

    Neon serverless driver
    import { neon } from '@neondatabase/serverless';
    
    const sql = neon(process.env.DATABASE_URL);
    
    export { sql };
    postgres.js
    import postgres from 'postgres';
    
    const sql = postgres(process.env.DATABASE_URL, { ssl: 'require' });
    
    export { sql };
    node-postgres
    import pg from 'pg';
    
    const pool = new pg.Pool({
      connectionString: process.env.DATABASE_URL,
      ssl: true,
    });
    
    export { pool };

    route

    Create a new route in your app/routes directory and import the db.server file.

    Neon serverless driver
    import { sql } from '~/db.server';
    import { json } from '@remix-run/node';
    import { useLoaderData } from '@remix-run/react';
    
    export const loader = async () => {
      const response = await sql`SELECT version()`;
      return response[0].version;
    };
    
    export default function Page() {
      const data = useLoaderData();
      return <>{data}</>;
    }
    postgres.js
    import { sql } from '~/db.server';
    import { json } from '@remix-run/node';
    import { useLoaderData } from '@remix-run/react';
    
    export const loader = async () => {
      const response = await sql`SELECT version()`;
      return response[0].version;
    };
    
    export default function Page() {
      const data = useLoaderData();
      return <>{data}</>;
    }
    node-postgres
    import { pool } from '~/db.server';
    import { json } from '@remix-run/node';
    import { useLoaderData } from '@remix-run/react';
    
    export const loader = async () => {
      const client = await pool.connect();
      try {
        const response = await client.query('SELECT version()');
        return response.rows[0].version;
      } finally {
        client.release();
      }
    };
    
    export default function Page() {
      const data = useLoaderData();
      return <>{data}</>;
    }
  5. Run the app

    When you run npm run dev you can expect to see the following on localhost:3000:

    Bash
    PostgreSQL 16.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

Join our Discord Server to ask questions or see what others are doing with Neon. For paid plan support options, see Support.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu