Capabilities Reference

August 12, 2026 · View on GitHub

This document defines the canonical capability keys and reserved namespaces used throughout Prisma Next for adapter negotiation, feature gating, and extension integration.

Capabilities describe what the database environment can do. Adapters report capabilities at connect time, and the runtime negotiates them with extension packs. The contract only declares requirements (contract.capabilities) and pins the resulting profileHash; it does not define capabilities.

Adapter (database) capabilities

Adapter-reported features of the database runtime. These are not contract-owned; they are discovered and negotiated.

sql

Common SQL features reported by adapters using the sql namespace. This is a naming convention for shared SQL keys, not a separate “SQL family” capability set.

CapabilityTypeDescriptionStability
lateralbooleanSupports LATERAL joinsStable
returningbooleanSupports RETURNING clauses for DML operations (INSERT, UPDATE, DELETE)Stable
jsonAggbooleanSupports JSON aggregation functionsStable
enumsbooleanSupports native enum storage typesStable
foreignKeysbooleanSupports FOREIGN KEY constraint DDLStable
checkConstraintbooleanSupports CHECK constraint DDL. Gates the @@check authoring surface: a PSL contract declaring a check against an adapter that does not report this is refused at authoring.Stable
autoIndexesForeignKeysbooleanDatabase automatically creates indexes for foreign keysStable
defaultInInsertbooleanSupports DEFAULT as a value in multi-row INSERT ... VALUES (e.g. INSERT INTO t (a, b) VALUES (1, DEFAULT)). When false, the ORM splits multi-row inserts by column signature so each statement has a uniform column list.Stable

postgres

PostgreSQL-specific capabilities managed by the adapter.

CapabilityTypeDescriptionStability
partialIndexbooleanSupports partial/filtered indexesStable
deferrableConstraintsbooleanSupports DEFERRABLE constraintsStable
savepointsbooleanSupports savepoint transactionsStable
transactionalDDLbooleanSupports transactional DDLStable
explainFormatenumEXPLAIN output format (text | json)Stable

mysql

MySQL-specific capabilities managed by the adapter.

CapabilityTypeDescriptionStability
jsonFunctionsbooleanSupports JSON functionsStable
generatedColumnsbooleanSupports generated columnsStable
checkConstraintsbooleanSupports CHECK constraintsStable
explainFormatenumEXPLAIN output format (text | json)Stable

sqlite

SQLite-specific capabilities managed by the adapter.

CapabilityTypeDescriptionStability
json1booleanSupports JSON1 extensionStable
fts5booleanSupports FTS5 full-text searchStable
rtreebooleanSupports R*Tree spatial indexingStable

Example adapter reports

Postgres adapters should always report sql.lateral: true and sql.returning: true. MySQL and SQLite should report those as false unless the adapter can prove otherwise.

Postgres (example):

{
  "sql": { "lateral": true, "returning": true, "jsonAgg": true, "enums": true, "foreignKeys": true, "checkConstraint": true, "autoIndexesForeignKeys": false },
  "postgres": { "partialIndex": true, "transactionalDDL": true, "explainFormat": "json" }
}

MySQL (example):

{
  "sql": { "lateral": false, "returning": false, "jsonAgg": false, "enums": false },
  "mysql": { "jsonFunctions": true, "generatedColumns": true, "explainFormat": "text" }
}

Extension pack capabilities

Extension capabilities are prefixed by pack namespace to avoid collisions. These are negotiated alongside adapter capabilities at connect time.

pgvector

PostgreSQL vector extension capabilities.

CapabilityTypeDescriptionStability
ivfflatbooleanSupports IVFFlat indexingStable
hnswbooleanSupports HNSW indexingStable
vectorobjectVector type support with paramsStable

postgis

PostGIS geospatial extension capabilities.

CapabilityTypeDescriptionStability
gistbooleanSupports GiST spatial indexingStable
geographybooleanSupports geography typeStable
geometrybooleanSupports geometry typeStable
sridarraySupported SRID valuesStable

pg_trgm

PostgreSQL trigram extension capabilities.

CapabilityTypeDescriptionStability
trigrambooleanSupports trigram similarityStable
ginbooleanSupports GIN trigram indexesStable

Reserved Namespaces

The following namespaces are reserved and cannot be used by extension packs:

