{"id":20299018,"url":"https://github.com/socketsupply/dynavolt","last_synced_at":"2026-05-05T13:36:51.968Z","repository":{"id":230203924,"uuid":"127144283","full_name":"socketsupply/dynavolt","owner":"socketsupply","description":"A highly opinionated DynamoDB client for aws-sdk v3 using esm.","archived":false,"fork":false,"pushed_at":"2024-03-28T10:49:42.000Z","size":155,"stargazers_count":2,"open_issues_count":15,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-30T06:45:27.158Z","etag":null,"topics":["aws","data","database","dynamo","dynamodb","key-value","kvstore"],"latest_commit_sha":null,"homepage":"https://optoolco.github.io/dynavolt/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/socketsupply.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-03-28T13:27:31.000Z","updated_at":"2024-03-28T10:38:48.000Z","dependencies_parsed_at":"2024-03-28T12:01:32.868Z","dependency_job_id":"6ca8ac1f-d4cd-4bdf-b6bf-7f99d5a4f601","html_url":"https://github.com/socketsupply/dynavolt","commit_stats":null,"previous_names":["socketsupply/dynavolt"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/socketsupply/dynavolt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socketsupply%2Fdynavolt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socketsupply%2Fdynavolt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socketsupply%2Fdynavolt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socketsupply%2Fdynavolt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/socketsupply","download_url":"https://codeload.github.com/socketsupply/dynavolt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socketsupply%2Fdynavolt/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262969887,"owners_count":23392530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["aws","data","database","dynamo","dynamodb","key-value","kvstore"],"created_at":"2024-11-14T16:13:14.676Z","updated_at":"2026-05-05T13:36:46.891Z","avatar_url":"https://github.com/socketsupply.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SYNOPSIS\nA highly opinionated DynamoDB client for aws-sdk v3 using esm.\n\n# USAGE\n\n```js\nimport Dynavolt from 'dynavolt'\nconst db = new Dynavolt({ region: 'us-west-2' })\n```\n\n## TABLES\n\n### CREATE\n\n```js\nconst { err, data: table } = await db.create('artists')\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003ci\u003eADVANCED USAGE\u003c/i\u003e\u003c/summary\u003e\n\u003cp\u003e\n\nYou can also specify `hash`, `range`, and `options`.\n\n```js\nconst opts = { TimeToLiveSpecification: {\n  AttributeName: 'ttl',\n  Enabled: true\n}\n\nconst { err } = await db.create('artists', 'genres', 'artists', opts)\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n### OPEN\nOpen a database and optionally create it if it doesnt exist.\n\n```js\nconst { err, data: table } = await db.open('artists', { create: true })\n```\n\n## METHODS\n\n### PUT\nDynavolt will automatically (and recursively) deduce the types of your data and\nannotate them correctly, so there is no need to write \"dynamodb json\".\n\n```js\nconst { err } = await table.put('glen', 'danzig', { height: 'quite-short' })\n```\n\n### PUT IF NOT EXISTS\nDynavolt will automatically (and recursively) deduce the types of your data and\nannotate them correctly, so there is no need to write \"dynamodb json\".\n\n```js\nconst { err } = await table.put('glen', 'danzig', { height: 'quite-short' })\n```\n\n### UPDATE\n\n```js\nconst expr = `SET count = count + N(${value})`\n\nconst { err, data } = await table.update('iggy', 'pop', expr)\n```\n\n\n### GET\n\n```js\nconst { err, data } = await table.get('iggy', 'pop')\n```\n\n### DELETE\n\n```js\nconst { err } = await table.delete('henry', 'rollins')\n```\n\n### BATCH WRITE\n\n```js\nconst { err } = await table.batchWrite([\n  ['foo', 'bar', { beep: 'boop' }],\n  ['foo', 'bar']\n])\n```\n\n### BATCH READ\n\n```js\nconst { err } = await table.batchRead([\n  ['foo', 'bazz'],\n  ['beep', 'boop']\n])\n```\n\n### QUERY\nQuery takes a [Key Condition Expression][0]. For syntax refernece see the\n[Comparison Operator and Function Reference][1].\n\n```js\nconst iterator = table.query(`hash = N(greetings) AND begins_with(range, S(hell))`)\n\nfor await (const { err, data: { key, value } } of iterator) {\n  console.log(key, value)\n}\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003ci\u003eADVANCED USAGE\u003c/i\u003e\u003c/summary\u003e\n\u003cp\u003e\n\nYou can also chain a [Filter Expression][2] and [Projection Expression][3]\nclauses onto querties. More info about Projection Expression syntax [here][4].\n\n```js\nconst iterator = table\n  .query(`hash = N(songs) AND begins_with(range, S(moth))`)\n  .filter(`contains(artists.name, S(danzig)`)\n  .properties('artists.weight', 'artists.height')\n\nfor await (const { err, data: { key, value } } of iterator) {\n  console.log(key, value)\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n### SCAN\nScan takes a [Filter Expression][2].\n\n```js\nconst iterator = table.scan(`contains(artists.name, S(danzig)`)\n\nfor await (const { err, data: { key, value } } of iterator) {\n  console.log(key, value)\n}\n```\n\n### TTL\nRecords in your database can be set to expire by specifying a `TTL` attribute\non your table.\n\n```js\nconst { err } = await table.setTTL('stillCool')\n```\n\nNow one minute after adding the following record, it will be removed.\n\n```js\nconst opts = {\n  stillCool: 6e4\n}\n\nconst { err } = await table.put('brian', 'setzer', { cool: true }, opts)\n```\n\n[0]:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions\n[1]:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html\n[2]:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.FilterExpression\n[3]:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html\n[4]:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Attributes.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsocketsupply%2Fdynavolt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsocketsupply%2Fdynavolt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsocketsupply%2Fdynavolt/lists"}