Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
18 changes: 2 additions & 16 deletions .github/workflows/lychee.yml
Original file line number Diff line number Diff line change
Expand Up @@ -159,24 +159,10 @@ jobs:
echo "</details>" >> lychee/formatted.md

# Hard truncate as a final guardrail for sticky PR comments
python - <<'PY'
from pathlib import Path
p = Path("lychee/formatted.md")
if p.exists():
max_chars = 60000
text = p.read_text(encoding="utf-8")
if len(text) > max_chars:
note = "\n\n_Comment truncated to avoid GitHub body limit. Download the artifact for full details._\n"
p.write_text(text[: max_chars - len(note)] + note, encoding="utf-8")
PY
python3 -c "from pathlib import Path; p = Path('lychee/formatted.md'); max_chars = 60000; note = '\n\n_Comment truncated to avoid GitHub body limit. Download the artifact for full details._\n'; text = p.read_text(encoding='utf-8') if p.exists() else ''; p.write_text(text[: max_chars - len(note)] + note, encoding='utf-8') if p.exists() and len(text) > max_chars else None"
else
# Ensure sticky PR comment always has content even if Lychee output is missing
cat > lychee/formatted.md <<'EOF'
## 🍈 Lychee Link Check Report

Lychee did not produce a markdown report file for this run.
Check the workflow logs and uploaded artifact for details.
EOF
printf '%s\n' '## 🍈 Lychee Link Check Report' '' 'Lychee did not produce a markdown report file for this run.' 'Check the workflow logs and uploaded artifact for details.' > lychee/formatted.md
fi

