Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,20 @@ Connection pool
</DefinitionList>
```

**Faq + FaqItem** — SEO-friendly frequently-asked-questions section for the end of a page. This is the standard FAQ component for both docs and guides. Prefer it over ad-hoc `### question` headings, `**Q:/A:**` text, or `DefinitionList` for FAQs. It emits `FAQPage` schema.org JSON-LD (eligible for Google FAQ rich results) and renders each answer with native `<details>`/`<summary>`, so answers stay crawlable even when collapsed. Add a `## Frequently asked questions` heading above it (sentence case) so the section appears in the table of contents. Answers accept full markdown (lists, tables, links, code); keep blank lines around block content. Place `<NeedHelp/>` after `</Faq>`, not inside an item.

```mdx
## Frequently asked questions

<Faq>

<FaqItem question="Why must I poll operations after restore?">
With `finalize_restore: true`, Neon moves compute resources to the new state. Until operations complete, connections still point to the old compute.
</FaqItem>

</Faq>
```

### Interactive elements

**CheckList + CheckItem** — Interactive checklist saved in browser local storage. Best used alongside Steps.
Expand Down
40 changes: 39 additions & 1 deletion content/docs/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
updatedOn: '2026-08-20T15:50:59.873Z'
updatedOn: '2026-08-26T05:16:28.993Z'
---

# Docs
Expand Down Expand Up @@ -819,6 +819,44 @@ Another term for smoke test

</details>

## FAQ

Use the `Faq` component with `FaqItem` items to add a frequently-asked-questions section at the end of a page. This is the standard component for FAQs across docs and guides. Prefer it over ad-hoc `### question` headings, bold `**Q:/A:**` text, or `DefinitionList` so every FAQ looks and behaves the same.

