We just launched Snapshots in Neon - Read how they compare to AWS RDS

Connect Astro to Postgres on Neon

Learn how to make server-side queries to Postgres from .astro files or API routes.

Astro builds fast content sites, powerful web applications, dynamic server APIs, and everything in-between. This guide describes how to create a Neon Postgres database and access it from an Astro site or application.

To create a Neon project and access it from an Astro site or 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 an Astro project and add dependencies

    1. Create an Astro project if you do not have one. For instructions, see Getting Started, in the Astro documentation.

    2. Add project dependencies using one of the following commands:

      Neon serverless driver
      postgres.js
      node-postgres
      npm install @neondatabase/serverless
  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 on your Project Dashboard to open the Connect to your database modal. For more information, see Connect from any application.

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

    There a multiple ways to make server side requests with Astro. See below for two of those options: astro files and Server Endpoints (API Routes).

    astro files

    In your .astro files, use the following code snippet to connect to your Neon database:

    Neon serverless driver
    postgres.js
    node-postgres
    ---
    import { neon } from '@neondatabase/serverless';
    
    const sql = neon(import.meta.env.DATABASE_URL);
    
    const response = await sql`SELECT version()`;
    const data = response[0].version;
    ---
    
    {data}

    Run the app

    When you run npm run dev you can expect to see the following when you visit localhost:4321:

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

    Server Endpoints (API Routes)

    In your server endpoints (API Routes) in Astro application, use the following code snippet to connect to your Neon database:

    Neon serverless driver
    postgres.js
    node-postgres
    // File: src/pages/api/index.ts
    
    import { neon } from '@neondatabase/serverless';
    
    export async function GET() {
      const sql = neon(import.meta.env.DATABASE_URL);
      const response = await sql`SELECT version()`;
      return new Response(JSON.stringify(response[0]), {
        headers: { 'Content-Type': 'application/json' },
      });
    }

    Run the app

    When you run npm run dev you can expect to see the following when you visit the localhost:4321/api route:

    { version: 'PostgreSQL 16.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit' }

Source code

You can find the source code for the applications described in this guide on GitHub.

Need help?

Join our Discord Server to ask questions or see what others are doing with Neon. Users on paid plans can open a support ticket from the console. For more details, see Getting Support.

Last updated on

Was this page helpful?