{"id":13512576,"url":"https://github.com/sensedeep/dynamodb-onetable","last_synced_at":"2026-01-14T21:02:28.399Z","repository":{"id":37471468,"uuid":"328555906","full_name":"sensedeep/dynamodb-onetable","owner":"sensedeep","description":"DynamoDB access and management for one table designs with NodeJS","archived":false,"fork":false,"pushed_at":"2025-09-11T01:27:14.000Z","size":3043,"stargazers_count":711,"open_issues_count":19,"forks_count":114,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-10-22T05:49:31.653Z","etag":null,"topics":["aws","dynamodb","nosql","orm","serverless","typescript"],"latest_commit_sha":null,"homepage":"https://doc.onetable.io/","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/sensedeep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-11T05:14:56.000Z","updated_at":"2025-10-14T12:44:15.000Z","dependencies_parsed_at":"2024-05-20T23:45:38.748Z","dependency_job_id":"af8046d2-f5bd-4fc0-9503-d3bd4b275841","html_url":"https://github.com/sensedeep/dynamodb-onetable","commit_stats":{"total_commits":1018,"total_committers":48,"mean_commits":"21.208333333333332","dds":"0.15717092337917482","last_synced_commit":"728314d9e779857bdf2fa2465a739dab60853c8d"},"previous_names":[],"tags_count":109,"template":false,"template_full_name":null,"purl":"pkg:github/sensedeep/dynamodb-onetable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensedeep%2Fdynamodb-onetable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensedeep%2Fdynamodb-onetable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensedeep%2Fdynamodb-onetable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensedeep%2Fdynamodb-onetable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sensedeep","download_url":"https://codeload.github.com/sensedeep/dynamodb-onetable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensedeep%2Fdynamodb-onetable/sbom","scorecard":{"id":811255,"data":{"date":"2025-08-11","repo":{"name":"github.com/sensedeep/dynamodb-onetable","commit":"cdefcea10b73ef5849fab0a25c3a45b568420ec4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 4/24 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/sensedeep/dynamodb-onetable/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/sensedeep/dynamodb-onetable/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/sensedeep/dynamodb-onetable/build.yml/main?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc","Warn: Project is vulnerable to: GHSA-x3cc-x39p-42qx"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T13:15:29.493Z","repository_id":37471468,"created_at":"2025-08-23T13:15:29.493Z","updated_at":"2025-08-23T13:15:29.493Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28434520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["aws","dynamodb","nosql","orm","serverless","typescript"],"created_at":"2024-08-01T04:00:21.182Z","updated_at":"2026-01-14T21:02:28.366Z","avatar_url":"https://github.com/sensedeep.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Packages","Open Source Repos","Tools"],"sub_categories":["DynamoDB"],"readme":"![OneTable](https://www.sensedeep.com/images/ring-short.png)\n\n_One Table to Rule Them All_\n\n[![Build Status](https://img.shields.io/github/actions/workflow/status/sensedeep/dynamodb-onetable/build.yml?branch=main)](https://img.shields.io/github/actions/workflow/status/sensedeep/dynamodb-onetable/build.yml?branch=main)\n[![npm](https://img.shields.io/npm/v/dynamodb-onetable.svg)](https://www.npmjs.com/package/dynamodb-onetable)\n[![npm](https://img.shields.io/npm/l/dynamodb-onetable.svg)](https://www.npmjs.com/package/dynamodb-onetable)\n[![Coverage Status](https://coveralls.io/repos/github/sensedeep/dynamodb-onetable/badge.svg?branch=main)](https://coveralls.io/github/sensedeep/dynamodb-onetable?branch=main)\n\n## The Easiest Way to Create DynamoDB Single Table Designs.\n\nOneTable is the most evolved API for DynamoDB. It provides a dry, high-level, elegant syntax while enabling full access to the DynamoDB API.\n\nOneTable works with JavaScript and TypeScript. For TypeScript, OneTable will create fully typed entities from your data schemas automatically.\n\n## Full Documentation\n\n-   [OneTable Documentation](https://doc.onetable.io/)\n\n## OneTable Features\n\n-   Schema supported one-table access to DynamoDB APIs.\n-   Efficient storage and access of multiple entities in a single DynamoDB table.\n-   High level API with type marshaling, validations, and extended query capability for get/delete/update operations.\n-   Bidirectional conversion of DynamoDB types to Javascript types.\n-   Generation of Conditional, Filter, Key and Update expressions.\n-   Schema item definitions for attribute types, default values, enums, unique attributes and validations.\n-   Option to invoke DynamoDB or simply generate API parameters.\n-   Powerful field level validations with \"required\" and \"unique\" attributes.\n-   Easy parameterization of filter and conditional queries.\n-   Detailed metrics for Table, Tenant, Source, Index, Model and Operation.\n-   Multi-page response aggregation.\n-   Compound and templated key management.\n-   Attribute mapping and packing.\n-   Support for sparse GSIs that project keys and overloaded attributes.\n-   Encrypted fields.\n-   CreateTable, DeleteTable table and index admin operations.\n-   Support for Batch, Transactions, GSI, LSI indexes.\n-   Intercept hooks to modify DynamoDB requests and responses.\n-   Controllable logging to see exact parameter, data and responses.\n-   Simple and easy to read source.\n-   Integrated statistics.\n-   Safety options to prevent \"rm -fr \\*\".\n-   TypeScript type inference from schema for full type validation on APIs, parameters, returns, and entities and attributes.\n-   Migrations support via [OneTable Migrate](https://github.com/sensedeep/onetable-migrate) and [OneTable CLI](https://github.com/sensedeep/onetable-cli).\n-   Graphical monitoring of single-table performance via [SenseDeep](https://www.sensedeep.com).\n\n## Installation\n\n    npm i dynamodb-onetable\n\n## Quick Tour\n\nImport the OneTable library. If you are not using ES modules or TypeScript, use `require` to import the libraries.\n\n```javascript\nimport {Table} from 'dynamodb-onetable'\n```\n\nImport the `DynamoDBClient` class and create a `DynamoDBClient` instance.\n\n```javascript\nimport {DynamoDBClient} from '@aws-sdk/client-dynamodb'\nconst client = new DynamoDBClient({\n    endpoint: `http://localhost:${PORT}`,\n    region: 'local',\n    credentials: new AWS.Credentials({\n        accessKeyId: 'test',\n        secretAccessKey: 'test',\n    }),\n})\n```\n\nIf you are using the legacy AWS SDK V2, import the AWS `DynamoDB` class and create a `DocumentClient` instance.\n\n```javascript\nimport DynamoDB from 'aws-sdk/clients/dynamodb'\nconst client = new DynamoDB.DocumentClient(params)\n```\n\nNote: you can use the Table.setClient API to defer setting the client or replace the client at any time.\n\nInitialize your OneTable `Table` instance and define your models via a schema.\n\n```javascript\nconst table = new Table({\n    client: client,\n    name: 'MyTable',\n    schema: MySchema,\n})\n```\n\nThis will initialize your OneTable Table instance and define your models via a schema.\n\n## Schemas\n\nSchemas define how items will be stored in your database and look like this:\n\n```javascript\nconst MySchema = {\n    format: 'onetable:1.1.0',\n    version: '0.0.1',\n    indexes: {\n        primary: {hash: 'pk', sort: 'sk'},\n        gs1: {hash: 'gs1pk', sort: 'gs1sk', follow: true},\n        ls1: {sort: 'id', type: 'local'},\n    },\n    models: {\n        Account: {\n            pk: {type: String, value: 'account:${id}'},\n            sk: {type: String, value: 'account:'},\n            id: {type: String, generate: 'ulid', validate: /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}$/i},\n            name: {type: String, required: true},\n            status: {type: String, default: 'active'},\n            zip: {type: String},\n        },\n        User: {\n            pk: {type: String, value: 'account:${accountName}'},\n            sk: {type: String, value: 'user:${email}', validate: EmailRegExp},\n            id: {type: String, required: true},\n            accountName: {type: String, required: true},\n            email: {type: String, required: true},\n            firstName: {type: String, required: true},\n            lastName: {type: String, required: true},\n            username: {type: String, required: true},\n            role: {type: String, enum: ['user', 'admin'], required: true, default: 'user'},\n            balance: {type: Number, default: 0},\n\n            gs1pk: {type: String, value: 'user-email:${email}'},\n            gs1sk: {type: String, value: 'user:'},\n        },\n    },\n    params: {\n        isoDates: true,\n        timestamps: true,\n    },\n}\n```\n\nTo create an item:\n\n```javascript\nlet account = await Account.create({\n    id: '8e7bbe6a-4afc-4117-9218-67081afc935b',\n    name: 'Acme Airplanes',\n})\n```\n\nThis will write the following to DynamoDB:\n\n```javascript\n{\n    pk:         'account:8e7bbe6a-4afc-4117-9218-67081afc935b',\n    sk:         'account:98034',\n    id:         '8e7bbe6a-4afc-4117-9218-67081afc935b',\n    name:       'Acme Airplanes',\n    status:     'active',\n    zip:        '98034',\n    created:    1610347305510,\n    updated:    1610347305510,\n}\n```\n\nGet an item:\n\n```javascript\nlet account = await Account.get({\n    id: '8e7bbe6a-4afc-4117-9218-67081afc935b',\n})\n```\n\nwhich will return:\n\n```javascript\n{\n    id:       '8e7bbe6a-4afc-4117-9218-67081afc935b',\n    name:     'Acme Airplanes',\n    status:   'active',\n    zip:      '98034',\n}\n```\n\nTo use a secondary index:\n\n```javascript\nlet user = await User.get({email: 'user@example.com'}, {index: 'gs1'})\n```\n\nTo find a set of items:\n\n```javascript\nlet users = await User.find({accountId: account.id})\n\nlet adminUsers = await User.find({accountId: account.id, role: 'admin'})\n\nlet users = await User.find(\n    {accountId: account.id},\n    {\n        where: '${balance} \u003e {100.00}',\n    }\n)\n\n//  Get a count of matching users without returning the actual items\nlet users = await User.find({accountId: account.id, role: 'admin'}, {count: true})\nlet count = users.count\n```\n\nTo update an item:\n\n```javascript\nawait User.update({id: userId, balance: 50})\nawait User.update({id: userId}, {add: {balance: 10.0}})\nawait User.update({id: userId}, {set: {status: '{active}'}})\n```\n\nTo do a transactional update:\n\n```javascript\nlet transaction = {}\nawait Account.update({id: account.id, status: 'active'}, {transaction})\nawait User.update({id: user.id, role: 'user'}, {transaction})\nawait table.transact('write', transaction)\n```\n\n## TypeScript\n\nOneTable provides TypeScript type declaration files so that OneTable APIs, requests and responses can be fully type checked.\n\nOneTable also creates type declarations for your table entities and attributes. TypeScript will catch any invalid entity or entity attribute references.\n\nUsing the magic of TypeScript dynamic typing, OneTable automatically converts your OneTable schema into fully typed generic Model APIs.\n\nFor example:\n\n```javascript\nimport {Entity, Model, Table} from 'dynamodb-onetable'\n\nconst MySchema = {\n    ...\n    models: {\n        Account: {\n            pk:    { type: String, value: 'account:${name}' },\n            name:  { type: String },\n        }\n    } as const     // Required for TypeScript\n}\n\n//  Fully typed Account object based on the schema\ntype Account = Entity\u003ctypeof MySchema.models.Account\u003e\n\nlet account: Account = {\n    name: 'Coyote',        //  OK\n    unknown: 42,           //  Error\n}\n\nlet AccountModel: Model\u003cAccount\u003e = table.getModel('Account')\n\nlet account = await AccountModel.create({\n    name: 'Acme',               //  OK\n    unknown: 42,                //  Error\n})\n\naccount.name = 'Coyote'         //  OK\naccount.unknown = 42            //  Error\n```\n\n### DynamoDB Articles\n\nHere is a collection of articles that can help you on your way with DynamoDB and OneTable.\n\nDynamoDB Topic|Link\n-|-\nIntro to DynamoDB| [https://www.sensedeep.com/blog/posts/2021/dynamodb-onetable-tour.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-onetable-tour.html)\nData Modeling for DynamoDB | [https://www.sensedeep.com/blog/posts/2021/dynamodb-singletable-design.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-singletable-design.html)\nThe What and Why of Single Table Design | [https://www.alexdebrie.com/posts/dynamodb-single-table/](https://www.alexdebrie.com/posts/dynamodb-single-table/)\nDynamoDB with OneTable Schemas | [https://www.sensedeep.com/blog/posts/2021/dynamodb-schemas.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-schemas.html)\nDynamoDB OneTable API Overview | [https://www.sensedeep.com/blog/posts/2021/dynamodb-onetable-tour.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-onetable-tour.html)\nDynamoDB Checklist | [https://www.sensedeep.com/blog/posts/2021/dynamodb-checklist.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-checklist.html)\nDynamoDB with TypeScript | [https://www.sensedeep.com/blog/posts/2021/dynamodb-typescript.html](https://www.sensedeep.com/blog/posts/2021/dynamodb-typescript.html)\nDynamoDB Sparse GSIs | [https://www.sensedeep.com/blog/posts/2021/sparse-gsi-indexes.html](https://www.sensedeep.com/blog/posts/2021/sparse-gsi-indexes.html)\nDynamoDB Attribute Packing | [https://www.sensedeep.com/blog/posts/2021/attribute-packing.html](https://www.sensedeep.com/blog/posts/2021/attribute-packing.html)\nEvolving DynamoDB Designs | [https://www.sensedeep.com/blog/posts/2021/evolving-dynamodb-designs.html](https://www.sensedeep.com/blog/posts/2021/evolving-dynamodb-designs.html)\nSenseDeep Migration Manager | [https://www.sensedeep.com/blog/posts/series/dynamodb-studio/migration-manager.html](https://www.sensedeep.com/blog/posts/series/dynamodb-studio/migration-manager.html)\nSenseDeep DynamoDB Studio | [https://www.sensedeep.com/blog/posts/stories/dynamodb-studio.html](https://www.sensedeep.com/blog/posts/stories/dynamodb-studio.html)\nSenseDeep DynamoDB Quick Tour | [https://www.sensedeep.com/blog/posts/product/dynamodb-tour.html](https://www.sensedeep.com/blog/posts/product/dynamodb-tour.html)\n\n\n### Serverless Articles\n\nAnd a few serverless articles:\n\nServerless Topic|Link\n-|-\nHow to Debug Serverless Apps | [https://www.sensedeep.com/blog/posts/stories/how-to-debug-serverless-apps.html](https://www.sensedeep.com/blog/posts/stories/how-to-debug-serverless-apps.html)\nHow to invoke HTTP without Waiting from Lambda | [https://www.sensedeep.com/blog/posts/stories/lambda-fast-http.html](https://www.sensedeep.com/blog/posts/stories/lambda-fast-http.html)\nFast Logging with Lambda | [https://www.sensedeep.com/blog/posts/senselogs/serverless-logging.html](https://www.sensedeep.com/blog/posts/senselogs/serverless-logging.html)\n\n### SenseDeep\n\nPlease try our [SenseDeep Serverless Developer Studio](https://www.sensedeep.com/) that includes a full DynamoDB suite with single-table aware data browser, single-table designer, migration manager, provisioning planner and metrics.\n\n![SenseDeep Developer Studio](https://www.sensedeep.com/images/sensedeep/table-browse.png).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensedeep%2Fdynamodb-onetable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsensedeep%2Fdynamodb-onetable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensedeep%2Fdynamodb-onetable/lists"}