---
title: Connecting Neon to your stack
subtitle: Learn how to integrate Neon into your application
enableTableOfContents: true
redirectFrom:
- /docs/get-started-with-neon/connect-neon
updatedOn: '2025-12-22T14:57:25.741Z'
---
Using Neon as the serverless database in your tech stack means configuring connections. Whether it’s a direct connection string from your language or framework, setting environment variables for your deployment platform, connecting to ORMs like Prisma, or configuring deployment settings for CI/CD workflows, it starts with the connection.
## Connecting to your application
This section provides connection string samples for various frameworks and languages, helping you integrate Neon into your tech stack.
```bash
# psql example connection string
psql postgresql://username:password@hostname:5432/database?sslmode=require&channel_binding=require
```
```ini
# .env example
PGHOST=hostname
PGDATABASE=database
PGUSER=username
PGPASSWORD=password
PGPORT=5432
```
```javascript
// Next.js example
import postgres from 'postgres';
let { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env;
const conn = postgres({
host: PGHOST,
database: PGDATABASE,
username: PGUSER,
password: PGPASSWORD,
port: 5432,
ssl: 'require',
});
function selectAll() {
return conn.query('SELECT * FROM hello_world');
}
```
```javascript
// Drizzle example with the Neon serverless driver
import { neon } from '@neondatabase/serverless';
import { drizzle } from 'drizzle-orm/neon-http';
const sql = neon(process.env.DATABASE_URL);
const db = drizzle(sql);
const result = await db.select().from(...);
```
```javascript
// Prisma example with the Neon serverless driver
import { neon } from '@neondatabase/serverless';
import { PrismaNeonHTTP } from '@prisma/adapter-neon';
import { PrismaClient } from '@prisma/client';
const sql = neon(process.env.DATABASE_URL);
const adapter = new PrismaNeonHTTP(sql);
const prisma = new PrismaClient({ adapter });
```
```python
# Python example with psycopg2
import os
import psycopg2
# Load the environment variable
database_url = os.getenv('DATABASE_URL')
# Connect to the PostgreSQL database
conn = psycopg2.connect(database_url)
with conn.cursor() as cur:
cur.execute("SELECT version()")
print(cur.fetchone())
# Close the connection
conn.close()
```
```csharp
# .NET example
## Connection string
"Host=ep-cool-darkness-123456.us-east-2.aws.neon.tech;Database=dbname;Username=alex;Password=AbC123dEf"
## with SSL
"Host=ep-cool-darkness-123456.us-east-2.aws.neon.tech;Database=dbname;Username=alex;Password=AbC123dEf;SSL Mode=Require;Trust Server Certificate=true"
## Entity Framework (appsettings.json)
{
...
"ConnectionStrings": {
"DefaultConnection": "Host=ep-cool-darkness-123456.us-east-2.aws.neon.tech;Database=dbname;Username=alex;Password=AbC123dEf;SSL Mode=Require;Trust Server Certificate=true"
},
...
}
```
```ruby
# Ruby example
require 'pg'
require 'dotenv'
# Load environment variables from .env file
Dotenv.load
# Connect to the PostgreSQL database using the environment variable
conn = PG.connect(ENV['DATABASE_URL'])
# Execute a query
conn.exec("SELECT version()") do |result|
result.each do |row|
puts "Result = #{row['version']}"
end
end
# Close the connection
conn.close
```
```rust
// Rust example
use postgres::Client;
use openssl::ssl::{SslConnector, SslMethod};
use postgres_openssl::MakeTlsConnector;
use std::error;
use std::env;
use dotenv::dotenv;
fn main() -> Result<(), Box> {
// Load environment variables from .env file
dotenv().ok();
// Get the connection string from the environment variable
let conn_str = env::var("DATABASE_URL")?;
let builder = SslConnector::builder(SslMethod::tls())?;
let connector = MakeTlsConnector::new(builder.build());
let mut client = Client::connect(&conn_str, connector)?;
for row in client.query("select version()", &[])? {
let ret: String = row.get(0);
println!("Result = {}", ret);
}
Ok(())
}
```
```go
// Go example
package main
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/lib/pq"
"github.com/joho/godotenv"
)
func main() {
err := godotenv.Load()
if err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
connStr := os.Getenv("DATABASE_URL")
if connStr == "" {
panic("DATABASE_URL environment variable is not set")
}
db, err := sql.Open("postgres", connStr)
if err != nil {
panic(err)
}
defer db.Close()
var version string
if err := db.QueryRow("select version()").Scan(&version); err != nil {
panic(err)
}
fmt.Printf("version=%s\n", version)
}
```
## Obtaining connection details
When connecting to Neon from an application or client, you connect to a database in your Neon project. In Neon, a database belongs to a branch, which may be the default branch of your project (`production`) or a child branch.
You can obtain the database connection details you require by clicking the **Connect** button on your **Project Dashboard** to open the **Connect to your database** modal. Select a branch, a compute, a database, and a role. A connection string is constructed for you.