- name: 📦 Upload Lychee reports
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/docs.v6/guides/multiple-databases.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ Deploy your app by following these steps:
:::note
Replace `<your-username>` and `<repository-name>` with your GitHub username and the name of your repository.
:::
2. Log in to [Vercel](https://vercel.com/) and navigate to your [Dashboard](https://vercel.com/docs/dashboard-features).
2. Log in to [Vercel](https://vercel.com/) and navigate to your [Dashboard](https://vercel.com/docs/deployments).
3. Create a new project. Follow Vercel's [Import an existing project](https://vercel.com/docs/getting-started-with-vercel/import) guide, but stop at [step 3](https://vercel.com/docs/getting-started-with-vercel/import#optionally-configure-any-settings) where you will configure environment variables _before_ clicking **Deploy**.
4. Configure the `DATABASE_URL` environment variable:
1. Expand the **Environment variables** section.
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/docs.v6/orm/more/ai-tools/windsurf.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ You can also add the Prisma MCP server manually. Learn more about how you can ad

## Defining project-specific rules with `.windsurfrules`

The [`.windsurfrules` file](https://docs.windsurf.com/windsurf/memories#windsurfrules) in Windsurf allows you to enforce best practices and development standards tailored to your Prisma project. By defining clear and consistent rules, you can ensure that Windsurf generates clean, maintainable, and project-specific code with minimal manual adjustments.
The [`.windsurfrules` file](https://docs.windsurf.com/windsurf/cascade/memories) in Windsurf allows you to enforce best practices and development standards tailored to your Prisma project. By defining clear and consistent rules, you can ensure that Windsurf generates clean, maintainable, and project-specific code with minimal manual adjustments.

To implement these rules, create a `.windsurfrules` file in the root of your project. Below is an example configuration:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ Prisma isn’t just an ORM—it’s a complete type-safe data toolkit:

Both Drizzle and Prisma ORM support multiple and different kinds of databases. Drizzle achieves this support through driver implementations created by Drizzle, which integrate with existing third-party database drivers.

Prisma ORM has begun adding support for [third-party database drivers](https://www.prisma.io/blog/serverless-database-drivers-KML1ehXORxZV), but primarily uses [built-in drivers](/v6/orm/more/internals/engines#the-query-engine-at-runtime) to communicate with an underlying database. Prisma also defaults connections to TLS, which improves security.
Prisma ORM has begun adding support for [third-party database drivers](https://www.prisma.io/blog/serverless-database-drivers-kml1ehxorxzv), but primarily uses [built-in drivers](/v6/orm/more/internals/engines#the-query-engine-at-runtime) to communicate with an underlying database. Prisma also defaults connections to TLS, which improves security.

Additionally, Prisma ORM supports CockroachDB, Microsoft SQL Server, and MongoDB, which Drizzle does not currently support. Prisma ORM also offers the [relation mode](/v6/orm/prisma-schema/data-model/relations/relation-mode) that allows Prisma ORM to emulate foreign key constraints for those database engines that do not support it. Drizzle currently supports Cloudflare D1, `bun:sqlite`, and SQLite via HTTP Proxy, which Prisma ORM currently does not.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Integration tests focus on testing how separate parts of the program work togeth

One way to simulate a real world environment is to use [Docker](https://www.docker.com/get-started/) to encapsulate a database and some test data. This can be spun up and torn down with the tests and so operate as an isolated environment away from your production databases.

> **Note:** This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) offers a comprehensive guide on setting up an integration testing environment and writing integration tests against a real database, providing valuable insights for those looking to explore this topic.
> **Note:** This [blog post](https://www.prisma.io/blog/testing-series-2-xphjjmiesm) offers a comprehensive guide on setting up an integration testing environment and writing integration tests against a real database, providing valuable insights for those looking to explore this topic.

## Prerequisites

Expand Down Expand Up @@ -445,7 +445,7 @@ You can add some scripts to your projects `package.json` file which will setup t

:::warning

If the test doesn't work for you, you'll need to ensure the test database is properly set up and ready, as explained in this [blog](https://www.prisma.io/blog/testing-series-3-aBUyF8nxAn#make-the-script-wait-until-the-database-server-is-ready).
If the test doesn't work for you, you'll need to ensure the test database is properly set up and ready, as explained in this [blog](https://www.prisma.io/blog/testing-series-3-abuyf8nxan#make-the-script-wait-until-the-database-server-is-ready).

:::

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ A single test should focus on how your function logic handles different inputs (

This means that you should aim to remove as many dependencies as possible, such as external services and databases, to keep the tests and their environments as lightweight as possible.

> **Note**: This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) provides a comprehensive guide to implementing unit testing in your Express project with Prisma ORM. If you're looking to delve into this topic, be sure to give it a read!
> **Note**: This [blog post](https://www.prisma.io/blog/testing-series-2-xphjjmiesm) provides a comprehensive guide to implementing unit testing in your Express project with Prisma ORM. If you're looking to delve into this topic, be sure to give it a read!

## Prerequisites

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ If you want the Prisma MCP server to be available only in specific Cursor projec

### Windsurf

To learn more about Windsurf's MCP integration, check out the [Windsurf MCP docs](https://docs.codeium.com/windsurf/mcp).
To learn more about Windsurf's MCP integration, check out the [Windsurf MCP docs](https://docs.windsurf.com/windsurf/cascade/mcp).

#### Add via Windsurf MCP Plugin Store (Recommended)

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/docs/ai/tools/mcp-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ If you want the Prisma MCP server to be available only in specific Cursor projec

### Windsurf

To learn more about Windsurf's MCP integration, check out the [Windsurf MCP docs](https://docs.codeium.com/windsurf/mcp).
To learn more about Windsurf's MCP integration, check out the [Windsurf MCP docs](https://docs.windsurf.com/windsurf/cascade/mcp).

#### Add via Windsurf MCP Plugin Store (Recommended)

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/docs/ai/tools/windsurf.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ You can also add the Prisma MCP server manually. Learn more about how you can ad

## Defining project-specific rules with `.windsurfrules`

The [`.windsurfrules` file](https://docs.windsurf.com/windsurf/memories#windsurfrules) in Windsurf allows you to enforce best practices and development standards tailored to your Prisma project. By defining clear and consistent rules, you can ensure that Windsurf generates clean, maintainable, and project-specific code with minimal manual adjustments.
The [`.windsurfrules` file](https://docs.windsurf.com/windsurf/cascade/memories) in Windsurf allows you to enforce best practices and development standards tailored to your Prisma project. By defining clear and consistent rules, you can ensure that Windsurf generates clean, maintainable, and project-specific code with minimal manual adjustments.

To implement these rules, create a `.windsurfrules` file in the root of your project. Below is an example configuration:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ Deploy your app by following these steps:
:::note
Replace `<your-username>` and `<repository-name>` with your GitHub username and the name of your repository.
:::
2. Log in to [Vercel](https://vercel.com/) and navigate to your [Dashboard](https://vercel.com/docs/dashboard-features).
2. Log in to [Vercel](https://vercel.com/) and navigate to your [Dashboard](https://vercel.com/docs/deployments).
3. Create a new project. Follow Vercel's [Import an existing project](https://vercel.com/docs/getting-started-with-vercel/import) guide, but stop at [step 3](https://vercel.com/docs/getting-started-with-vercel/import#optionally-configure-any-settings) where you will configure environment variables _before_ clicking **Deploy**.
4. Configure the `DATABASE_URL` environment variable:
1. Expand the **Environment variables** section.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ Prisma isn’t just an ORM—it’s a complete type-safe data toolkit:

Both Drizzle and Prisma ORM support multiple and different kinds of databases. Drizzle achieves this support through driver implementations created by Drizzle, which integrate with existing third-party database drivers.

Prisma ORM has begun adding support for [third-party database drivers](https://www.prisma.io/blog/serverless-database-drivers-KML1ehXORxZV). Prisma also defaults connections to TLS, which improves security.
Prisma ORM has begun adding support for [third-party database drivers](https://www.prisma.io/blog/serverless-database-drivers-kml1ehxorxzv). Prisma also defaults connections to TLS, which improves security.

Additionally, Prisma ORM supports CockroachDB, Microsoft SQL Server, and MongoDB, which Drizzle does not currently support. Prisma ORM also offers the [relation mode](/orm/prisma-schema/data-model/relations/relation-mode) that allows Prisma ORM to emulate foreign key constraints for those database engines that do not support it. Drizzle currently supports Cloudflare D1, `bun:sqlite`, and SQLite via HTTP Proxy, which Prisma ORM currently does not.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ prisma-deno-deploy/

### Next steps

- Add authentication using [Deno KV](https://deno.com/kv) for sessions
- Add authentication using [Deno KV](https://docs.deno.com/deploy/reference/deno_kv/) for sessions
- Add request validation with [Zod](https://zod.dev/)
- Explore [Prisma Client extensions](/orm/prisma-client/client-extensions) for custom functionality
- Set up [Prisma Migrate](/orm/prisma-migrate) for schema versioning in production
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Geometry fields are only available with PostgreSQL and the PostGIS extension.

:::

Use the [`Geometry`](/orm/reference/prisma-schema-reference#geometry) Prisma ORM field type to work with spatial data in PostgreSQL with the PostGIS extension. The `Geometry` type supports various geographic shapes such as points, lines, and polygons, with native filtering and ordering operations.
Use the `Geometry` Prisma ORM field type to work with spatial data in PostgreSQL with the PostGIS extension. The `Geometry` type supports various geographic shapes such as points, lines, and polygons, with native filtering and ordering operations.

## Prerequisites

Expand Down Expand Up @@ -756,7 +756,7 @@ All native geometry filters (`near`, `within`, `intersects`) are optimized to us

:::warning PostgreSQL 16 users with large datasets

If you're using **PostgreSQL 16** with datasets containing thousands of records, you may encounter slow spatial queries (3-5 seconds instead of <100ms) due to a query planner bug that was fixed in PostgreSQL 17+.
If you're using **PostgreSQL 16** with datasets containing thousands of records, you may encounter slow spatial queries (3-5 seconds instead of < 100ms) due to a query planner bug that was fixed in PostgreSQL 17+.

**Symptom:** Queries with `near`, `within`, or `intersects` are unexpectedly slow despite having GIST indexes.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Integration tests focus on testing how separate parts of the program work togeth

One way to simulate a real world environment is to use [Docker](https://www.docker.com/get-started/) to encapsulate a database and some test data. This can be spun up and torn down with the tests and so operate as an isolated environment away from your production databases.

> **Note:** This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) offers a comprehensive guide on setting up an integration testing environment and writing integration tests against a real database, providing valuable insights for those looking to explore this topic.
> **Note:** This [blog post](https://www.prisma.io/blog/testing-series-2-xphjjmiesm) offers a comprehensive guide on setting up an integration testing environment and writing integration tests against a real database, providing valuable insights for those looking to explore this topic.

## Prerequisites

Expand Down Expand Up @@ -435,7 +435,7 @@ You can add some scripts to your projects `package.json` file which will setup t

:::warning

If the test doesn't work for you, you'll need to ensure the test database is properly set up and ready, as explained in this [blog](https://www.prisma.io/blog/testing-series-3-aBUyF8nxAn#make-the-script-wait-until-the-database-server-is-ready).
If the test doesn't work for you, you'll need to ensure the test database is properly set up and ready, as explained in this [blog](https://www.prisma.io/blog/testing-series-3-abuyf8nxan#make-the-script-wait-until-the-database-server-is-ready).

:::

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ A single test should focus on how your function logic handles different inputs (

This means that you should aim to remove as many dependencies as possible, such as external services and databases, to keep the tests and their environments as lightweight as possible.

> **Note**: This [blog post](https://www.prisma.io/blog/testing-series-2-xPhjjmIEsM) provides a comprehensive guide to implementing unit testing in your Express project with Prisma ORM. If you're looking to delve into this topic, be sure to give it a read!
> **Note**: This [blog post](https://www.prisma.io/blog/testing-series-2-xphjjmiesm) provides a comprehensive guide to implementing unit testing in your Express project with Prisma ORM. If you're looking to delve into this topic, be sure to give it a read!

## Prerequisites

Expand Down
6 changes: 6 additions & 0 deletions apps/docs/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
"ecommerce",
"edouardb",
"Elysia",
"epsg",
"elysia",
"Emelie",
"Enya",
Expand All @@ -90,6 +91,8 @@
"Fumadocs",
"fuzzystrmatch",
"Galera",
"geofencing",
"Geofencing",
"geoexample",
"Glassmorphism",
"glassmorphism",
Expand Down Expand Up @@ -175,6 +178,7 @@
"onrender",
"orms",
"ossp",
"OSGB",
"Overfetching",
"Pacman",
"packagemanager",
Expand Down Expand Up @@ -251,6 +255,8 @@
"specialised",
"SPGIST",
"sqlcommenter",
"SRID",
"srid",
"sslaccept",
"sslcert",
"sslidentity",
Expand Down
5 changes: 5 additions & 0 deletions apps/docs/scripts/lint-external-links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ const TIMEOUT_MS = 10_000;
const MAX_CONCURRENCY = 15;
const ACCEPTED_STATUSES = new Set([403, 429]);

// Links that are known to work correctly but cannot be verified by an HTTP
// checker (e.g. deeplinks that trigger a native app to open).
const IGNORED_URLS = new Set(["https://pris.ly/cursor-deeplink"]);

const IMAGE_EXTENSIONS = new Set([
".png",
".jpg",
Expand Down Expand Up @@ -263,6 +267,7 @@ async function main(): Promise<void> {
const failed: FailedResult[] = [];

await runWithConcurrency(uniqueUrls, MAX_CONCURRENCY, async (url) => {
if (IGNORED_URLS.has(url)) return;
const result = await checkUrl(url);
if (result.ok) return;

Expand Down
Loading