{"id":19390903,"url":"https://github.com/kysely-org/kysely-singlestore","last_synced_at":"2026-03-03T15:33:03.628Z","repository":{"id":60054783,"uuid":"540613196","full_name":"kysely-org/kysely-singlestore","owner":"kysely-org","description":"Kysely dialects, plugins and other goodies for Singlestore (formerly MemSQL)","archived":false,"fork":false,"pushed_at":"2024-08-12T20:26:43.000Z","size":422,"stargazers_count":10,"open_issues_count":6,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-10T14:26:00.218Z","etag":null,"topics":["analytics","browser","columnstore","data-api","deno","dialect","in-memory-database","kysely","mysql","query-builder","serverless","singlestore","sql","type-safe","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kysely-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-23T20:51:17.000Z","updated_at":"2025-05-18T17:52:36.000Z","dependencies_parsed_at":"2024-01-25T14:20:59.706Z","dependency_job_id":"cca6f37a-6ab0-43c8-830f-a4a7a79cce0f","html_url":"https://github.com/kysely-org/kysely-singlestore","commit_stats":{"total_commits":68,"total_committers":2,"mean_commits":34.0,"dds":"0.014705882352941124","last_synced_commit":"903b41894eaaccce1b3b21e223b4196e9a16f2d6"},"previous_names":["igalklebanov/kysely-singlestore"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/kysely-org/kysely-singlestore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kysely-org%2Fkysely-singlestore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kysely-org%2Fkysely-singlestore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kysely-org%2Fkysely-singlestore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kysely-org%2Fkysely-singlestore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kysely-org","download_url":"https://codeload.github.com/kysely-org/kysely-singlestore/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kysely-org%2Fkysely-singlestore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30050462,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T15:26:47.567Z","status":"ssl_error","status_checked_at":"2026-03-03T15:26:17.132Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","browser","columnstore","data-api","deno","dialect","in-memory-database","kysely","mysql","query-builder","serverless","singlestore","sql","type-safe","typescript"],"created_at":"2024-11-10T10:23:54.692Z","updated_at":"2026-03-03T15:33:03.576Z","avatar_url":"https://github.com/kysely-org.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Logo](./assets/kysely-singlestore.png)\n\n# kysely-singlestore\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/0f759c07e4dd4f9889a21ea2a49d5a2e)](https://www.codacy.com/gh/igalklebanov/kysely-singlestore/dashboard?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=igalklebanov/kysely-singlestore\u0026utm_campaign=Badge_Grade)\n![Powered by TypeScript](https://img.shields.io/badge/powered%20by-typescript-blue.svg)\n\n[Kysely](https://github.com/koskimas/kysely) dialects, plugins and other goodies for [SingleStore](https://www.singlestore.com/) (formerly MemSQL).\n\n## Installation\n\n### Node.js\n\n#### NPM 7+\n\n```bash\nnpm i kysely-singlestore\n```\n\n#### NPM \u003c7\n\n```bash\nnpm i kysely-singlestore kysely\n```\n\n#### Yarn\n\n```bash\nyarn add kysely-singlestore kysely\n```\n\n#### PNPM\n\n```bash\npnpm add kysely-singlestore kysely\n```\n\n### Deno\n\nThis package uses/extends some [Kysely](https://github.com/koskimas/kysely) types and classes, which are imported using it's NPM package name -- not a relative file path or CDN url.\n\nTo fix that, add an [`import_map.json`](https://deno.land/manual@v1.26.1/linking_to_external_code/import_maps) file.\n\n```json\n{\n  \"imports\": {\n    \"kysely\": \"https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js\"\n  }\n}\n```\n\n## Usage\n\n### Data API Dialect\n\n[SingleStore Data API](https://docs.singlestore.com/managed-service/en/reference/data-api.html) allows executing SQL queries in the browser and is a great fit for serverless functions and other auto-scaling compute services. It does not support transactions at this point in time.\n\n#### Node.js 16.8+\n\nOlder node versions are supported as well, just swap [`undici`](https://github.com/nodejs/undici) with [`node-fetch`](https://github.com/node-fetch/node-fetch).\n\n```ts\nimport {Kysely} from 'kysely'\nimport {SingleStoreDataApiDialect, SingleStoreDataType} from 'kysely-singlestore'\nimport {fetch} from 'undici'\n\ninterface Database {\n  person: {\n    id: string\n    first_name: string | null\n    last_name: string | null\n  }\n  pet: {\n    id: string\n    name: string\n    owner_id: string\n  }\n}\n\nconst db = new Kysely\u003cDatabase\u003e({\n  dialect: new SingleStoreDataApiDialect({\n    database: '\u003cdatabase\u003e',\n    deserialization: {\n      castDatesAsNativeDates: true,\n      castTinyIntAsBoolean: true,\n      deserialize: (value, dataType, columnName) =\u003e\n        dataType === SingleStoreDataType.Json \u0026\u0026 columnName === 'pet' ? new Pet(value) : undefined,\n      unwrapDecimals: true,\n    },\n    fetch,\n    hostname: '\u003chostname\u003e',\n    password: '\u003cpassword\u003e',\n    username: '\u003cusername\u003e',\n  }),\n})\n```\n\n#### Browser\n\n```ts\nimport {Kysely} from 'kysely'\nimport {SingleStoreDataApiDialect, SingleStoreDataType} from 'kysely-singlestore'\n\ninterface Database {\n  person: {\n    id: string\n    first_name: string | null\n    last_name: string | null\n  }\n  pet: {\n    id: string\n    name: string\n    owner_id: string\n  }\n}\n\nconst db = new Kysely\u003cDatabase\u003e({\n  dialect: new SingleStoreDataApiDialect({\n    database: '\u003cdatabase\u003e',\n    deserialization: {\n      castDatesAsNativeDates: true,\n      castTinyIntAsBoolean: true,\n      deserialize: (value, dataType, columnName) =\u003e\n        dataType === SingleStoreDataType.Json \u0026\u0026 columnName === 'pet' ? new Pet(value) : undefined,\n      unwrapDecimals: true,\n    },\n    fetch: window.fetch.bind(window),\n    hostname: '\u003chostname\u003e',\n    password: '\u003cpassword\u003e',\n    username: '\u003cusername\u003e',\n  }),\n})\n```\n\n#### Deno\n\n```ts\nimport {Kysely} from 'https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js'\nimport {\n  SingleStoreDataApiDialect,\n  SingleStoreDataType,\n} from 'https://cdn.jsdelivr.net/npm/kysely-singlestore@latest/dist/esm/index.js'\n\ninterface Database {\n  person: {\n    id: string\n    first_name: string | null\n    last_name: string | null\n  }\n  pet: {\n    id: string\n    name: string\n    owner_id: string\n  }\n}\n\nconst db = new Kysely\u003cDatabase\u003e({\n  dialect: new SingleStoreDataApiDialect({\n    database: '\u003cdatabase\u003e',\n    deserialization: {\n      castDatesAsNativeDates: true,\n      castTinyIntAsBoolean: true,\n      deserialize: (value, dataType, columnName) =\u003e\n        dataType === SingleStoreDataType.Json \u0026\u0026 columnName === 'pet' ? new Pet(value) : undefined,\n      unwrapDecimals: true,\n    },\n    fetch: fetch,\n    hostname: '\u003chostname\u003e',\n    password: '\u003cpassword\u003e',\n    username: '\u003cusername\u003e',\n  }),\n})\n```\n\n### \"Classic\" Dialect - Soon\u003csup\u003eTM\u003c/sup\u003e\n\nSingleStore is wire-compatible with MySQL so you can connect to it using `mysql2` in node environments, and take advantage of connection pools and transactions.\n\n## License\n\nMIT License, see `LICENSE`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkysely-org%2Fkysely-singlestore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkysely-org%2Fkysely-singlestore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkysely-org%2Fkysely-singlestore/lists"}