{"id":43356,"library":"mysql-shaman","title":"mysql-shaman","description":"mysql-shaman is a lightweight ORM for Node.js that provides a simple, familiar syntax for MySQL CRUD operations, wrapping the official mysql package. Version 1.0.11 (latest) ships TypeScript types and includes a CLI for database management. Unlike heavy ORMs like Sequelize or TypeORM, it focuses on minimalism and discoverability, allowing developers to use JavaScript expressions instead of raw SQL strings. Released under the IoT Shaman project, it targets developers who want a thin abstraction over mysql with minimal configuration.","status":"active","version":"1.0.11","language":"javascript","source_language":"en","source_url":"https://github.com/iotshaman/mysql-shaman","tags":["javascript","mysql","node","nodejs","typescript"],"install":[{"cmd":"npm install mysql-shaman","lang":"bash","label":"npm"},{"cmd":"yarn add mysql-shaman","lang":"bash","label":"yarn"},{"cmd":"pnpm add mysql-shaman","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Core mysql driver for database connectivity","package":"mysql","optional":false}],"imports":[{"note":"Default export not available, use named import. TypeScript types are included.","wrong":"const DatabaseContext = require('mysql-shaman').DatabaseContext","symbol":"DatabaseContext","correct":"import { DatabaseContext } from 'mysql-shaman'"},{"note":"Named import, not default.","wrong":"import Collection from 'mysql-shaman'","symbol":"Collection","correct":"import { Collection } from 'mysql-shaman'"},{"note":"CLI is not a programmatic module. Install globally and use from terminal.","wrong":"const cli = require('mysql-shaman/cli')","symbol":"mysql-shaman (CLI)","correct":"Call commands via npx mysql-shaman or global install"}],"quickstart":{"code":"import { DatabaseContext, Collection } from 'mysql-shaman';\n\nclass User {\n  userId?: string;\n  email: string;\n  firstName: string;\n  lastName: string;\n}\n\nclass MyDbContext extends DatabaseContext {\n  models = {\n    user: new Collection<User>()\n  }\n}\n\nconst db = new MyDbContext();\ndb.initialize({\n  connectionLimit: 10,\n  host: process.env.DB_HOST ?? 'localhost',\n  user: process.env.DB_USER ?? 'root',\n  password: process.env.DB_PASS ?? '',\n  database: process.env.DB_NAME ?? 'test',\n  waitForConnections: false\n});\n\ndb.models.user.find({ conditions: ['email = ?'], args: ['test@example.com'] })\n  .then(users => console.log(users))\n  .catch(err => console.error(err));","lang":"typescript","description":"Shows setting up a database context with a User model, initializing connection, and performing a simple find query."},"warnings":[{"fix":"Ensure model property names match table names exactly, including case.","message":"Collection property name must exactly match MySQL table name (case-sensitive). Mismatch causes silent failures.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Always use parameterized queries: provide 'conditions' with '?' placeholders and pass values in 'args'.","message":"Specifying 'conditions' without 'args' leads to SQL injection vulnerability if user input is directly concatenated.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use find() with appropriate filters.","message":"Method 'fi' appears in quickstart but is not documented; likely a typo for 'find' or removed method.","severity":"deprecated","affected_versions":"1.0.11"}],"env_vars":null,"search_vec":"'1.0.11':29 'abstract':78 'allow':54 'cli':37 'configur':83 'crud':21 'databas':39 'develop':55,73 'discover':53 'express':59 'familiar':17 'focus':49 'heavi':42 'includ':35 'instead':60 'iot':68 'javascript':58,84 'latest':30 'lightweight':9 'like':44 'manag':40 'minim':51,82 'mysql':2,5,20,26,80,85 'mysql-shaman':1,4 'node':86 'node.js':12 'nodej':87 'offici':25 'oper':22 'orm':10,43 'packag':27 'project':70 'provid':14 'raw':62 'releas':65 'sequel':45 'shaman':3,6,69 'ship':31 'simpl':16 'sql':63 'string':64 'syntax':18 'target':72 'thin':77 'type':33 'typeorm':47 'typescript':32,88 'unlik':41 'use':57 'version':28 'want':75 'wrap':23","created_at":"2026-06-05T16:59:24.847642+00:00","updated_at":"2026-06-05T16:59:24.847642+00:00","problems":[{"fix":"Run `npm install mysql-shaman` and ensure import matches 'import { ... } from 'mysql-shaman''","cause":"Package not installed or import path incorrect.","error":"Error: Cannot find module 'mysql-shaman'"},{"fix":"Either update mysql driver or run `ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';`","cause":"MySQL 8+ default authentication plugin is caching_sha2_password.","error":"ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server"},{"fix":"Ensure `database.initialize()` is called and awaited before performing queries.","cause":"Database not initialized before calling methods.","error":"TypeError: database.models.user.find is not a function"}],"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://github.com/iotshaman/mysql-shaman#readme","github":"https://github.com/iotshaman/mysql-shaman","docs":null,"changelog":null,"pypi":null,"npm":"mysql-shaman","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-05","next_check":"2026-09-03","install_tag":null}}