{"id":49809,"library":"yammy","title":"Yammy - MongoDB Migration Tool","description":"Yammy is a MongoDB migration library (v2.1.0) designed for programmatic use as a module, unlike CLI-focused alternatives. It supports multiple databases, backward compatibility with migrate-mongo, and uses transactions by default for data integrity. Requires Node.js >=8.0.0 and MongoDB >=2.6 (or >=4.0/4.2 for transactions). Stable release with TypeScript type definitions included, released under MIT license.","status":"active","version":"2.1.0","language":"javascript","source_language":"en","source_url":"https://github.com/SkeLLLa/yammy","tags":["javascript","mongo","mongodb","migrate","migration","typescript"],"install":[{"cmd":"npm install yammy","lang":"bash","label":"npm"},{"cmd":"yarn add yammy","lang":"bash","label":"yarn"},{"cmd":"pnpm add yammy","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for database operations; must be installed separately.","package":"mongodb","optional":false}],"imports":[{"note":"ESM import for TypeScript/ES modules; CommonJS users can use require but note the named export.","wrong":"const Migrate = require('yammy')","symbol":"Migrate","correct":"import { Migrate } from 'yammy'"},{"note":"Type-only import for defining migration structure; not a runtime value.","wrong":"import { Migration } from 'yammy'","symbol":"Migration","correct":"import type { Migration } from 'yammy'"},{"note":"Type-only import for constructor options interface.","wrong":"import { YammyOptions } from 'yammy'","symbol":"YammyOptions","correct":"import type { YammyOptions } from 'yammy'"}],"quickstart":{"code":"import { Migrate } from 'yammy';\n\nconst migrate = new Migrate(\n  { uri: process.env.MONGO_URI ?? 'mongodb://localhost:27017', options: { useNewUrlParser: true, useUnifiedTopology: true } },\n  { autoClose: true, dir: './migrations' }\n);\n\n// List pending migrations\nmigrate.pending()\n  .then((migrations) => {\n    console.log('Pending:', migrations);\n    // Run all pending\n    return migrate.up();\n  })\n  .then(() => console.log('Migrations applied successfully'))\n  .catch(err => console.error(err));\n\nexport const up = async (db, session) => {\n  await db.collection('mycollection').createIndex({ email: 1 }, { unique: true, session });\n};\n\nexport const down = async (db, session) => {\n  await db.collection('mycollection').dropIndex('email_1', { session });\n};\n\nexport const db = 'mydb';","lang":"typescript","description":"Initialize Migrate instance, list pending migrations, and apply them. Includes example migration file with up/down functions."},"warnings":[{"fix":"Update constructor to `new Migrate({ uri, options }, { autoClose, dir })`","message":"In version 2.x, the Migrate constructor signature changed. Options object now takes two arguments: dbConfig and globalOptions.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Ensure MongoDB is configured for transactions or set `useTransactions: false` in options.","message":"Migrations using transactions require MongoDB replica set (>=4.0) or sharded cluster (>=4.2). Default migrations will fail if not supported.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Add `exports.db = 'your_database_name';` to each migration file.","message":"The migration file must export a `db` string property to specify target database, otherwise migrations will apply to all databases.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use the Migrate class in your application code instead of CLI.","message":"The CLI usage via `npx yammy` is deprecated in favor of programmatic API. CLI may be removed in future releases.","severity":"deprecated","affected_versions":">=2.0.0"}],"env_vars":null,"search_vec":"'/4.2':50 '2.6':47 '4.0':49 '8.0.0':44 'altern':23 'backward':28 'cli':21 'cli-focus':20 'compat':29 'data':40 'databas':27 'default':38 'definit':58 'design':12 'focus':22 'includ':59 'integr':41 'javascript':64 'librari':10 'licens':63 'migrat':3,9,32,67,68 'migrate-mongo':31 'mit':62 'modul':18 'mongo':33,65 'mongodb':2,8,46,66 'multipl':26 'node.js':43 'programmat':14 'releas':54,60 'requir':42 'stabl':53 'support':25 'tool':4 'transact':36,52 'type':57 'typescript':56,69 'unlik':19 'use':15,35 'v2.1.0':11 'yammi':1,5","created_at":"2026-06-07T17:03:43.028459+00:00","updated_at":"2026-06-07T17:03:43.028459+00:00","problems":[{"fix":"Use `import { Migrate } from 'yammy'` (ESM) or `const { Migrate } = require('yammy')` (CommonJS).","cause":"Improper import/require style: using default import instead of named import.","error":"TypeError: Migrate is not a constructor"},{"fix":"Either switch to a replica set or set `useTransactions: false` in Migrate options.","cause":"Trying to use transactions on a standalone MongoDB instance.","error":"MongoError: Transaction numbers are only allowed on a replica set member or mongos"},{"fix":"Run `npm install yammy` in your project directory.","cause":"Package not installed.","error":"Cannot find module 'yammy'"},{"fix":"Add `exports.db = 'myDatabaseName';` to the migration file.","cause":"Migration file missing `exports.db` property.","error":"Error: No database provided in migration file"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://gitlab.com/m03geek/yammy#README","github":"https://github.com/SkeLLLa/yammy","docs":null,"changelog":null,"pypi":null,"npm":"yammy","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}