---
title: Stream database changes in real-time with Prisma Pulse
subtitle: Learn how to create event-driven flows on your backend triggered by changes in
your Neon Postgres database
enableTableOfContents: true
isDraft: false
updatedOn: '2026-02-01T11:47:48.266Z'
---
Neon's Logical Replication feature enables you to subscribe to changes in your database, supporting things like replication or creating event-driven functionality.
[Prisma Pulse](https://www.prisma.io/data-platform/pulse?utm_source=neon&utm_medium=pulse-guide) is a fully managed, production-ready service that connects to your Neon Postgres database, and allows you to stream changes from your database in real-time, integrated closely with [Prisma ORM](https://www.prisma.io/orm?utm_source=neon&utm_medium=pulse-guide).
In this guide, you will learn how to set up Prisma Pulse with your Neon database and create your first event stream.
What can you make with database event-driven architecture?
Set up real-time triggers for your Inngest workflows, re-index your TypeSense search whenever data changes, and much more.
## Prerequisites
- A [Neon account](https://console.neon.tech/)
- A [Prisma Data Platform account](https://pris.ly/pdp?utm_source=neon&utm_medium=pulse-guide)
- Read the [important notices about logical replication in Neon](/docs/guides/logical-replication-neon#important-notices) before you begin
## Enable logical replication in Neon
Enabling logical replication modifies the Postgres `wal_level` configuration parameter, changing it from `replica` to `logical` for all databases in your Neon project. Once the `wal_level` setting is changed to `logical`, it cannot be reverted. Enabling logical replication also restarts all computes in your Neon project, meaning active connections will be dropped and have to reconnect.
To enable logical replication in Neon:
1. Select your project in the Neon Console.
2. On the Neon **Dashboard**, select **Project settings**.
3. Select **Beta**.
4. Click **Enable** to enable logical replication.
You can verify that logical replication is enabled by running the following query from the [Neon SQL Editor](/docs/get-started/query-with-neon-sql-editor):
```sql
SHOW wal_level;
wal_level
-----------
logical
```
## Connect Prisma Pulse
1. If you haven't already done so, create a new account or sign in on the [Prisma Data Platform](https://pris.ly/pdp?utm_source=neon&utm_medium=pulse-guide).
2. In the [Prisma Data Platform Console](https://console.prisma.io?utm_source=neon&utm_medium=pulse-guide) create a new project by clicking the **New project** button.
3. In the **New project** configuration, select **Pulse** as your starting point.
4. Copy your database connection string from Neon into the database connection input field on the Platform Console.
5. Choose a region that is closest to your Neon database.
6. Click **Create project**.
7. We recommend leaving **Event persistence** switched **on** (default). This means Prisma Pulse will automatically store events in the case your server goes down, allowing you to resume again with zero data loss.
8. Click **Enable Pulse**.
9. After Pulse has been enabled (this may take a moment), generate an API key by clicking **Generate API key**. Save this for later.
## Your first stream
### Set up your project
Create a new TypeScript project with Prisma:
```
npx try-prisma -t typescript/starter
```
If you already have a TypeScript project with Prisma client installed, you can skip this.
### From the root of your project, install the Pulse extension
```bash
npm install @prisma/extension-pulse@latest
```
### Extend your Prisma Client instance with the Pulse extension
Add the following to extend your existing Prisma Client instance with the Prisma Pulse extension.
```tsx
import 'dotenv/config';
import { PrismaClient } from '@prisma/client';
import { PrismaNeon } from '@prisma/adapter-neon';
import { withPulse } from '@prisma/extension-pulse';
const adapter = new PrismaNeon({ connectionString: process.env.DATABASE_URL });
const prisma = new PrismaClient({ adapter }).$extends(
withPulse({ apiKey: process.env.PULSE_API_KEY })
);
```
In Prisma 7, you must use a driver adapter since the `url` property is no longer supported in the schema file. See [Connect from Prisma to Neon](/docs/guides/prisma) for complete setup instructions.
### Create your first Pulse stream
The code below subscribes to a `User` model in your Prisma schema. You can use a similar approach to subscribe to any model that exists in your project.
```tsx
import 'dotenv/config';
import { PrismaClient } from '@prisma/client';
import { PrismaNeon } from '@prisma/adapter-neon';
import { withPulse } from '@prisma/extension-pulse';
const adapter = new PrismaNeon({ connectionString: process.env.DATABASE_URL });
const prisma = new PrismaClient({ adapter }).$extends(
withPulse({ apiKey: process.env.PULSE_API_KEY })
);
async function main() {
// Create a stream from the 'User' model
const stream = await prisma.user.stream({ name: 'user-stream' });
for await (const event of stream) {
console.log('Just received an event:', event);
}
}
main();
```
### Trigger a database change
You can use Prisma Studio to easily make changes in your database, to trigger events. Open Prisma Studio by running: `npx prisma studio`
After making a change in Studio, you should see messages appearing in your terminal like this:
```bash
Just received an event: {
action: 'create',
created: {
id: 'clzvgzq4b0d016s28yluse9r1',
name: 'Polly Pulse',
age: 35
},
id: '01J5BCFR8F8DBJDXAQ5YJPZ6VY',
modelName: 'User'
}
```
## What's next?
- [Set up real-time triggers for your Inngest workflows](https://pris.ly/pulse-inngest-router?utm_source=neon&utm_medium=pulse-guide)
- [Re-index your TypeSense search instantly when data changes](https://pris.ly/pulse-typesense?utm_source=neon&utm_medium=pulse-guide)
- [Automatically send onboarding emails with Resend when a new user is created](https://pris.ly/pulse-resend?utm_source=neon&utm_medium=pulse-guide)