# Extensions (/docs/orm/extensions)

> For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL.

Every package that plugs into Prisma ORM: database packages, column types, indexes, query operations, and middleware, by Prisma and the community.

Location: ORM > Extensions

An extension is an npm package that adds something Prisma ORM does not do on its own: a column type such as a vector or a geometry, an index type, query operations (new functions you can call in a query, such as pgvector's `cosineDistance`), or middleware, which runs your own code before and after every query. To use PostgreSQL you install `@prisma/orm-postgres`, and to use MongoDB you install `@prisma/orm-mongo`, because support for a database comes from an extension too.

Installing the package is not the whole job, because you register an extension in two places. It goes in `prisma.config.ts`, so that the command line tools know about it, and in `db.ts`, the file where you create the client, so that your queries can use what it adds. `@prisma/orm-postgres` is the package you call directly: `ormConfig(...)` in `prisma.config.ts` and `postgres(...)` in `db.ts`. Other extensions are listed in the `extensions` array passed to those two calls. [Using extensions](https://www.prisma.io/docs/orm/extensions/using-extensions) shows both registrations, with the install command, for pgvector. Middleware is the exception, because you register it on the client only, and [How middleware works](https://www.prisma.io/docs/orm/middleware/how-middleware-works) covers that.

Your contract is what Prisma ORM 8 calls your schema: [`contract.prisma`](https://www.prisma.io/docs/orm/contract-authoring/the-data-contract) in place of `schema.prisma`. If you have a Prisma ORM 7 project, [Coming from Prisma ORM 7](https://www.prisma.io/docs/orm/coming-from-prisma-orm-7) says what replaced `schema.prisma`, `@prisma/client`, and `$use`.

## Catalog [#catalog]

The [extension directory](https://www.prisma.io/extensions) has the install command and the registration snippet for each entry below. There is no MySQL package, and [Supported databases](https://www.prisma.io/docs/orm/supported-databases) says what is planned. An entry marked experimental works today, but its API can change between releases.

| Name                                                                   | What it adds                                                                                                     | Package                                  | Databases           | By                                              |
| ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------- | ----------------------------------------------- |
| [arktype-json](https://www.prisma.io/extensions/arktype-json)          | JSON columns validated by an arktype schema and typed end to end.                                                | `@prisma/orm-extension-arktype-json`     | PostgreSQL          | Prisma                                          |
| [Cache middleware](https://www.prisma.io/extensions/middleware-cache)  | Serve repeated reads from an in-memory or pluggable cache, opted in per query.                                   | `@prisma/orm-extension-middleware-cache` | PostgreSQL, MongoDB | Prisma                                          |
| [MongoDB](https://www.prisma.io/extensions/mongodb)                    | MongoDB support for Prisma ORM: config, runtime, contract authoring, BSON values, and migrations in one package. | `@prisma/orm-mongo`                      | MongoDB             | Prisma                                          |
| [ParadeDB](https://www.prisma.io/extensions/paradedb) (experimental)   | BM25 full-text search indexes.                                                                                   | `@prisma/orm-extension-paradedb`         | PostgreSQL          | Prisma                                          |
| [pgvector](https://www.prisma.io/extensions/pgvector)                  | Vector columns and similarity search for embeddings.                                                             | `@prisma/orm-extension-pgvector`         | PostgreSQL          | Prisma                                          |
| [PostGIS](https://www.prisma.io/extensions/postgis)                    | Geometry columns and geospatial queries such as distance and containment.                                        | `@prisma/orm-extension-postgis`          | PostgreSQL          | Prisma                                          |
| [PostgreSQL](https://www.prisma.io/extensions/postgresql)              | PostgreSQL support for Prisma ORM: config, runtime, contract authoring, and migrations in one package.           | `@prisma/orm-postgres`                   | PostgreSQL          | Prisma                                          |
| [SQLite](https://www.prisma.io/extensions/sqlite) (experimental)       | SQLite support for Prisma ORM: config, runtime, contract authoring, and migrations in one package.               | `@prisma/orm-sqlite`                     | SQLite              | Prisma                                          |
| [Supabase](https://www.prisma.io/extensions/supabase) (experimental)   | Supabase auth and storage tables plus role-bound clients for row-level security.                                 | `@prisma/orm-extension-supabase`         | PostgreSQL          | Prisma                                          |
| [IndexedDB](https://www.prisma.io/extensions/indexeddb) (experimental) | Prisma 8 for IndexedDB: a browser database from your PSL schema, with typed accessors and explicit migrations.   | `@prisma-next-idb/client-idb`            | IndexedDB           | [Prisma IDB](https://github.com/prisma-idb)     |
| [typed-json](https://www.prisma.io/extensions/typed-json)              | Typed JSON and text columns with no validator dependency.                                                        | `prisma-orm-extension-typed-json`        | PostgreSQL          | [Omar Dulaimi](https://github.com/omar-dulaimi) |
| [zod-json](https://www.prisma.io/extensions/zod-json)                  | Typed JSON columns described and enforced by a zod schema.                                                       | `prisma-orm-extension-zod-json`          | PostgreSQL          | [Omar Dulaimi](https://github.com/omar-dulaimi) |

In the Supabase row, role-bound clients are client instances pinned to a particular PostgreSQL role, so the database applies that role's row-level security policies to whatever you query through them.

## Publish your own [#publish-your-own]

An extension you write yourself is an npm package with one entry point for the command line tools and one for your application. Name your two entry points `control` and `runtime`, as pgvector does and as the [call for extension authors](https://www.prisma.io/blog/prisma-next-call-for-extension-authors) describes. Middleware ships a single entry point instead, because it is only ever registered on the client.

To write middleware, follow [Authoring custom middleware](https://www.prisma.io/docs/orm/middleware/authoring-custom-middleware). If you are adding a whole database, `@prisma/orm-postgres` is the one to copy for a SQL database and `@prisma/orm-mongo` for a document database. Once your package is on npm, [submit it to the directory](https://www.prisma.io/extensions/submit), and a maintainer reviews your entry before it appears in the catalog.

## See also [#see-also]

* [Using extensions](https://www.prisma.io/docs/orm/extensions/using-extensions): install an extension and run your first query with it
* [Supported databases](https://www.prisma.io/docs/orm/supported-databases): which databases Prisma ORM ships and what is planned
* [Coming from Prisma ORM 7](https://www.prisma.io/docs/orm/coming-from-prisma-orm-7): what changes in a project that already uses `@prisma/client` and `schema.prisma`

## Related pages

- [`Coming from Prisma ORM 7`](https://www.prisma.io/docs/orm/coming-from-prisma-orm-7): What each Prisma ORM 7 schema attribute, command, and query is called in Prisma ORM 8, and what is not available.
- [`Core concepts`](https://www.prisma.io/docs/orm/core-concepts): The ideas every Prisma ORM command and API builds on: contracts, emitting, plans, the database signature, codecs, and the migration graph.
- [`Overview`](https://www.prisma.io/docs/orm/data-modeling): Describe the data your application needs with models, primary keys, scalar fields, and relations.
- [`Prisma 7`](https://www.prisma.io/docs/orm/v7): Prisma ORM is a next-generation Node.js and TypeScript ORM that provides type-safe database access, migrations, and a visual data editor.
- [`Prisma ORM`](https://www.prisma.io/docs/orm/v6): Learn about Prisma ORM