Neon supports pooled and direct connections to the database. Use a pooled connection string if your application uses a high number of concurrent connections. For more information, see [Connection pooling](/docs/connect/connection-pooling#connection-pooling).
A Neon connection string includes the role, password, hostname, and database name.
```text
postgresql://alex:AbC123dEf@ep-cool-darkness-a1b2c3d4-pooler.us-east-2.aws.neon.tech/dbname?sslmode=require&channel_binding=require
^ ^ ^ ^ ^
role -| | |- hostname |- pooler option |- database
|
|- password
```
The hostname includes the ID of the compute, which has an `ep-` prefix: `ep-cool-darkness-a1b2c3d4`. For more information about Neon connection strings, see [Connection string](/docs/reference/glossary#connection-string).
You are responsible for maintaining the records and associations of any connection strings in your environment and systems.
## Using connection details
You can use the details from the connection string or the connection string itself to configure a connection. For example, you might place the connection details in an `.env` file, assign the connection string to a variable, or pass the connection string on the command-line.
### `.env` file
```text
PGUSER=alex
PGHOST=ep-cool-darkness-a1b2c3d4.us-east-2.aws.neon.tech
PGDATABASE=dbname
PGPASSWORD=AbC123dEf
PGPORT=5432
```
### Variable
```text shouldWrap
DATABASE_URL="postgresql://alex:AbC123dEf@ep-cool-darkness-a1b2c3d4.us-east-2.aws.neon.tech/dbname?sslmode=require&channel_binding=require"
```
### Command-line
```bash shouldWrap
psql postgresql://alex:AbC123dEf@ep-cool-darkness-a1b2c3d4.us-east-2.aws.neon.tech/dbname?sslmode=require&channel_binding=require
```
Neon requires that all connections use SSL/TLS encryption, but you can increase the level of protection by appending an `sslmode` parameter setting to your connection string. For instructions, see [Connect to Neon securely](/docs/connect/connect-securely).
## FAQs
### Where do I obtain a password?
It's included in your Neon connection string, which you can find by clicking the **Connect** button on your **Project Dashboard** to open the **Connect to your database** modal.
### What port does Neon use?
Neon uses the default Postgres port, `5432`.
## Network protocol support
Neon projects provisioned on AWS support both [IPv4](https://en.wikipedia.org/wiki/Internet_Protocol_version_4) and [IPv6](https://en.wikipedia.org/wiki/IPv6) addresses. Neon projects provisioned on Azure currently only support IPv4.
Additionally, Neon provides a serverless driver that supports both WebSocket and HTTP connections. For further information, refer to our [Neon serverless driver](/docs/serverless/serverless-driver) documentation.
## Data API
The [Neon Data API](/docs/data-api/overview) provides a REST interface to your database, enabling you to query Postgres directly from web browsers, serverless functions, and edge runtimes using standard HTTP requests. This eliminates the need for connection pooling and works in environments where traditional Postgres drivers cannot operate.
**When to use the Data API:**
- Building browser-based applications that need direct database access
- Deploying to edge runtimes (Cloudflare Workers, Vercel Edge Functions)
- Serverless applications with high concurrency that need connectionless scalability
- Applications requiring RLS-enforced, secure database access via HTTP
## Connection notes
- Some older client libraries and drivers, including older `psql` executables, are built without [Server Name Indication (SNI)](/docs/reference/glossary#sni) support and require a workaround. For more information, see [Connection errors](/docs/connect/connection-errors).
- Some Java-based tools that use the pgJDBC driver for connecting to Postgres, such as DBeaver, DataGrip, and CLion, do not support including a role name and password in a database connection string or URL field. When you find that a connection string is not accepted, try entering the database name, role, and password values in the appropriate fields in the tool's connection UI