
How they compare
Agent is not able to modify the production database. This restriction is in place so that your production database stays safe.Agent can make edits to your development database. At the time of publishing, any changes you’ve made with Agent to the structure of your development database (adding and deleting columns or tables) are applied to your production database.You can manually edit your production data: open the Database tool, select the production database, open My Data, and turn on Enable Editing.
Publishing uses drizzle-kit to apply changes to tables, columns, indexes, constraints, views, and row-level security policies. It doesn’t copy domains, functions, procedures, triggers, or grants, and has limited support for roles. See Unsupported database objects.
Create a production database when you publish
Your published app gets its own production database, separate from the development database you use while building.- Current infrastructure (Helium): Replit automatically creates a production database when you publish, provided your development database contains data.
- Legacy Neon development databases: You create the production database from the publish settings. Open Database settings while publishing, turn on Create production database, and optionally turn on Set up your production database with your current development data to copy your development data across.

First publish: Publishing → Advanced settings → Database settings. Deployment secrets section hidden.
Find which database your app uses
In almost every case, your published app uses its Replit-managed production database: the one listed as Production Database in the Database tool. Both databases use a variable calledDATABASE_URL, but each environment has its own value:
- Project Editor: In your workspace, the Shell, and Agent’s sessions,
DATABASE_URLpoints to the development database. Replit connects it automatically, so on current infrastructure it doesn’t appear in Secrets. - Published app: When you publish, your app gets a separate
DATABASE_URLthat points to the production database.
Seeing
REPLIT_ENVIRONMENT=production in the Shell doesn’t mean your workspace uses the production database. That variable describes Replit’s platform, not your app. Your published app runs with REPLIT_DEPLOYMENT=1.Ask Agent to check
Agent can check your code and Secrets, and for most apps it can look at your production data without changing it. Agent reads production through a read replica: a read-only copy of your production database that’s kept up to date. Very recent changes can take a moment to appear there. A read replica isn’t the same as a deployment preview, which is a separate, temporary copy for testing changes before you publish. Paste this prompt into Agent:Prompt
DATABASE_URL, Secrets has no other database connection, and the newest rows match your live app.
Check in the Database tool and Publishing
1
Open your production database
In the Database tool, open the database menu next to All Databases and select Production.

2
Find a record from your live app
Open My Data and look for something you recently created in your published app, such as a new account or order. If you can see it, your published app writes to this database. Production opens in read-only mode, so browsing it is safe.

3
Compare the connection settings
Open the production database’s Settings tab and find Connection string. Then open Publishing, select Adjust settings, and find 

DATABASE_URL under Production app secrets. Reveal each value and check that both point to the same host. For most apps, that means the same endpoint ID, the part that starts with ep-. A pooled address adds -pooler after the ID, so the full strings don’t have to match exactly.

4
Check Secrets for another database
Open Secrets. Replit’s built-in connection isn’t listed there. If you see a 
DATABASE_URL you added yourself, or another database connection such as SUPABASE_DATABASE_URL, your app may use that database instead. Ask Agent which one your code reads. A NEON_DATABASE_URL secret is your previous development database connection, saved during the database infrastructure upgrade. Your app only uses it if your code reads it.
What the results mean
These checks show how your app is set up. If your live app still shows data you don’t expect, ask Agent to find where your code reads and writes that data.
Connection pooling
By default, production databases do not have connection pooling enabled. Your app connects directly to the database using theDATABASE_URL connection string, so most frameworks should manage their own client-side connection pool.
Each Neon project includes a direct and a pooled connection string. A direct connection string looks like
postgresql://neondb_owner:<password>@<host>.<region>.neon.tech/<db>?sslmode=require.To use the pooled connection, append -pooler to the host: postgresql://neondb_owner:<password>@<host>-pooler.<region>.neon.tech/<db>?sslmode=require.Making safe changes to your production database
When you publish updates that include database changes, Replit walks you through the migration in the Publish pane. It flags changes that could remove data, lets you test your app against a migrated copy of production, and applies the changes only after you approve. For the full flow, see How Publish updates your production database.You may notice a brief downtime for your published app during publishing. Database changes sometimes require stopping your app temporarily to prevent conflicts and protect your data while the changes are applied.
- Removing columns or tables that still contain data
- Changing column data types, which can fail if existing values don’t convert
- Adding required fields without default values to tables that already have rows
- Renaming tables or columns: confirm the rename when Publish asks, or the data is dropped
- Adding unique constraints to tables whose existing rows may violate them
Test changes with a publish preview
A publish preview is a temporary, isolated copy of your production environment where you can test database changes and application updates before they affect real users. Use it to:- Verify your app still works with the database changes applied, across your major user flows
- Confirm existing data was properly migrated and new fields contain expected values
- Watch for performance regressions in query response times
Billing and resource usage
Production database charges include compute usage and storage. The database enters an idle state after five minutes of inactivity, pausing compute billing until another query arrives. Stored data continues to incur storage charges while compute is idle. The Database tool’s landing view shows your Billing Period and Hours of Compute Used. For per-database storage, open the database’s Settings tab. To see usage across every Replit App, go to Account usage in Settings and expand the PostgreSQL Storage and PostgreSQL Compute rows. To learn how Replit charges for database usage, see Deployments and Database Billing.Removing a production database
Recovering a removed database is different from restoring deleted rows or tables. For data changes in an existing database, see Data recovery.How to remove a database
How to remove a database
From the Database tool:
- Select the database, then open the Settings tab
- Select Remove database and confirm by selecting Yes, Remove database
Legacy development database
Prior to December 4th, 2025, the development database was hosted on Neon. All new development databases are hosted on Replit’s own infrastructure (Helium). You can check which one your app uses in the Settings tab: aDATABASE_URL containing neon.tech means legacy Neon; helium means current infrastructure.
Database infrastructure upgrade
Replit is upgrading development databases from Neon to Helium, Replit’s own managed PostgreSQL infrastructure. The upgrade is automatic, runs once per app when you open it in the Project Editor, and preserves all your data. What changes:- Lower latency and more storage: Your database runs on Replit infrastructure alongside your app, and your storage limit increases from 10 GB to 20 GB, or to 50 GB on Pro and Enterprise plans.
- Same database engine: Helium uses PostgreSQL 16, the same version as Neon. Your queries, schemas, and data work the same way.
- Connection updates automatically:
DATABASE_URLis updated to point to Helium. Your previous Neon connection string is saved asNEON_DATABASE_URLin your Secrets for reference. - Individual PG variables removed:
PGHOST,PGPORT,PGUSER, andPGPASSWORDare removed. UseDATABASE_URLinstead.
- Hardcoded Neon connection strings: Update code that references a
neon.techconnection string to use theDATABASE_URLenvironment variable instead. - Custom PostgreSQL roles: Roles and permissions migrate automatically, but role passwords can’t be copied. Reset passwords for custom roles on the new database.
SSL connection errors after the upgrade
If you see errors likeThe server does not support SSL connections, your connection code is forcing an SSL handshake. Neon required SSL; Helium runs locally alongside your app and doesn’t use it. Make the SSL setting conditional on the environment:
Forked apps that shared a database
Under the legacy Neon system, forking an app copied the original app’sDATABASE_URL, so both apps and their published versions connected to the same database. Shared legacy databases were shut down on June 8, 2026. If your published app stopped working or lost access to its data, see Fix a published app using a shared database or contact support.
Next steps
- How Publish updates your production database: Review, test, and approve schema changes when you publish.
- Data recovery: Restore development or production data.
- Connection details: Find your database’s connection string.
- Work with your data: Browse, edit, and query your data.