Core Namespaces

  • prisma - Reserved for Prisma core features
  • core - Reserved for core adapter capabilities
  • internal - Reserved for internal implementation details
  • sql - Reserved for common SQL capability keys reported by adapters

Adapter Namespaces

  • postgres - PostgreSQL adapter capabilities
  • mysql - MySQL adapter capabilities
  • sqlite - SQLite adapter capabilities
  • mongodb - MongoDB adapter capabilities (future)

System Namespaces

  • system - System-level capabilities
  • debug - Debug and development capabilities
  • test - Testing and validation capabilities

Capability Key Rules

Naming Convention

  • Use lowercase with underscores or camelCase within namespaces (jsonAgg, partial_index)
  • Boolean capabilities use simple names: lateral, savepoints
  • Complex capabilities use descriptive names: explainFormat, transactional_ddl

Stability Contract

  • Stable: Core capabilities that cannot change meaning or be removed
  • Deprecated: Capabilities marked for removal with migration path
  • Experimental: New capabilities under evaluation

Versioning

  • Capability keys are immutable once published
  • New capabilities can be added as stable
  • Breaking changes require new capability keys

Capability Negotiation

Adapter Advertisement

Adapters declare supported capabilities at connect time:

interface AdapterCapabilities {
  [namespace: string]: {
    [capability: string]: boolean | string | object | array
  }
}

Contract Requirements

Contracts declare required capabilities in contract.capabilities:

{
  "capabilities": {
    "sql": { "lateral": true, "returning": true },
    "postgres": { "transactionalDDL": true },
    "pgvector": { "ivfflat": true }
  }
}

Negotiation Process

  1. Adapter advertises available capabilities (discovered from the database environment)
  2. Runtime checks contract requirements against adapter capabilities
  3. Missing required capabilities cause connection failure
  4. Optional capabilities are noted but don't block connection

Error Codes

  • E_CAPABILITY_MISSING - Required capability not available
  • E_CAPABILITY_INCOMPATIBLE - Capability value incompatible
  • E_CAPABILITY_UNKNOWN - Unknown capability key

Extension Pack Guidelines

Namespace Selection

  • Use descriptive, lowercase names: pgvector, postgis, pg_trgm
  • Avoid generic terms: vector, geo, search
  • Check reserved namespaces before publishing

Capability Declaration

  • Declare all capabilities your pack requires
  • Use stable capability keys from this reference
  • Document capability requirements in pack README

Compatibility Matrix

  • Test against multiple adapter versions
  • Document minimum capability requirements
  • Provide fallback behavior for missing capabilities

Future Extensions

Planned Capabilities

  • pg_stat_statements - Query statistics
  • pg_hint_plan - Query plan hints
  • pg_partman - Partition management
  • timescaledb - Time-series extensions

Community Guidelines

  • Follow naming conventions
  • Document capability requirements
  • Provide migration paths for capability changes
  • Submit capability keys for review before publishing

References

Capability Matrix

Canonical capability keys with descriptions, typical implementers, and ADR references.

Capability keyDescriptionImplemented byADRs
sql.enumsNative enum storage typesadapters with native enumsADR 065
sql.lateralLATERAL join loweringadapters that support LATERALADR 065
sql.returningRETURNING support for DMLadapters that support RETURNINGADR 065
sql.jsonAggJSON aggregation supportadapters that support JSON aggregationADR 065
sql.foreignKeysFK constraint DDL supportadapters that support FOREIGN KEYADR 161
sql.checkConstraintCHECK constraint DDL support; gates @@checkadapters that support CHECKADR 244
sql.autoIndexesForeignKeysDB auto-indexes FKsadapters where DB auto-creates FK indexesADR 161
sql.defaultInInsertSupports DEFAULT in multi-row INSERT VALUESadapters that support DEFAULT keyword as a value
postgres.partialIndexPartial/filtered index supportpostgres adapterADR 065
mysql.generatedColumnsGenerated column supportmysql adapterADR 065
sqlite.fts5FTS5 supportsqlite adapterADR 065
pgvector.cosineCosine distance and similarity operationspgvector packADR 112–115
postgis.geometryGeometry type supportpostgis packADR 112–115

Notes

  • Capability keys are versioned and namespaced; see ADR 117 for stability rules.
  • Keep this matrix updated with adapter and pack changes.