{"id":36971453,"url":"https://github.com/renoki-co/dynamodb","last_synced_at":"2026-01-13T21:53:46.235Z","repository":{"id":62534804,"uuid":"227216898","full_name":"renoki-co/dynamodb","owner":"renoki-co","description":"AWS DynamoDB Eloquent ORM for Laravel 6+","archived":true,"fork":false,"pushed_at":"2021-01-20T08:24:24.000Z","size":16593,"stargazers_count":17,"open_issues_count":0,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-10-02T18:37:44.777Z","etag":null,"topics":["amazon","aws","builder","composite-keys","dynamodb","laravel","laravel-dynamodb","query","query-builder"],"latest_commit_sha":null,"homepage":null,"language":"PHP","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/renoki-co.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}},"created_at":"2019-12-10T21:14:23.000Z","updated_at":"2025-07-27T19:58:44.000Z","dependencies_parsed_at":"2022-11-02T14:47:12.382Z","dependency_job_id":null,"html_url":"https://github.com/renoki-co/dynamodb","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/renoki-co/dynamodb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renoki-co%2Fdynamodb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renoki-co%2Fdynamodb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renoki-co%2Fdynamodb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renoki-co%2Fdynamodb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renoki-co","download_url":"https://codeload.github.com/renoki-co/dynamodb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renoki-co%2Fdynamodb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28401406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: 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":["amazon","aws","builder","composite-keys","dynamodb","laravel","laravel-dynamodb","query","query-builder"],"created_at":"2026-01-13T21:53:45.324Z","updated_at":"2026-01-13T21:53:46.230Z","avatar_url":"https://github.com/renoki-co.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"![CI](https://github.com/renoki-co/dynamodb/workflows/CI/badge.svg?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/rennokki/dynamodb/v/stable)](https://packagist.org/packages/rennokki/dynamodb)\n[![Total Downloads](https://poser.pugx.org/rennokki/dynamodb/downloads)](https://packagist.org/packages/rennokki/dynamodb)\n[![Monthly Downloads](https://poser.pugx.org/rennokki/dynamodb/d/monthly)](https://packagist.org/packages/rennokki/dynamodb)\n[![codecov](https://codecov.io/gh/renoki-co/dynamodb/branch/master/graph/badge.svg)](https://codecov.io/gh/renoki-co/dynamodb/branch/master)\n[![StyleCI](https://github.styleci.io/repos/223236785/shield?branch=master)](https://github.styleci.io/repos/223236785)\n\nLaravel DynamoDB\n================\n\nThis package is a fork from [the original package by Bao Pham](https://github.com/baopham/laravel-dynamodb).\n\n\u003e For advanced users only. If you're not familiar with Laravel, [Laravel Eloquent](https://laravel.com/docs/eloquent) and [DynamoDB](https://aws.amazon.com/dynamodb/), then I suggest that you get familiar with those first.\n\n- [Laravel DynamoDB](#laravel-dynamodb)\n- [Install](#install)\n- [Install (for Lumen)](#install-for-lumen)\n- [Usage](#usage)\n  - [Extend your Model](#extend-your-model)\n  - [Add Trait to Model (to Sync)](#add-trait-to-model-to-sync)\n- [Query Builder](#query-builder)\n- [AWS SDK](#aws-sdk)\n- [Supported features](#supported-features)\n  - [find() and delete()](#find-and-delete)\n  - [Conditions](#conditions)\n    - [whereNull() and whereNotNull()](#wherenull-and-wherenotnull)\n  - [all() and first()](#all-and-first)\n  - [Pagination](#pagination)\n  - [update()](#update)\n  - [updateAsync()](#updateasync)\n  - [save()](#save)\n  - [saveAsync()](#saveasync)\n  - [delete()](#delete)\n  - [deleteAsync()](#deleteasync)\n  - [chunk()](#chunk)\n  - [limit() and take()](#limit-and-take)\n  - [firstOrFail()](#firstorfail)\n  - [findOrFail()](#findorfail)\n  - [refresh()](#refresh)\n  - [getItemsCount()](#getitemscount)\n  - [Query Scope](#query-scope)\n  - [REMOVE — Deleting Attributes From An Item](#remove--deleting-attributes-from-an-item)\n  - [toSql()](#tosql)\n  - [Decorate Query](#decorate-query)\n- [Indexes](#indexes)\n- [Composite Keys](#composite-keys)\n- [Query Builder](#query-builder-1)\n- [FAQ](#faq)\n  - [Security](#security)\n  - [Credits](#credits)\n  - [License](#license)\n\n# Install\n\nInstall the package using Composer:\n\n```bash\n$ composer require rennokki/dynamodb\n```\n\nIf your Laravel package does not support auto-discovery, add this to your `config/app.php` file:\n\n```php\n'providers' =\u003e [\n    ...\n    Rennokki\\DynamoDb\\DynamoDbServiceProvider::class,\n    ...****\n];\n```\n\nPublish the config files.\n\n```php\nphp artisan vendor:publish\n```\n\n# Install (for Lumen)\n\nFor Lumen, try [this](https://github.com/laravelista/lumen-vendor-publish) to install the `vendor:publish` command and load configuration file and enable Eloquent support in `bootstrap/app.php`:\n\n```php\n$app = new Laravel\\Lumen\\Application(\n    realpath(__DIR__.'/../')\n);\n\n// Load dynamodb config file\n$app-\u003econfigure('dynamodb');\n\n// Enable Eloquent support\n$app-\u003ewithEloquent();\n```\n\n# Usage\n\n## Extend your Model\nExtend your model with `Rennokki\\DynamoDb\\DynamoDbModel`, then you can use Eloquent methods that are supported.\nThe idea here is that you can switch back to Eloquent without changing your queries.\n\n```php\nuse Rennokki\\DynamoDb\\DynamoDbModel;\n\nclass MyModel extends DynamoDbModel\n{\n    //\n}\n```\n\n## Add Trait to Model (to Sync)\n\nTo sync your DB table with a DynamoDb table, use trait `Rennokki\\DynamoDb\\ModelTrait`.\nThis trait will call a `PutItem` after the model is saved, update or deleted.\n\n```php\nuse Rennokki\\DynamoDb\\ModelTrait as DynamoDbable;\n\nclass MyModel extends Model\n{\n    use DynamoDbable;\n}\n```\n\n# Query Builder\n\nYou can use the [query builder](#query-builder) facade to build more complex queries.\n\n# AWS SDK\n\nAWS SDK v3 for PHP uses guzzlehttp promises to allow for asynchronous workflows. Using this package you can run eloquent queries like [delete](#deleteasync), [update](#updateasync), [save](#saveasync) asynchronously on DynamoDb.\n\n# Supported features\n\n## find() and delete()\n\n```php\n$model-\u003efind($id, array $columns = []);\n$model-\u003efindMany($ids, array $columns = []);\n\n$model-\u003edelete();\n$model-\u003edeleteAsync()-\u003ewait();\n```\n\n## Conditions\n\n```php\n// Using getIterator()\n// If 'key' is the primary key or a global/local index and it is a supported Query condition,\n// will use 'Query', otherwise 'Scan'.\n$model-\u003ewhere('key', 'key value')-\u003eget();\n\n$model-\u003ewhere(['key' =\u003e 'key value']);\n\n// Chainable for 'AND'.\n$model-\u003ewhere('foo', 'bar')\n    -\u003ewhere('foo2', '!=' 'bar2')\n    -\u003eget();\n\n// Chainable for 'OR'.\n$model-\u003ewhere('foo', 'bar')\n    -\u003eorWhere('foo2', '!=' 'bar2')\n    -\u003eget();\n\n// Other types of conditions\n$model-\u003ewhere('count', '\u003e', 0)-\u003eget();\n$model-\u003ewhere('count', '\u003e=', 0)-\u003eget();\n$model-\u003ewhere('count', '\u003c', 0)-\u003eget();\n$model-\u003ewhere('count', '\u003c=', 0)-\u003eget();\n$model-\u003ewhereIn('count', [0, 100])-\u003eget();\n$model-\u003ewhereNotIn('count', [0, 100])-\u003eget();\n$model-\u003ewhere('count', 'between', [0, 100])-\u003eget();\n$model-\u003ewhere('description', 'begins_with', 'foo')-\u003eget();\n$model-\u003ewhere('description', 'contains', 'foo')-\u003eget();\n$model-\u003ewhere('description', 'not_contains', 'foo')-\u003eget();\n\n// Nested conditions\n$model\n    -\u003ewhere('name', 'foo')\n    -\u003ewhere(function ($query) {\n        return $query\n            -\u003ewhere('count', 10)\n            -\u003eorWhere('count', 20);\n    })-\u003eget();\n\n// Nested attributes\n$model-\u003ewhere('nestedMap.foo', 'bar')-\u003ewhere('list[0]', 'baz')-\u003eget();\n```\n\n### whereNull() and whereNotNull()\n\n**NULL and NOT_NULL only check for the attribute presence not its value being null**\nPlease see: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html\n\n```php\n$model-\u003ewhereNull('name');\n$model-\u003ewhereNotNull('name');\n```\n\n## all() and first()\n```php\n// Using scan operator, not too reliable since DynamoDb will only give 1MB total of data.\n$model-\u003eall();\n\n// Basically a scan but with limit of 1 item.\n$model-\u003efirst();\n```\n\n## Pagination\n\nUnfortunately, offset of how many records to skip does not make sense for DynamoDb.\nInstead, provide the last result of the previous query as the starting point for the next query.\n\n**Examples:**\n\nFor query such as the following:\n```php\n$query = $model-\u003ewhere('count', 10)-\u003elimit(2);\n$items = $query-\u003eall();\n$last = $items-\u003elast();\n```\n\nTake the last item of this query result as the next \"offset\":\n\n```php\n$nextPage = $query-\u003eafter($last)-\u003elimit(2)-\u003eall();\n\n// or\n$nextPage = $query-\u003eafterKey($items-\u003elastKey())-\u003elimit(2)-\u003eall();\n\n// or (for query without index condition only)\n$nextPage = $query-\u003eafterKey($last-\u003egetKeys())-\u003elimit(2)-\u003eall();\n```\n\n## update()\n\n```php\n$model-\u003eupdate($attributes);\n```\n\n## updateAsync()\n\n```php\n// update asynchronously and wait on the promise for completion.\n$model-\u003eupdateAsync($attributes)-\u003ewait();\n```\n\n## save()\n\n```php\n$model = new Model();\n// Define fillable attributes in your Model class.\n$model-\u003efillableAttr1 = 'foo';\n$model-\u003efillableAttr2 = 'foo';\n\n// DynamoDb doesn't support incremented Id, so you need to use UUID for the primary key.\n$model-\u003eid = 'de305d54-75b4-431b-adb2-eb6b9e546014';\n$model-\u003esave();\n```\n\n## saveAsync()\n\nSaving single model asynchronously and waiting on the promise for completion.\n\n```php\n$model = new Model;\n\n// Define fillable attributes in your Model class.\n$model-\u003efillableAttr1 = 'foo';\n$model-\u003efillableAttr2 = 'bar';\n\n// DynamoDb doesn't support incremented Id, so you need to use UUID for the primary key.\n$model-\u003eid = 'de305d54-75b4-431b-adb2-eb6b9e546014';\n$model-\u003esaveAsync()-\u003ewait();\n```\n\nSaving multiple models asynchronously and waiting on all of them simultaneously.\n\n```php\nfor ($i = 0; $i \u003c 10; $i++) {\n    $model = new Model;\n\n    // Define fillable attributes in your Model class.\n    $model-\u003efillableAttr1 = 'foo';\n    $model-\u003efillableAttr2 = 'bar';\n\n    // DynamoDb doesn't support incremented Id, so you need to use UUID for the primary key.\n    $model-\u003eid = uniqid();\n\n    // Returns a promise which you can wait on later.\n    $promises[] = $model-\u003esaveAsync();\n}\n\n\\GuzzleHttp\\Promise\\all($promises)-\u003ewait();\n```\n\n## delete()\n\n```php\n$model-\u003edelete();\n```\n\n## deleteAsync()\n\n```php\n$model-\u003edeleteAsync()-\u003ewait();\n```\n\n## chunk()\n\n```php\n$model-\u003echunk(10, function ($records) {\n    foreach ($records as $record) {\n        //\n    }\n});\n```\n\n## limit() and take()\n\n```php\n// Use this with caution unless your limit is small.\n// DynamoDB has a limit of 1MB so if your limit is very big, the results will not be expected.\n$model-\u003ewhere('name', 'foo')-\u003etake(3)-\u003eget();\n```\n\n## firstOrFail()\n\n```php\n$model-\u003ewhere('name', 'foo')-\u003efirstOrFail();\n\n// for composite key\n$model-\u003ewhere('id', 'foo')-\u003ewhere('id2', 'bar')-\u003efirstOrFail();\n```\n\n## findOrFail()\n\n```php\n$model-\u003efindOrFail('foo');\n\n// for composite key\n$model-\u003efindOrFail(['id' =\u003e 'foo', 'id2' =\u003e 'bar']);\n```\n\n## refresh()\n\n```php\n$model = Model::first();\n$model-\u003erefresh();\n```\n\n## getItemsCount()\n\n```php\n// returns the approximate total count of the table items\n$total = Model::getItemsCount(); // ex: 5\n```\n\n## Query Scope\n\n```php\nclass Foo extends DynamoDbModel\n{\n    protected static function boot()\n    {\n        parent::boot();\n\n        static::addGlobalScope('count', function (DynamoDbQueryBuilder $builder) {\n            $builder-\u003ewhere('count', '\u003e', 6);\n        });\n    }\n\n    public function scopeCountUnderFour($builder)\n    {\n        return $builder-\u003ewhere('count', '\u003c', 4);\n    }\n\n    public function scopeCountUnder($builder, $count)\n    {\n        return $builder-\u003ewhere('count', '\u003c', $count);\n    }\n}\n\n$foo = new Foo();\n\n// Global scope will be applied\n$foo-\u003eall();\n\n// Local scope\n$foo-\u003ewithoutGlobalScopes()-\u003ecountUnderFour()-\u003eget();\n\n// Dynamic local scope\n$foo-\u003ewithoutGlobalScopes()-\u003ecountUnder(6)-\u003eget();\n```\n\n## REMOVE — Deleting Attributes From An Item\n\nPlease see: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.REMOVE\n\n```php\n$model = new Model();\n$model-\u003ewhere('id', 'foo')-\u003eremoveAttribute('name', 'description', 'nested.foo', 'nestedArray[0]');\n\n// Equivalent of:\nModel::find('foo')-\u003eremoveAttribute('name', 'description', 'nested.foo', 'nestedArray[0]');\n```\n\n## toSql()\n\nFor debugging purposes, you can choose to convert to the actual DynamoDb query\n```php\n$raw = $model-\u003ewhere('count', '\u003e', 10)-\u003etoDynamoDbQuery();\n\n// $op is either \"Scan\" or \"Query\"\n$op = $raw-\u003eop;\n\n// The query body being sent to AWS\n$query = $raw-\u003equery;\n```\n\nThe `$raw` variable is an instance of [RawDynamoDbQuery](./src/RawDynamoDbQuery.php)\n\n## Decorate Query\n\nUse `decorate` when you want to enhance the query.\n\nTo set the order of the sort key:\n\n```php\n$items = $model\n    -\u003ewhere('hash', 'hash-value')\n    -\u003ewhere('range', '\u003e', 10)\n    -\u003edecorate(function (RawDynamoDbQuery $raw) {\n        // desc order\n        $raw-\u003equery['ScanIndexForward'] = false;\n    })-\u003eget();\n```\n\nTo force to use \"Query\" instead of \"Scan\" if the library fails to detect the correct operation:\n\n```php\n$items = $model\n    -\u003ewhere('hash', 'hash-value')\n    -\u003edecorate(function (RawDynamoDbQuery $raw) {\n        $raw-\u003eop = 'Query';\n    })-\u003eget();\n```\n\n# Indexes\n\nIf your table has indexes, make sure to declare them in your model class like so\n\n```php\n/**\n * The DynamoDb indexes.\n * [\n *     '\u003csimple_index_name\u003e' =\u003e [\n *          'hash' =\u003e '\u003cindex_key\u003e'\n *     ],\n *     '\u003ccomposite_index_name\u003e' =\u003e [\n *          'hash' =\u003e '\u003cindex_hash_key\u003e',\n *          'range' =\u003e '\u003cindex_range_key\u003e'\n *     ],\n * ]\n *\n * @var array\n */\nprotected $dynamoDbIndexKeys = [\n    'count_index' =\u003e [\n        'hash' =\u003e 'count'\n    ],\n];\n```\n\nNote that order of index matters when a key exists in multiple indexes.\n\nFor example, for the following query, `count_index` will be used:\n\n```php\n$model-\u003ewhere('user_id', 123)-\u003ewhere('count', '\u003e', 10)-\u003eget();\n```\n\n```php\nprotected $dynamoDbIndexKeys = [\n    'count_index' =\u003e [\n        'hash' =\u003e 'user_id',\n        'range' =\u003e 'count'\n    ],\n    'user_index' =\u003e [\n        'hash' =\u003e 'user_id',\n    ],\n];\n```\n\n\nMost of the time, you should not have to do anything but if you need to use a specific index, you can specify it like so\n\n```php\n$model\n    -\u003ewhere('user_id', 123)\n    -\u003ewhere('count', '\u003e', 10)\n    -\u003ewithIndex('count_index')\n    -\u003eget();\n```\n\n# Composite Keys\n\nTo use composite keys with your model:\n\nSet `$compositeKey` to an array of the attributes names comprising the key, e.g.\n\n```php\nprotected $primaryKey = 'customer_id';\nprotected $compositeKey = ['customer_id', 'agent_id'];\n```\n\nTo find a record with a composite key:\n\n```php\n$model-\u003efind(['customer_id' =\u003e 'value1', 'agent_id' =\u003e 'value2']);\n```\n\n# Query Builder\n\nUse `DynamoDb` facade to build raw queries.\n\n```php\nuse Rennokki\\DynamoDb\\Facades\\DynamoDb;\n\nDynamoDb::table('articles')\n    // call set\u003ckey_name\u003e to build the query body to be sent to AWS\n    -\u003esetFilterExpression('#name = :name')\n    -\u003esetExpressionAttributeNames(['#name' =\u003e 'author_name'])\n    -\u003esetExpressionAttributeValues([':name' =\u003e DynamoDb::marshalValue('Bao')])\n    -\u003eprepare()\n    // the query body will be sent upon calling this.\n    -\u003escan(); // supports any DynamoDbClient methods (e.g. batchWriteItem, batchGetItem, etc.)\n\nDynamoDb::table('articles')\n    -\u003esetIndex('author_name')\n    -\u003esetKeyConditionExpression('#name = :name')\n    -\u003esetProjectionExpression('id, author_name')\n    // Can set the attribute mapping one by one instead\n    -\u003esetExpressionAttributeName('#name', 'author_name')\n    -\u003esetExpressionAttributeValue(':name', DynamoDb::marshalValue('Bao'))\n    -\u003eprepare()\n    -\u003equery();\n\nDynamoDb::table('articles')\n    -\u003esetKey(DynamoDb::marshalItem(['id' =\u003e 'ae025ed8']))\n    -\u003esetUpdateExpression('REMOVE #c, #t')\n    -\u003esetExpressionAttributeName('#c', 'comments')\n    -\u003esetExpressionAttributeName('#t', 'tags')\n    -\u003eprepare()\n    -\u003eupdateItem();\n\nDynamoDb::table('articles')\n    -\u003esetKey(DynamoDb::marshalItem(['id' =\u003e 'ae025ed8']))\n    -\u003eprepare()\n    -\u003edeleteItem();\n\nDynamoDb::table('articles')\n    -\u003esetItem(\n        DynamoDb::marshalItem(['id' =\u003e 'ae025ed8', 'author_name' =\u003e 'New Name'])\n    )\n    -\u003eprepare()\n    -\u003eputItem();\n\n// Or, instead of ::table()\nDynamoDb::newQuery()\n    -\u003esetTableName('articles')\n\n// Or access the DynamoDbClient instance directly\nDynamoDb::client();\n\n// pass in the connection name to get a different client instance other than the default.\nDynamoDb::client('test');\n```\n\nThe query builder methods are in the form of `set\u003ckey_name\u003e`, where `\u003ckey_name\u003e` is the key name of the query body to be sent.\n\nFor example, to build an [`UpdateTable`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-dynamodb-2012-08-10.html#updatetable) query:\n\n```php\n[\n    'AttributeDefinitions' =\u003e ...,\n    'GlobalSecondaryIndexUpdates' =\u003e ...,\n    'TableName' =\u003e ...\n]\n```\n\nDo:\n```php\n$query = DynamoDb::table('articles')\n    -\u003esetAttributeDefinitions(...)\n    -\u003esetGlobalSecondaryIndexUpdates(...);\n```\n\nAnd when ready:\n```php\n$query-\u003eprepare()-\u003eupdateTable();\n```\n\n# FAQ\n\nQ: Cannot assign `id` property if its not in the fillable array\nA: Try [this](https://github.com/baopham/laravel-dynamodb/issues/10)?\n\nQ: How to create migration?\nA: Please see [this issue](https://github.com/baopham/laravel-dynamodb/issues/90)\n\nQ: How to use with factory?\nA: Please see [this issue](https://github.com/baopham/laravel-dynamodb/issues/111)\n\nQ: How do I use with Job? Getting a SerializesModels error\nA: You can either [write your own restoreModel](https://github.com/baopham/laravel-dynamodb/issues/132) or remove the `SerializesModels` trait from your Job.\n\n## Security\n\nIf you discover any security related issues, please email alex@renoki.org instead of using the issue tracker.\n\n## Credits\n\n- [Bao Pham](https://github.com/baopham/laravel-dynamodb)\n- [warrick-loyaltycorp](https://github.com/warrick-loyaltycorp)\n- [Alexander Ward](https://github.com/cthos)\n- [Quang Ngo](https://github.com/vanquang9387)\n- [David Higgins](https://github.com/zoul0813)\n- [Damon Williams](https://github.com/footballencarta)\n- [Alex Renoki](https://github.com/rennokki)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenoki-co%2Fdynamodb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenoki-co%2Fdynamodb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenoki-co%2Fdynamodb/lists"}