diff --git a/.prettierignore b/.prettierignore
index 02b58e212c..112204f181 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -11,3 +11,17 @@ public/
# content files
content/docs/postgresql/query-reference.md
content/docs/functions/json_extract_path.md
+content/docs/introduction/monitoring-page.md
+content/guides/honc.md
+
+# auth docs (contain code samples with special annotations like // [!code ++])
+content/docs/auth/quick-start/tanstack-router.md
+content/docs/auth/quick-start/nextjs-api-only.md
+content/docs/auth/quick-start/nextjs.md
+content/docs/auth/quick-start/react.md
+content/docs/auth/quick-start/react-router-components.md
+content/docs/auth/guides/user-management.md
+content/docs/auth/guides/configure-domains.md
+content/docs/auth/guides/password-reset.md
+content/docs/auth/guides/setup-oauth.md
+content/docs/auth/guides/email-verification.md
diff --git a/content/docs/community/contribution-guide.md b/content/docs/community/contribution-guide.md
index 3d28c56848..fcf73c90ea 100644
--- a/content/docs/community/contribution-guide.md
+++ b/content/docs/community/contribution-guide.md
@@ -26,7 +26,7 @@ Documentation source files are located in the [neondatabase/website](https://git
1. Edit files directly on GitHub.
2. Fork the [neondatabase/website](https://github.com/neondatabase/website) repository, create a branch for your changes, and submit a pull request.
-If you prefer the first option, which is great for edits and small updates, there is an **Edit this page** link at the bottom of each Neon documentation page.
+If you prefer the first option, which is great for edits and small updates, there is an **Edit this page on GitHub** link in the right-hand sidebar of each Neon documentation page.

diff --git a/content/docs/introduction/branch-restore.md b/content/docs/introduction/branch-restore.md
index ce57ac265b..b7373af88d 100644
--- a/content/docs/introduction/branch-restore.md
+++ b/content/docs/introduction/branch-restore.md
@@ -86,9 +86,11 @@ Neon is open source and built in public, so if you are interested in understandi
Similar to the manual restore operation using the Neon Console and API described [here](/docs/guides/branching-pitr), the Restore operation performs a similar set of actions, but automatically:
1. On initiating a restore action, Neon builds a new point-in-time branch by matching your selected timestamp to the corresponding LSN of the relevant entries in the shared WAL record.
-1. The compute for your initial branch is moved to this new branch so that your connection string remains stable.
-1. We rename your new branch to the exact name as your initial branch, so the effect is seamless; it looks and acts like the same branch.
-1. Your initial branch, which now has no compute attached to it, is renamed to _branch_name_old_head_timestamp_ to keep the pre-restore branch available should you need to roll back. Note: When restoring a root branch, both the new branch and the backup branch become root branches with no parent. When restoring a non-root branch, the initial branch (now the backup) becomes the parent of the new branch.
+2. The compute for your initial branch is moved to this new branch so that your connection string remains stable.
+3. We rename your new branch to the exact name as your initial branch, so the effect is seamless; it looks and acts like the same branch.
+4. Your initial branch, which now has no compute attached to it, is renamed to _branch_name_old_head_timestamp_ to keep the pre-restore branch available should you need to roll back.
+
+> When restoring a root branch, both the new branch and the backup branch become root branches with no parent. When restoring a non-root branch, the initial branch (now the backup) becomes the parent of the new branch.
@@ -108,34 +110,54 @@ You can use the Neon Console, CLI, or API to restore branches.
### Restoring from history
-Use the **Restore** page to restore a branch to an earlier timestamp in its history.
+Use the **Backup & Restore** page to restore a branch to an earlier point in time in its own or another branch's history.
+
+First select the branch you want to restore from the left-hand branch list, then select the **Backup & Restore** tab.
+
+
+
+#### Restore to the earlier state of the production branch
+
+1. Make sure the **Enhanced view** toggle is enabled.
+ 
+2. Select the branch you want to restore in the sidebar.
+3. Select the point in time you want to restore to using the timestamp selector. If you'd like to verify the data from that moment, click **Preview data**. This opens a *Preview historic data** window where you can browse, query, or compare the schema of your branch at the chosen timestamp.
+4. Click **Restore to point in time** once you've selected the desired timestamp.
+
+ A confirmation window opens giving you details about the restore operation. Review these details to make sure you've made the correct selections.
-First, select the **Branch to restore**. This is the target branch for the restore operation.
+5. Click **Restore** to complete the operation.
-
+This operation resets the current branch to the selected point in time in the production branch's history. All databases on the selected branch are instantly updated with the data and schema from the chosen point in time.
-#### To restore a branch from its own history:
+#### Restore to an earlier point in its own history
-1. Make sure the **From history** tab is selected.
-1. Choose your timestamp or switch to LSN.
-1. Click **Next**.
+1. Disable the **Enhanced view** toggle.
+2. Make sure the **From history** tab is selected.
+ 
+3. Choose your timestamp or switch to LSN.
+4. Click **Schema Diff** to compare the current branch with the selected point in time. This opens a Schema Diff window showing a side-by-side visual comparison of the two schemas. Review the differences, close the window when you're finished, or repeat as needed until you identify the correct point in time.
+5. Click **Proceed**.
- A confirmation window opens giving you details about the pending restore operation. Review these details to make sure you've made the correct selections.
+ A confirmation window opens giving you details about the restore operation. Review these details to make sure you've made the correct selections.
-1. Click **Restore** to complete the operation.
+6. Click **Restore** to complete the operation.
+ This operation resets the current branch to the selected point in time in its own history. All databases on the selected branch are instantly updated with the data and schema from the chosen point in time.
-#### To restore from another branch:
+#### Restore to the earlier or latest state of another branch
-1. Switch to the **From another branch** tab.
-1. Select the source branch that you want to restore data from.
-1. By default, the operation pulls the latest data from the source branch. If you want to pull from an earlier point in time, disable **Restore from latest data (head)**.
+1. Disable the **Enhanced view** toggle.
+2. Make sure the **From another branch** tab is selected.
+3. In the **Restore from** dropdown, choose the source branch.
+4. Select either **Timestamp** or **LSN** to define a point in time on the source branch. If you prefer to use the branch’s most recent data instead, you can enable **Restore from latest data (head)**.
- The timestamp selector will appear.
+5. Review the restore details and click **Proceed**.
-1. Choose your timestamp or switch to the LSN input.
-1. Click **Next**, confirm the details of the operation, then click **Restore** to complete.
+ A confirmation window opens giving you details about the restore operation. Review these details to make sure you've made the correct selections.
-All databases on the selected branch are instantly updated with the data and schema from the chosen point in time. From the **Branches** page, you can now see a backup branch was created with the state of the branch at the restore point in time.
+6. Click **Restore** to complete the operation.
+
+All databases on the selected branch are instantly updated with the data and schema from the chosen point in time of the source branch.
Backup branches created when restoring a root branch from another branch cannot be deleted. See [Deleting backup branches](#deleting-backup-branches) for details.
@@ -227,14 +249,17 @@ curl --request POST \
In this example, we are restoring a development branch `dev/alex` (branch ID `br-twilight-river-31791249`) to the latest data (head) of its parent branch `br-jolly-star-07007859`. Note that we don't include any time identifier or backup branch name; this is a straight reset of the branch to the head of its parent.
```bash shouldWrap
-curl --request POST \ // [!code word:br-twilight-river-31791249]
+curl --request POST \
+ # [!code word:br-twilight-river-31791249]
--url https://console.neon.tech/api/v2/projects/floral-disk-86322740/branches/br-twilight-river-31791249/restore \
--header 'Accept: application/json' \
--header "Authorization: Bearer $NEON_API_KEY" \
- --header 'Content-Type: application/json' \ // [!code word:br-jolly-star-07007859]
+ --header 'Content-Type: application/json' \
--data '
{
- "source_branch_id": "br-jolly-star-07007859"}
+ # [!code word:br-jolly-star-07007859]
+ "source_branch_id": "br-jolly-star-07007859"
+}
' | jq
```
@@ -243,13 +268,15 @@ curl --request POST \ // [!code word:br-twilight-river-31791249]
In this example, we are restoring branch `dev/jordan` (branch ID `br-damp-smoke-91135977`) to branch `dev/alex` (branch ID `br-twilight-river-31791249`) at the point in time of `Feb 26, 2024 12:00:00.000 AM`.
```bash shouldWrap
-curl --request POST \ // [!code word:br-damp-smoke-91135977]
+curl --request POST \
+ # [!code word:br-damp-smoke-91135977]
--url https://console.neon.tech/api/v2/projects/floral-disk-86322740/branches/br-damp-smoke-91135977/restore \
--header 'Accept: application/json' \
- --header "Authorization: Bearer $NEON_API_KEY" \ // [!code word:br-jolly-star-07007859]
+ --header "Authorization: Bearer $NEON_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
+ # [!code word:br-jolly-star-07007859]
"source_branch_id": "br-jolly-star-07007859",
"source_timestamp": "2024-02-26T12:00:00Z"
}
diff --git a/content/docs/introduction/regions.md b/content/docs/introduction/regions.md
index 2b8c0b64fe..72343e1736 100644
--- a/content/docs/introduction/regions.md
+++ b/content/docs/introduction/regions.md
@@ -26,10 +26,6 @@ Neon offers project deployment in multiple AWS and Azure regions. To minimize la
- 🇺🇸 Azure West US 3 region (Arizona) — `azure-westus3`
- 🇩🇪 Azure Germany West Central region (Frankfurt) — `azure-gwc`
-
-For information about Neon deployment options on Azure, see [Neon on Azure](/docs/manage/azure).
-
-
## Request a region
diff --git a/content/docs/manage/branches.md b/content/docs/manage/branches.md
index 4523b50a59..780423d48e 100644
--- a/content/docs/manage/branches.md
+++ b/content/docs/manage/branches.md
@@ -38,10 +38,9 @@ To create a branch:
3. Click **New branch** to open the branch creation dialog.
4. Specify a branch name.
5. Select a **branch setup** option. If you're interested in schema-only branches, see [Schema-only branches](/docs/guides/branching-schema-only).
-
-
-When creating a branch with past data, you can only specify a date and time that falls within your [restore window](/docs/introduction/restore-window).
-
+
+ When creating a branch with past data, you can only specify a date and time that falls within your [restore window](/docs/introduction/restore-window).
+
6. By default, **Automatically delete branch after** is checked with 1 day selected to help prevent unused branches from accumulating. You can choose 1 hour, 1 day, or 7 days, or uncheck to disable. This is useful for CI/CD pipelines and short-lived development environments. Note: This default only applies when creating branches through the Console; API and CLI branches have no expiration by default. Refer to our [Branch expiration guide](/docs/guides/branch-expiration) for details.
7. Click **Create new branch**.
diff --git a/content/docs/manage/operations.md b/content/docs/manage/operations.md
index 5403f8757e..381fd87055 100644
--- a/content/docs/manage/operations.md
+++ b/content/docs/manage/operations.md
@@ -31,14 +31,13 @@ You can view system operations via the Neon Console, [Neon CLI](/docs/reference/
-You can view system operations via the **Monitoring** page in the Neon Console.
+To view system operations for a specific branch, open the **Monitoring** page in the Neon Console. Select the desired branch from the left-hand sidebar, and the console will display the corresponding system operations.

Operation details include:
- **Operation**: The action performed by the operation.
-- **Branch**: The branch on which the operation was performed.
- **Compute**: The compute on which the operation occurred.
- **Operation status**: The status of the operation.
- **Duration**: The duration of the operation.
diff --git a/content/guides/electric-sql.md b/content/guides/electric-sql.md
index 9a64f9e323..2b0d7dd09f 100644
--- a/content/guides/electric-sql.md
+++ b/content/guides/electric-sql.md
@@ -48,7 +48,7 @@ ElectricSQL requires a Postgres database with logical replication enabled. You'l
Make sure to turn off connection pooling in the connection string modal. This is essential for Electric to maintain a persistent connection to the Neon database.
- 
+ 
## Setting up Electric
diff --git a/content/guides/honc.md b/content/guides/honc.md
index b2968ab748..4cf4805180 100644
--- a/content/guides/honc.md
+++ b/content/guides/honc.md
@@ -172,8 +172,7 @@ The `create-honc-app` template comes with an example schema (for `users`) in `sr
import { pgTable, serial, text, boolean, timestamp } from 'drizzle-orm/pg-core';
export type NewUser = typeof users.$inferInsert; // [!code --]
- export const users = pgTable('users', {
- // [!code --]
+ export const users = pgTable('users', { // [!code --]
id: uuid('id').defaultRandom().primaryKey(), // [!code --]
name: text('name').notNull(), // [!code --]
email: text('email').notNull(), // [!code --]
@@ -182,8 +181,7 @@ The `create-honc-app` template comes with an example schema (for `users`) in `sr
updatedAt: timestamp('updated_at').defaultNow().notNull(), // [!code --]
}); // [!code --]
- export const tasks = pgTable('tasks', {
- // [!code ++]
+ export const tasks = pgTable('tasks', { // [!code ++]
id: serial('id').primaryKey(), // [!code ++]
title: text('title').notNull(), // [!code ++]
description: text('description'), // [!code ++]
@@ -236,53 +234,42 @@ The `src/index.ts` file generated by `create-honc-app` will contain Hono routes
// ... import statements and middleware for database connection
const UserSchema = z // [!code --]
- .object({
- // [!code --]
- id: z.number().openapi({
- // [!code --]
+ .object({ // [!code --]
+ id: z.number().openapi({ // [!code --]
example: 1, // [!code --]
}), // [!code --]
- name: z.string().openapi({
- // [!code --]
+ name: z.string().openapi({ // [!code --]
example: 'Nikita', // [!code --]
}), // [!code --]
- email: z.string().email().openapi({
- // [!code --]
+ email: z.string().email().openapi({ // [!code --]
example: 'nikita@neon.tech', // [!code --]
}), // [!code --]
}) // [!code --]
.openapi({ ref: 'User' }); // [!code --]
const TaskSchema = z // [!code ++]
- .object({
- // [!code ++]
- id: z.string().openapi({
- // [!code ++]
+ .object({ // [!code ++]
+ id: z.string().openapi({ // [!code ++]
description: 'The unique identifier for the task.', // [!code ++]
example: '1', // [!code ++]
}), // [!code ++]
- title: z.string().openapi({
- // [!code ++]
+ title: z.string().openapi({ // [!code ++]
description: 'The title of the task.', // [!code ++]
example: 'Learn HONC', // [!code ++]
}), // [!code ++]
- description: z.string().nullable().optional().openapi({
- // [!code ++]
+ description: z.string().nullable().optional().openapi({ // [!code ++]
description: 'A detailed description of the task.', // [!code ++]
example: 'Build a complete task API with the HONC Stack', // [!code ++]
}), // [!code ++]
- completed: z.boolean().openapi({
- // [!code ++]
+ completed: z.boolean().openapi({ // [!code ++]
description: 'Indicates if the task is completed.', // [!code ++]
example: false, // [!code ++]
}), // [!code ++]
- createdAt: z.string().datetime().openapi({
- // [!code ++]
+ createdAt: z.string().datetime().openapi({ // [!code ++]
description: 'The date and time when the task was created.', // [!code ++]
example: new Date().toISOString(), // [!code ++]
}), // [!code ++]
- updatedAt: z.string().datetime().openapi({
- // [!code ++]
+ updatedAt: z.string().datetime().openapi({ // [!code ++]
description: 'The date and time when the task was last updated.', // [!code ++]
example: new Date().toISOString(), // [!code ++]
}), // [!code ++]
@@ -290,14 +277,11 @@ The `src/index.ts` file generated by `create-honc-app` will contain Hono routes
.openapi({ ref: 'Task' }); // [!code ++]
const NewTaskSchema = z // [!code ++]
- .object({
- // [!code ++]
- title: z.string().min(1, 'Title cannot be empty').openapi({
- // [!code ++]
+ .object({ // [!code ++]
+ title: z.string().min(1, 'Title cannot be empty').openapi({ // [!code ++]
example: 'Deploy to Cloudflare', // [!code ++]
}), // [!code ++]
- description: z.string().nullable().optional().openapi({
- // [!code ++]
+ description: z.string().nullable().optional().openapi({ // [!code ++]
example: 'Finalize deployment steps for the task API.', // [!code ++]
}), // [!code ++]
}) // [!code ++]
diff --git a/content/guides/self-hosting-umami-neon.md b/content/guides/self-hosting-umami-neon.md
index a7cceccdbc..5d38376769 100644
--- a/content/guides/self-hosting-umami-neon.md
+++ b/content/guides/self-hosting-umami-neon.md
@@ -39,7 +39,7 @@ To get started, go to the [Neon Console](https://console.neon.tech/app/projects)
You will be presented with a dialog that provides a connection string of your database. Enable the **Connection pooling** toggle for a pooled connection string.
-
+
All Neon connection strings have the following format:
diff --git a/content/guides/strapi-cms.md b/content/guides/strapi-cms.md
index b310b7e55e..714852ea4a 100644
--- a/content/guides/strapi-cms.md
+++ b/content/guides/strapi-cms.md
@@ -36,7 +36,7 @@ To get started, go to the [Neon console](https://console.neon.tech/app/projects)
You will then be presented with a dialog that provides a connection string of your database. Enable the **Connection pooling** toggle for a pooled connection string.
-
+
All Neon connection strings have the following format:
@@ -320,9 +320,11 @@ npm run build && npm run preview
## Scale-to-zero with Postgres (powered by Neon)
-Interestingly, during the entire process of building this application, you have used Neon's **Scale-to-zero** feature which places your Postgres compute endpoint into an idle state after 5 minutes of inactivity. Click the **Operations** button in your Neon console sidebar to see when the compute was started and automatically suspended to reduce compute usage.
+Interestingly, during the entire process of building this application, you have used Neon's **Scale-to-zero** feature which places your Postgres compute endpoint into an idle state after 5 minutes of inactivity.
-
+Click on the **Monitoring** button in the Neon Console sidebar, then open **System operations** to see when the compute was started and automatically suspended to reduce usage.
+
+
## Summary
diff --git a/content/guides/zero.md b/content/guides/zero.md
index 1d32aaf3b5..6e149258d3 100644
--- a/content/guides/zero.md
+++ b/content/guides/zero.md
@@ -43,7 +43,7 @@ Zero requires a Postgres database (version 15+) with logical replication enabled
Make sure to turn off connection pooling in the connection string modal. This is essential for `zero-cache` to maintain a persistent connection to the Neon database.
- 
+ 
## Setting up the `hello-zero` example application
diff --git a/public/docs/changelog/operations_monitoring.png b/public/docs/changelog/operations_monitoring.png
index b060d701ca..e84d8f7a91 100644
Binary files a/public/docs/changelog/operations_monitoring.png and b/public/docs/changelog/operations_monitoring.png differ
diff --git a/public/docs/community/edit_this_page.png b/public/docs/community/edit_this_page.png
index 9071bf991b..c185f85f07 100644
Binary files a/public/docs/community/edit_this_page.png and b/public/docs/community/edit_this_page.png differ
diff --git a/public/docs/connect/cold_start_compute_config.png b/public/docs/connect/cold_start_compute_config.png
index 37e352bd57..2a70769e64 100644
Binary files a/public/docs/connect/cold_start_compute_config.png and b/public/docs/connect/cold_start_compute_config.png differ
diff --git a/public/docs/connect/compute_endpoint_state.png b/public/docs/connect/compute_endpoint_state.png
index 61babfd7b3..b125a4bc4b 100644
Binary files a/public/docs/connect/compute_endpoint_state.png and b/public/docs/connect/compute_endpoint_state.png differ
diff --git a/public/docs/extensions/edit_compute_endpoint.png b/public/docs/extensions/edit_compute_endpoint.png
index 2dffce762c..06892abef0 100644
Binary files a/public/docs/extensions/edit_compute_endpoint.png and b/public/docs/extensions/edit_compute_endpoint.png differ
diff --git a/public/docs/guides/branch_restore_backup.png b/public/docs/guides/branch_restore_backup.png
index 4af537dc37..fcc3d21525 100644
Binary files a/public/docs/guides/branch_restore_backup.png and b/public/docs/guides/branch_restore_backup.png differ
diff --git a/public/docs/guides/branch_restore_backup_file.png b/public/docs/guides/branch_restore_backup_file.png
index b66576b796..a15861a4a4 100644
Binary files a/public/docs/guides/branch_restore_backup_file.png and b/public/docs/guides/branch_restore_backup_file.png differ
diff --git a/public/docs/guides/branch_restore_from_history.png b/public/docs/guides/branch_restore_from_history.png
new file mode 100644
index 0000000000..4128a86694
Binary files /dev/null and b/public/docs/guides/branch_restore_from_history.png differ
diff --git a/public/docs/guides/branch_restore_from_production_branch.png b/public/docs/guides/branch_restore_from_production_branch.png
new file mode 100644
index 0000000000..4dbbfe19a6
Binary files /dev/null and b/public/docs/guides/branch_restore_from_production_branch.png differ
diff --git a/public/docs/guides/branch_restore_page.png b/public/docs/guides/branch_restore_page.png
new file mode 100644
index 0000000000..bd9c43ee27
Binary files /dev/null and b/public/docs/guides/branch_restore_page.png differ
diff --git a/public/docs/guides/branch_restore_timestamp.png b/public/docs/guides/branch_restore_timestamp.png
deleted file mode 100644
index f59e90203e..0000000000
Binary files a/public/docs/guides/branch_restore_timestamp.png and /dev/null differ
diff --git a/public/docs/guides/neon-console-direct-connection-string.png b/public/docs/guides/neon-console-direct-connection-string.png
deleted file mode 100644
index b9998b137d..0000000000
Binary files a/public/docs/guides/neon-console-direct-connection-string.png and /dev/null differ
diff --git a/public/docs/import/dms_neon_table_data.png b/public/docs/import/dms_neon_table_data.png
index 65a04f1f36..e80a6ff36e 100644
Binary files a/public/docs/import/dms_neon_table_data.png and b/public/docs/import/dms_neon_table_data.png differ
diff --git a/public/docs/introduction/autoscaling_config.png b/public/docs/introduction/autoscaling_config.png
index 95a4ee299a..eb658f8721 100644
Binary files a/public/docs/introduction/autoscaling_config.png and b/public/docs/introduction/autoscaling_config.png differ
diff --git a/public/docs/introduction/autosuspend_config.png b/public/docs/introduction/autosuspend_config.png
index d82b0af52e..6456540474 100644
Binary files a/public/docs/introduction/autosuspend_config.png and b/public/docs/introduction/autosuspend_config.png differ
diff --git a/public/docs/introduction/compute_state.png b/public/docs/introduction/compute_state.png
index dea543e012..4becca8a26 100644
Binary files a/public/docs/introduction/compute_state.png and b/public/docs/introduction/compute_state.png differ
diff --git a/public/docs/oauth/consent.png b/public/docs/oauth/consent.png
index 2cac7d02cf..4863e8d82e 100644
Binary files a/public/docs/oauth/consent.png and b/public/docs/oauth/consent.png differ
diff --git a/public/guides/images/self-hosting-umami-neon/1689d44f-4c5d-4b2a-8d13-32407f9c8781.png b/public/guides/images/self-hosting-umami-neon/1689d44f-4c5d-4b2a-8d13-32407f9c8781.png
deleted file mode 100644
index cfc099910f..0000000000
Binary files a/public/guides/images/self-hosting-umami-neon/1689d44f-4c5d-4b2a-8d13-32407f9c8781.png and /dev/null differ
diff --git a/public/guides/images/strapi-cms/20b94d5f-aff4-4594-b60b-3a65d4fc884c.png b/public/guides/images/strapi-cms/20b94d5f-aff4-4594-b60b-3a65d4fc884c.png
deleted file mode 100644
index f3c4570cfa..0000000000
Binary files a/public/guides/images/strapi-cms/20b94d5f-aff4-4594-b60b-3a65d4fc884c.png and /dev/null differ
diff --git a/public/guides/images/strapi-cms/ee753f7d-3da8-4a4c-84c5-be7b6cdce486.png b/public/guides/images/strapi-cms/ee753f7d-3da8-4a4c-84c5-be7b6cdce486.png
deleted file mode 100644
index d87f64d5b7..0000000000
Binary files a/public/guides/images/strapi-cms/ee753f7d-3da8-4a4c-84c5-be7b6cdce486.png and /dev/null differ