{"id":43802,"library":"scyllorm","title":"Scyllorm","description":"Experimental TypeScript ORM for ScyllaDB (and theoretically Cassandra) using the Data Mapper pattern, inspired by TypeORM. Current version 0.0.9, pre-1.0 with limited features and no active release schedule. Key differentiators: native ScyllaDB support via DataStax Cassandra driver, decorator-based model definitions, and opinions about schema design. Alternatives like TypeORM or MikroORM lack ScyllaDB optimizations. Not production-ready; missing many features.","status":"active","version":"0.0.9","language":"javascript","source_language":"en","source_url":"https://github.com/tfmf/scyllorm","tags":["javascript","ScyllaDB","ORM","cassandra","cql","nosql","database","Scylla","typescript"],"install":[{"cmd":"npm install scyllorm","lang":"bash","label":"npm"},{"cmd":"yarn add scyllorm","lang":"bash","label":"yarn"},{"cmd":"pnpm add scyllorm","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Underlying database driver for ScyllaDB/Cassandra","package":"cassandra-driver","optional":false}],"imports":[{"note":"Named export, not default","wrong":"import BaseModel from 'scyllorm'","symbol":"BaseModel","correct":"import { BaseModel } from 'scyllorm'"},{"note":"Decorator used on model classes","wrong":"","symbol":"Entity","correct":"import { Entity } from 'scyllorm'"},{"note":"TypeORM users may confuse imports","wrong":"import { PrimaryKeyColumn } from 'typeorm'","symbol":"PrimaryKeyColumn","correct":"import { PrimaryKeyColumn } from 'scyllorm'"}],"quickstart":{"code":"import { BaseModel, Column, Entity, Index, PrimaryKeyColumn } from 'scyllorm';\nimport { connect } from 'cassandra-driver';\n\n@Entity('employees')\n@Index('employees_first_name_idx', 'first_name')\nclass Employee extends BaseModel {\n  @PrimaryKeyColumn('INT', { partitionKey: true })\n  id: number;\n\n  @PrimaryKeyColumn('TEXT', { clusteringKey: true })\n  first_name: string;\n\n  @Column('TEXT')\n  last_name: string;\n\n  @Column('INT')\n  age: number;\n}\n\nasync function main() {\n  const connection = await connect({\n    contactPoints: ['localhost:9042'],\n    localDataCenter: 'datacenter1',\n    credentials: { username: 'cassandra', password: 'cassandra' }\n  });\n  \n  await connection.execute(\"CREATE KEYSPACE IF NOT EXISTS test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }\");\n  \n  const repo = connection.getRepository(Employee);\n  const emp = new Employee();\n  emp.id = 1;\n  emp.first_name = 'John';\n  emp.last_name = 'Doe';\n  emp.age = 30;\n  await repo.save(emp);\n  \n  const found = await repo.findOne({ id: 1 });\n  console.log(found);\n}\n\nmain().catch(console.error);","lang":"typescript","description":"Defines an Employee entity with partition and clustering keys, saves a record, and retrieves it."},"warnings":[{"fix":"Pin to exact version and check changelog before updating.","message":"Version 0.x API is unstable and can change without notice.","severity":"breaking","affected_versions":"0.0.0-0.0.9"},{"fix":"Use repository pattern; no alternative provided yet.","message":"The ORM only supports Data Mapper pattern; Active Record is not available.","severity":"gotcha","affected_versions":">=0.0.1"},{"fix":"Refer to latest documentation for current decorator signatures.","message":"Some decorator options may be deprecated as the API evolves.","severity":"deprecated","affected_versions":">=0.0.5"},{"fix":"Design schema accordingly; use denormalization and secondary indexes.","message":"Cassandra/ScyllaDB limitations: no JOINs, no auto-increment, limited aggregation.","severity":"gotcha","affected_versions":"all"},{"fix":"Use @Index('name', 'column') format.","message":"Index decorator syntax changed between versions.","severity":"breaking","affected_versions":">=0.0.3 <0.0.7"}],"env_vars":null,"search_vec":"'-1.0':22 '0.0.9':20 'activ':28 'altern':50 'base':42 'cassandra':9,38,68 'cql':69 'current':18 'data':12 'databas':71 'datastax':37 'decor':41 'decorator-bas':40 'definit':44 'design':49 'differenti':32 'driver':39 'experiment':2 'featur':25,64 'inspir':15 'javascript':65 'key':31 'lack':55 'like':51 'limit':24 'mani':63 'mapper':13 'mikroorm':54 'miss':62 'model':43 'nativ':33 'nosql':70 'opinion':46 'optim':57 'orm':4,67 'pattern':14 'pre':21 'product':60 'production-readi':59 'readi':61 'releas':29 'schedul':30 'schema':48 'scylla':72 'scylladb':6,34,56,66 'scyllorm':1 'support':35 'theoret':8 'typeorm':17,52 'typescript':3,73 'use':10 'version':19 'via':36","created_at":"2026-06-05T17:01:33.258930+00:00","updated_at":"2026-06-05T17:01:33.258930+00:00","problems":[{"fix":"Run npm install scyllorm and use import { Symbol } from 'scyllorm'.","cause":"Package not installed or import path wrong.","error":"Cannot find module 'scyllorm'"},{"fix":"Ensure BaseModel is imported as named import: import { BaseModel } from 'scyllorm'.","cause":"BaseModel not imported correctly.","error":"TypeError: Class extends value undefined is not a constructor or null"},{"fix":"Start Docker container with correct ports and credentials; verify with cqlsh.","cause":"ScyllaDB not running or credentials wrong.","error":"All hosts in the query plan are down"},{"fix":"Set \"experimentalDecorators\": true in tsconfig.json.","cause":"TypeScript experimental decorators not enabled.","error":"Decorators are not valid here"}],"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/tfmf/scyllorm#readme","github":"https://github.com/tfmf/scyllorm","docs":null,"changelog":null,"pypi":null,"npm":"scyllorm","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}}