{"_id":"@dpfurner/payload-db-mysql","name":"@dpfurner/payload-db-mysql","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dpfurner/payload-db-mysql","version":"1.0.0","description":"MySQL database adapter for Payload CMS using Drizzle ORM","homepage":"https://github.com/dpfurner/payload-db-mysql","repository":{"type":"git","url":"git+https://github.com/dpfurner/payload-db-mysql.git"},"bugs":{"url":"https://github.com/dpfurner/payload-db-mysql/issues"},"license":"MIT","author":{"name":"dpfurner"},"keywords":["payload","payloadcms","mysql","mariadb","database","adapter","drizzle","drizzle-orm","cms"],"sideEffects":false,"type":"module","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js","types":"./dist/index.d.ts"},"./types":{"import":"./dist/exports/types-deprecated.js","require":"./dist/exports/types-deprecated.js","types":"./dist/exports/types-deprecated.d.ts"},"./migration-utils":{"import":"./dist/exports/migration-utils.js","require":"./dist/exports/migration-utils.js","types":"./dist/exports/migration-utils.d.ts"},"./drizzle":{"import":"./dist/drizzle-proxy/index.js","types":"./dist/drizzle-proxy/index.d.ts","default":"./dist/drizzle-proxy/index.js"},"./drizzle/mysql-core":{"import":"./dist/drizzle-proxy/mysql-core.js","types":"./dist/drizzle-proxy/mysql-core.d.ts","default":"./dist/drizzle-proxy/mysql-core.js"},"./drizzle/mysql2":{"import":"./dist/drizzle-proxy/mysql2.js","types":"./dist/drizzle-proxy/mysql2.d.ts","default":"./dist/drizzle-proxy/mysql2.js"},"./drizzle/relations":{"import":"./dist/drizzle-proxy/relations.js","types":"./dist/drizzle-proxy/relations.d.ts","default":"./dist/drizzle-proxy/relations.js"}},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"pnpm build:swc && pnpm build:types","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","build:types":"tsc --emitDeclarationOnly --outDir dist","clean":"rimraf -g {dist,*.tsbuildinfo}","prepublishOnly":"pnpm clean && pnpm build"},"dependencies":{"@payloadcms/drizzle":"^3.73.0","drizzle-kit":"^0.31.0","drizzle-orm":"^0.44.0","mysql2":"^3.11.0"},"devDependencies":{"@swc/cli":"^0.4.0","@swc/core":"^1.7.0","@types/node":"^22.0.0","payload":"^3.73.0","rimraf":"^6.0.0","typescript":"^5.7.0"},"peerDependencies":{"payload":"^3.0.0"},"engines":{"node":">=18.0.0"},"_id":"@dpfurner/payload-db-mysql@1.0.0","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-doxXsSTR1kq+f++y5VAirj5fzITIe7BYelcE0O13k+7WqU83BioUdJuSKZcqHucfqmZMEyPdNvIRKS3idorNeg==","shasum":"c3abcb2a3b6c0a75d98845101ebb311c2b744005","tarball":"https://registry.npmjs.org/@dpfurner/payload-db-mysql/-/payload-db-mysql-1.0.0.tgz","fileCount":90,"unpackedSize":150586,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAIc9Vxb/Y4fVV7FhUxdRTShmrwUmGdNUE9LW/Y/Gg+zAiEAku3X66wyICJEsMX/kmeo8726aoLK4+d3HCqW09yUDCQ="}]},"_npmUser":{"name":"dpfurner","email":"dpfurner@gmail.com"},"directories":{},"maintainers":[{"name":"dpfurner","email":"dpfurner@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/payload-db-mysql_1.0.0_1769678901977_0.6400388620430597"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-29T09:28:21.864Z","1.0.0":"2026-01-29T09:28:22.197Z","modified":"2026-01-29T09:28:22.446Z"},"maintainers":[{"name":"dpfurner","email":"dpfurner@gmail.com"}],"description":"MySQL database adapter for Payload CMS using Drizzle ORM","homepage":"https://github.com/dpfurner/payload-db-mysql","keywords":["payload","payloadcms","mysql","mariadb","database","adapter","drizzle","drizzle-orm","cms"],"repository":{"type":"git","url":"git+https://github.com/dpfurner/payload-db-mysql.git"},"author":{"name":"dpfurner"},"bugs":{"url":"https://github.com/dpfurner/payload-db-mysql/issues"},"license":"MIT","readme":"# @dpfurner/payload-db-mysql\n\nMySQL database adapter for [Payload CMS](https://payloadcms.com) using [Drizzle ORM](https://orm.drizzle.team/).\n\n## Installation\n\n```bash\nnpm install @dpfurner/payload-db-mysql\n# or\npnpm add @dpfurner/payload-db-mysql\n# or\nyarn add @dpfurner/payload-db-mysql\n```\n\n## Usage\n\nConfigure the MySQL adapter in your Payload config:\n\n```typescript\nimport { buildConfig } from 'payload'\nimport { mysqlAdapter } from '@dpfurner/payload-db-mysql'\n\nexport default buildConfig({\n  // ... your other config\n  db: mysqlAdapter({\n    pool: {\n      host: 'localhost',\n      port: 3306,\n      user: 'root',\n      password: 'your-password',\n      database: 'your-database',\n    },\n  }),\n})\n```\n\n### Using Connection String\n\nYou can also use a connection string (URI):\n\n```typescript\nimport { buildConfig } from 'payload'\nimport { mysqlAdapter } from '@dpfurner/payload-db-mysql'\n\nexport default buildConfig({\n  db: mysqlAdapter({\n    pool: {\n      uri: 'mysql://user:password@localhost:3306/database',\n    },\n  }),\n})\n```\n\n### Environment Variables\n\nA common pattern is to use environment variables:\n\n```typescript\nimport { buildConfig } from 'payload'\nimport { mysqlAdapter } from '@dpfurner/payload-db-mysql'\n\nexport default buildConfig({\n  db: mysqlAdapter({\n    pool: {\n      host: process.env.DB_HOST || 'localhost',\n      port: parseInt(process.env.DB_PORT || '3306'),\n      user: process.env.DB_USER || 'root',\n      password: process.env.DB_PASSWORD,\n      database: process.env.DB_NAME,\n    },\n  }),\n})\n```\n\n## Configuration Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `pool` | `PoolOptions` | **required** | MySQL2 pool configuration options |\n| `idType` | `'serial' \\| 'uuid'` | `'serial'` | Primary key type for tables |\n| `push` | `boolean` | `true` | Enable automatic schema push in development |\n| `migrationDir` | `string` | `./migrations` | Path to migrations directory |\n| `logger` | `boolean \\| DrizzleConfig['logger']` | `false` | Enable Drizzle query logging |\n| `localesSuffix` | `string` | `'_locales'` | Suffix for locale tables |\n| `relationshipsSuffix` | `string` | `'_rels'` | Suffix for relationship tables |\n| `versionsSuffix` | `string` | `'_v'` | Suffix for version tables |\n| `schemaName` | `string` | - | Database schema name |\n| `disableCreateDatabase` | `boolean` | `false` | Disable automatic database creation |\n| `blocksAsJSON` | `boolean` | `false` | Store blocks as JSON instead of relational structure |\n| `transactionOptions` | `false \\| MySqlTransactionConfig` | - | Transaction configuration |\n| `allowIDOnCreate` | `boolean` | `false` | Allow custom IDs on document creation |\n| `autoIncrement` | `boolean` | `true` | Enable AUTO_INCREMENT for integer IDs |\n| `beforeSchemaInit` | `MySQLSchemaHook[]` | `[]` | Hooks to modify schema before initialization |\n| `afterSchemaInit` | `MySQLSchemaHook[]` | `[]` | Hooks to modify schema after initialization |\n\n## Pool Options\n\nThe `pool` option accepts all [mysql2 pool options](https://github.com/sidorares/node-mysql2#using-connection-pools):\n\n```typescript\nmysqlAdapter({\n  pool: {\n    host: 'localhost',\n    port: 3306,\n    user: 'root',\n    password: 'password',\n    database: 'payload',\n    // Additional pool options\n    waitForConnections: true,\n    connectionLimit: 10,\n    queueLimit: 0,\n    enableKeepAlive: true,\n    keepAliveInitialDelay: 0,\n  },\n})\n```\n\n## Migrations\n\n### Creating Migrations\n\n```bash\nnpx payload migrate:create\n```\n\n### Running Migrations\n\n```bash\nnpx payload migrate\n```\n\n### Migration File Example\n\n```typescript\nimport { MigrateUpArgs, MigrateDownArgs, sql } from '@dpfurner/payload-db-mysql'\n\nexport async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n  await db.execute(sql`\n    ALTER TABLE posts ADD COLUMN featured BOOLEAN DEFAULT FALSE\n  `)\n}\n\nexport async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n  await db.execute(sql`\n    ALTER TABLE posts DROP COLUMN featured\n  `)\n}\n```\n\n## Using Drizzle Directly\n\nYou can access the Drizzle instance directly for advanced queries:\n\n```typescript\nimport { sql } from '@dpfurner/payload-db-mysql'\n\n// In a hook or custom endpoint\nconst results = await payload.db.drizzle.execute(\n  sql`SELECT * FROM posts WHERE published = true`\n)\n```\n\n## Schema Hooks\n\nCustomize the generated schema with hooks:\n\n```typescript\nmysqlAdapter({\n  pool: { /* ... */ },\n  afterSchemaInit: [\n    async ({ schema, extendTable }) => {\n      // Add a full-text index to a table\n      return {\n        ...schema,\n        tables: {\n          ...schema.tables,\n          // Your customizations\n        },\n      }\n    },\n  ],\n})\n```\n\n## Production Migrations\n\nFor production deployments, you can pre-compile migrations:\n\n```typescript\nimport { mysqlAdapter } from '@dpfurner/payload-db-mysql'\nimport { migrations } from './migrations'\n\nexport default buildConfig({\n  db: mysqlAdapter({\n    pool: { /* ... */ },\n    prodMigrations: migrations,\n  }),\n})\n```\n\n## TypeScript\n\nThe adapter provides full TypeScript support. You can generate types from your schema:\n\n```bash\nnpx payload generate:types\n```\n\n## Supported MySQL Versions\n\n- MySQL 8.0+\n- MariaDB 10.5+\n\n## Features\n\n- Full Payload CMS feature support\n- Automatic schema generation\n- Migration support\n- Transaction support\n- JSON field support\n- Relationship handling\n- Localization support\n- Version history support\n- Draft system support\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-5fdce7b7d8f991349f75614de9152899"}