The component is built for SEO. It emits `FAQPage` [schema.org](https://schema.org/FAQPage) JSON-LD structured data (making the page eligible for Google's FAQ rich results), and it renders each answer with native `<details>`/`<summary>` so the answer text stays in the DOM even when collapsed, keeping it crawlable and accessible.

Add a `## Frequently asked questions` heading above the component so the section shows up in the table of contents, then wrap the questions:

```md
## Frequently asked questions

<Faq>

<FaqItem question="Why must I poll operations after restore?">
With `finalize_restore: true`, Neon moves compute resources to the new state. Until operations complete, connections still point to the old compute.
</FaqItem>

<FaqItem question="What if we need multiple preview environments?">
Restore different snapshots to new branches. Each restore creates a new branch with its own connection string.
</FaqItem>

</Faq>
```

### Props

`FaqItem`:

- `question` (required) — the question text. Rendered as an `<h3>` inside the `<summary>`, and used verbatim as the `name` in the JSON-LD.
- `id` (optional) — anchor id for the item. Defaults to a slug generated from `question`, so `#your-question-text` deep links work without setting it.
- `defaultOpen` (optional) — set to `true` to render the item expanded on load.

### Notes

- Answers accept full markdown: paragraphs, lists, tables, links, images, and code. Keep a blank line above and below block content inside `FaqItem` so MDX parses it.
- Each question becomes an `<h3>` inside the component but does **not** appear in the table of contents (the TOC is built from markdown headings, not rendered JSX). The single `## Frequently asked questions` heading is the TOC entry.
- Put shared blocks like `<NeedHelp/>` after `</Faq>`, not inside a `FaqItem`.

## Detail Icon Cards

`DetailIconCards` is a custom MDX component that displays data in a card format. Each card contains icon, title, href and description. This layout is especially useful for presenting grouped information in a visually pleasing and easy-to-understand way.
Expand Down
31 changes: 18 additions & 13 deletions content/docs/ai/ai-database-versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ summary: >-
connection string stable, or when you need temporary preview branches from any
saved version. Snapshot limits and storage pricing vary by plan.
enableTableOfContents: true
updatedOn: '2026-08-07T17:19:40.308Z'
updatedOn: '2026-08-26T05:16:28.993Z'
---

<Admonition type="note">
Expand Down Expand Up @@ -378,23 +378,28 @@ Proper cleanup reduces costs and keeps your project manageable:
- **Cleanup strategy**: Set `expires_at` on temporary snapshots and preview branches. Delete orphaned branches (for example, `production (old)`) created during restores.
- **Version metadata**: Keep version metadata separate to preserve audit trail across restores.

## FAQ
## Frequently asked questions

<DefinitionList>
Why must I poll operations after restore?
: With `finalize_restore: true`, Neon moves compute resources to the new state. Until operations complete, connections still point to the old compute.
<Faq>

What happens to my active branch when I restore?
: When restoring with `finalize_restore: true`, your current active branch becomes orphaned (disconnected from the compute endpoint) and is renamed with "(old)" appended. This orphaned branch preserves your pre-restore state temporarily, but you should delete it after verifying the restore to avoid storage costs.
<FaqItem question="Why must I poll operations after restore?">
With `finalize_restore: true`, Neon moves compute resources to the new state. Until operations complete, connections still point to the old compute.
</FaqItem>

What if we need multiple preview environments?
: Restore different snapshots to new branches using `finalize_restore: false`. Each restore creates a new branch with its own connection string.
<FaqItem question="What happens to my active branch when I restore?">
When restoring with `finalize_restore: true`, your current active branch becomes orphaned (disconnected from the compute endpoint) and is renamed with "(old)" appended. This orphaned branch preserves your pre-restore state temporarily, but you should delete it after verifying the restore to avoid storage costs.
</FaqItem>

Why use snapshots instead of branches for versioning?
: **Snapshots**: Restoring a snapshot onto your active branch (`finalize_restore: true`) replaces the data but keeps the same database connection string. This is ideal for production rollbacks.
: **Branches**: Creating a new branch always generates a new connection string, which would require reconfiguring your application for every version change. Branches also create dependency chains that can complicate deletion.
<FaqItem question="What if we need multiple preview environments?">
Restore different snapshots to new branches using `finalize_restore: false`. Each restore creates a new branch with its own connection string.
</FaqItem>

</DefinitionList>
<FaqItem question="Why use snapshots instead of branches for versioning?">
- **Snapshots**: Restoring a snapshot onto your active branch (`finalize_restore: true`) replaces the data but keeps the same database connection string. This is ideal for production rollbacks.
- **Branches**: Creating a new branch always generates a new connection string, which would require reconfiguring your application for every version change. Branches also create dependency chains that can complicate deletion.
</FaqItem>

</Faq>

## Summary

Expand Down
51 changes: 50 additions & 1 deletion content/docs/community/component-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ summary: >-
Use this page when choosing between similar components or looking up correct
prop names and MDX syntax.
enableTableOfContents: true
updatedOn: '2026-07-15T00:08:00.682Z'
updatedOn: '2026-08-26T05:16:28.993Z'
---

A practical guide for the most commonly used MDX components in Neon documentation. This guide focuses on components you'll use most frequently when writing documentation.
Expand Down Expand Up @@ -657,6 +657,55 @@ Individual checklist items used within CheckList components.
- `href` prop is optional for anchor linking
- Content is the description text

---

### Faq / FaqItem

The standard, SEO-friendly frequently-asked-questions section for the end of docs and guides. Use it instead of ad-hoc `### question` headings, `**Q:/A:**` text, or `DefinitionList` for FAQs, so every FAQ looks and behaves the same. It emits `FAQPage` schema.org JSON-LD (eligible for Google's FAQ rich results) and uses native collapsible `<details>`, so answers stay crawlable and accessible even when collapsed.
Comment thread
rishi-raj-jain marked this conversation as resolved.
Outdated

Add a `## Frequently asked questions` heading above the component (sentence case) so the section appears in the table of contents.

```mdx
## Frequently asked questions

<Faq>

<FaqItem question="What is a branch?">
A branch is a copy-on-write clone of your data that you can create from a current or past state.
</FaqItem>

<FaqItem question="Does creating a branch affect my production database?">
No. Creating a branch does not increase load on the parent branch or affect its performance.
</FaqItem>

</Faq>
```

**Live preview:**

## Frequently asked questions

<Faq>

<FaqItem question="What is a branch?">
A branch is a copy-on-write clone of your data that you can create from a current or past state.
</FaqItem>

<FaqItem question="Does creating a branch affect my production database?">
No. Creating a branch does not increase load on the parent branch or affect its performance.
</FaqItem>

</Faq>

**Usage Notes:**

- `FaqItem` requires a `question` prop. It renders as an `<h3>` inside the summary and is used verbatim in the JSON-LD.
- `id` (optional) sets the anchor; it defaults to a slug of the question, so `#your-question` deep links work.
- `defaultOpen` (optional) renders an item expanded on load.
- Answers accept full markdown (lists, tables, links, images, code). Keep blank lines around block content.
- Questions do not appear in the table of contents; the `## Frequently asked questions` heading is the single TOC entry.
- Put shared blocks like `<NeedHelp/>` after `</Faq>`, not inside an item.

### CTA (Call to Action)

Prominent call-to-action buttons for important actions.
Expand Down
24 changes: 18 additions & 6 deletions content/docs/guides/vercel-branch-cleanup.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ summary: >-
Stale branches count toward plan branch limits and incur storage costs even
after being auto-archived.
enableTableOfContents: true
updatedOn: '2026-08-18T10:29:02.410Z'
updatedOn: '2026-08-26T05:16:28.993Z'
---

<InfoBlock>
Expand Down Expand Up @@ -172,29 +172,41 @@ Preview branches that aren't cleaned up still consume resources and count toward

---

## FAQ
## Frequently asked questions

### Why aren't my preview branches being deleted?
<Faq>

<FaqItem question="Why aren't my preview branches being deleted?">

The most common cause is Vercel's deployment retention policy. With the default 6-month retention, preview branches can persist for months after a PR is closed. To fix this:

1. [Reduce your Vercel retention policy](#reducing-vercels-retention-policy) for pre-production deployments
2. [Set up a GitHub Action](#github-action-on-pr-close-recommended) to delete branches immediately on PR close

### I reduced retention but branches are still not being deleted
</FaqItem>

<FaqItem question="I reduced retention but branches are still not being deleted">

Vercel keeps a minimum number of recent deployments regardless of your retention settings. The project's `deploymentsToKeep` value (typically 10, visible via the [Vercel project API](https://vercel.com/docs/rest-api/projects/retrieve-a-list-of-projects)) controls how many are protected. Neon branches tied to these deployments won't be auto-deleted. Use the [GitHub Action workaround](#github-action-on-pr-close-recommended) or [manual cleanup](#cleaning-up-existing-stale-branches) for these branches.

### Which integration type gives faster cleanup?
</FaqItem>

<FaqItem question="Which integration type gives faster cleanup?">

It depends on your deployment cadence.

The [Neon-Managed Integration](/docs/guides/neon-managed-vercel-integration) deletes branches based on Git branch deletion rather than Vercel's deployment retention policy, so it avoids the months-long delays described on this page. But cleanup only runs when the next preview deployment is created. At that point, Neon checks for deleted Git branches and removes the corresponding Neon branches. If no new preview deployments happen, stale branches accumulate until activity resumes.

The **Vercel-Managed Integration** has predictable but slow cleanup tied to deployment retention. The **Neon-Managed Integration** has fast cleanup during active development but no cleanup during idle periods. Both benefit from the [GitHub Action approach](#github-action-on-pr-close-recommended), which works regardless of integration type and removes branches immediately on PR close.

### How do I clean up branches that already accumulated?
</FaqItem>

<FaqItem question="How do I clean up branches that already accumulated?">

See [Cleaning up existing stale branches](#cleaning-up-existing-stale-branches) above for options including the Neon Console, CLI, and API.

</FaqItem>

</Faq>

<NeedHelp/>
18 changes: 13 additions & 5 deletions content/docs/guides/vercel-managed-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ redirectFrom:
- /docs/guides/vercel-native-integration
- /docs/guides/vercel-native-integration-previews
enableTableOfContents: true
updatedOn: '2026-08-04T08:34:18.168Z'
updatedOn: '2026-08-26T05:16:28.993Z'
---

<InfoBlock>
Expand Down Expand Up @@ -158,7 +158,7 @@ Because your database is managed by Vercel, you can only perform these actions *
- Monitor usage via **Storage → Usage** (also available in Neon Console)
- Create additional databases (each becomes a new Neon project)
- Rename or delete a database (deleting removes the underlying Neon project permanently)
- Manage members / collaborators (handled through Vercel "Members", not the Neon Console) - (see [FAQ](#frequently-asked-questions-faq) for details)
- Manage members / collaborators (handled through Vercel "Members", not the Neon Console) - (see [FAQ](#frequently-asked-questions) for details)
- Delete the Neon organization (only happens automatically if you uninstall the integration)
- Update connection-string environment variables (prefix changes, etc.)

Expand Down Expand Up @@ -255,16 +255,20 @@ Branches you don't delete are eventually [archived](/docs/guides/branch-archivin
- Cannot install if you currently use Vercel Postgres (deprecated) - contact Vercel about transitioning
- **Preview deployment environment variables**: Branch-specific connection variables cannot be accessed or viewed in your Vercel project's environment variable settings (they're injected at deployment time only and not stored to avoid manual cleanup when branches are deleted)

## Frequently Asked Questions (FAQ)
## Frequently asked questions

### Why can't I see Vercel team members in the Neon Console?
<Faq>

<FaqItem question="Why can't I see Vercel team members in the Neon Console?">

Users added to your Vercel team aren't automatically visible in the Neon organization. Team members only appear in Neon when they:

1. Click the **Open in Neon** button from the Vercel integration page
2. Complete the authentication flow

### Why do Vercel team members with 'Member' role have the 'Admin' role in Neon?
</FaqItem>

<FaqItem question="Why do Vercel team members with 'Member' role have the 'Admin' role in Neon?">

This occurs due to how Vercel's JWT tokens map roles to the integration. According to [Vercel's documentation](https://vercel.com/docs/integrations/create-integration/marketplace-api#user-authentication), the JWT token's `user_role` claim doesn't directly map Vercel team roles:

Expand All @@ -273,4 +277,8 @@ This occurs due to how Vercel's JWT tokens map roles to the integration. Accordi

As a result, most active Vercel team members receive Admin access in the Neon organization. This is expected behavior and ensures team members can fully manage database resources.

</FaqItem>

</Faq>

<NeedHelp/>
28 changes: 22 additions & 6 deletions content/docs/import/azure-regions-deprecation.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,15 @@ If none of these fit, [export your data in Postgres-compatible form](/docs/guide

## Frequently asked questions

### Why are these regions being deprecated?
<Faq>

<FaqItem question="Why are these regions being deprecated?">

We're focusing our infrastructure investment where our customers want to run Neon. Most Neon projects run in AWS regions, so concentrating there lets us ship features and reliability improvements faster, rather than splitting effort to maintain Azure in parallel. For teams that need Azure, [Databricks Lakebase](/docs/guides/migrate-neon-to-lakebase) runs the same Postgres technology as Neon and supports Azure regions.

### How do I find out which region a project is in?
</FaqItem>

<FaqItem question="How do I find out which region a project is in?">

You can check from the Console, the CLI, or the API:

Expand All @@ -70,7 +74,9 @@ You can check from the Console, the CLI, or the API:

![Project settings widget showing the project region](/docs/import/azure-regions-deprecation/project-settings-region.png)

### Which AWS region should I migrate to?
</FaqItem>

<FaqItem question="Which AWS region should I migrate to?">

To keep latency similar, choose the AWS region closest to your current Azure region. For the deprecated Azure regions, the nearest AWS equivalents are:

Expand All @@ -82,16 +88,26 @@ To keep latency similar, choose the AWS region closest to your current Azure reg

If your workload has specific latency or data residency requirements, pick the region closest to your users.

### What changes about my project when I migrate to a new region?
</FaqItem>

<FaqItem question="What changes about my project when I migrate to a new region?">

A region migration creates a **new** Neon project in the target region. The new project gets a new hostname, so you'll need to update connection strings in your application. The new project also has a different project ID. Project-level settings (branches, integrations, autoscaling, IP Allow rules, monitoring) are configured per project. See the [migration guide](/docs/import/migrate-neon-to-another-region) for method-specific steps.

### Should I take a backup before migrating?
</FaqItem>

<FaqItem question="Should I take a backup before migrating?">

If your migration method uses `pg_dump` and `pg_restore`, the dump itself is a backup. If you're using Postgres logical replication, it's good practice to take a `pg_dump` snapshot of your source database first. See [Backups](/docs/manage/backups).

### How do I contact Neon about my Azure projects?
</FaqItem>

<FaqItem question="How do I contact Neon about my Azure projects?">

Keep an eye on your inbox for communication from us. If you have specific constraints, such as regulatory requirements or migration dependencies, reply to any migration outreach you receive or contact [Neon Support](https://console.neon.tech/app/projects?modal=support).

</FaqItem>

</Faq>

<NeedHelp/>
Loading
Loading