{"id":48789092,"url":"https://github.com/aminerol/react-native-storage-simply","last_synced_at":"2026-04-13T18:45:06.375Z","repository":{"id":57340416,"uuid":"220872317","full_name":"aminerol/react-native-storage-simply","owner":"aminerol","description":"Utilizing React native AsyncStorage Api in easier way when it comes for storing objects as well as arrays for android and ios,","archived":false,"fork":false,"pushed_at":"2021-05-03T01:18:19.000Z","size":21,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-24T04:19:33.616Z","etag":null,"topics":["arrays","asyncstorage","asyncstorage-wrapper","react-native"],"latest_commit_sha":null,"homepage":null,"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/aminerol.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}},"created_at":"2019-11-11T00:45:35.000Z","updated_at":"2021-05-03T01:17:49.000Z","dependencies_parsed_at":"2022-08-29T16:22:26.750Z","dependency_job_id":null,"html_url":"https://github.com/aminerol/react-native-storage-simply","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/aminerol/react-native-storage-simply","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminerol%2Freact-native-storage-simply","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminerol%2Freact-native-storage-simply/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminerol%2Freact-native-storage-simply/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminerol%2Freact-native-storage-simply/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aminerol","download_url":"https://codeload.github.com/aminerol/react-native-storage-simply/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminerol%2Freact-native-storage-simply/sbom","scorecard":{"id":189476,"data":{"date":"2025-08-11","repo":{"name":"github.com/aminerol/react-native-storage-simply","commit":"e7337e010060c5c2755aa0bbbb8756591c7ec6e7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/12 approved changesets -- score normalized to 0","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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/npm-publish.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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":6,"reason":"dependency not pinned by hash detected -- score normalized to 6","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/aminerol/react-native-storage-simply/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/aminerol/react-native-storage-simply/npm-publish.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction 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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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 'master'"],"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"}}]},"last_synced_at":"2025-08-16T20:21:44.365Z","repository_id":57340416,"created_at":"2025-08-16T20:21:44.365Z","updated_at":"2025-08-16T20:21:44.365Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31766482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T15:25:13.801Z","status":"ssl_error","status_checked_at":"2026-04-13T15:25:09.162Z","response_time":93,"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":["arrays","asyncstorage","asyncstorage-wrapper","react-native"],"created_at":"2026-04-13T18:45:05.790Z","updated_at":"2026-04-13T18:45:06.370Z","avatar_url":"https://github.com/aminerol.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# React Native AsyncStorage Simply\n\nUtilizing React native AsyncStorage Api in easier way when it comes for storing objects as well as arrays for android and ios,\n\n# Why?\nnot much of packages out there for AsyncStorage that compatible with Expo since am mostly using expo also for the case of arrays\n some functions are taken from other packages, and added some features to fit my needs\n\n# Installing\n\n```\nnpm install react-native-storage-simply --save\n```\n\n# API Reference\n\n## Get\n\n```js\nget(key)\n```\n`get` Get a one or more value for a key or array of keys from AsyncStorage\n* The `key` A key or array of keys\n\n### Example\n\n#### Simple Get\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\nLocalStorage.get('todos').then(todos =\u003e {\n    console.log(todos)\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n```\n\n#### Multi Get\n\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\nLocalStorage.get(['todos', 'users']).then(results =\u003e {\n    const todos = results[0]\n    const users = results[1]\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n```\n\n## Save\n\n```js\nsave(key, value)\n```\n`save` Save a key value pair or a series of key value pairs to AsyncStorage.\n* The `key` The key or an array of key/value pairs\n* The `value` The value to save\n\n\u003e Saving with same key will overwrite the old value\n\n### Example\n\n#### Simple Save\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// save plain string\nLocalStorage.save('todos', 'prove p = np').then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n//save object\nLocalStorage.save('todos', {id: 1, title: 'prove p = np'}).then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n//save array of objects\nLocalStorage.save('todos', [{id: 1, title: 'prove p = np'}]).then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n```\n\n#### Multi Save\n\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// save plain string\nLocalStorage.save([['todos', 'prove p = np'], ['users', 'nobody']]).then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n//save object\nLocalStorage.save([['todos', {id: 1, title: 'prove p = np'}], ['users', 'nobody']]).then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n//save array of objects\nLocalStorage.save(\n[['todos', [{id: 1, title: 'prove p = np'}]], ['users', 'nobody']]).then(() =\u003e {\n    console.log('saved')\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n## Update\n\n```js\nupdate(key, value)\n```\n`get` Updates the value in the store for a given key in AsyncStorage. If the value is a string it will be replaced. If the value is an object it will be deep merged.\n* The `key`  The key for the object that will be updated\n* The `value`  The value to update with\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// update plain string\nLocalStorage.update('todos', 'NC = P').then(() =\u003e {\n    console.log('updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// update object if the property found with the new value\nLocalStorage.update('todos', {id: 1, title: 'NC = P'}).then(() =\u003e {\n    console.log('updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// merge if the property not found in the object\nLocalStorage.update('todos', {completed: false}).then(() =\u003e {\n    console.log('updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n```\n\n## Delete\n\n```js\ndelete(key)\n```\n`delete` Delete the value for a given key in AsyncStorage.\n* The `key`  key or an array of keys to be deleted\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// delete a single object from the storage\nLocalStorage.delete('todos').then(() =\u003e {\n    console.log('deleted')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// delete multiple objects from the storage\nLocalStorage.delete(['todos', 'users']).then(() =\u003e {\n    console.log('deleted')\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n## Keys\n\n```js\nkeys()\n```\n`keys` Get all keys in AsyncStorage\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// delete a single object from the storage\nLocalStorage.keys().then((keys) =\u003e {\n    console.log(keys)\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n## Push\n\n```js\npush(key, value, isExist = false, predicate)\n```\n`push` Push a value onto an array stored in AsyncStorage by key or create a new array in AsyncStorage for a key if it's not yet defined.\n* The `key`  key that the array will be defined with\n* The `value`  The value to push onto the array\n* The `isExist`  Optional argument by default its false, check existence before pushing onto array, if its false it wont check for existence\n* The `predicate`  Optional argument, The function invoked per element for checking the existence in case of nested objects\n* returns `Boolean` wether the item pushed to the array or not\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// push item into array without checking\nLocalStorage.push('todos', {id: 1, title: 'N = NP'}).then(() =\u003e {\n    console.log('added item to array')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// push item into array with checking but without specifying the function for checking\nLocalStorage.push('todos', 'N = NP', true).then(pushed =\u003e {\n    console.log(pushed ? 'added item to array' : 'item already exist')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// push item into array with checking by passing a function to do the check\nLocalStorage.push('todos', {id: 1, title: 'N = NP'}, true, item =\u003e item.id  === 1).then(pushed =\u003e {\n    console.log(pushed ? 'added item to array' : 'item already exist')\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n## Set\n\n```js\nset(key, value, path, newValue)\n```\n`set` update an item from an array stored in AsyncStorage, If the new value is an object it will be deep merged.\n* The `key`  key will be updated\n* The `value`  The value to look for to update from the array of string, if array of objects is the value to match with\n* The `path`  The path of the property to get\n* The `newValue`  The new Value to be updated with\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// update item if new value does not exist it will be merged otherwise will be updated with new value\nLocalStorage.set('todos', 1, 'id', {completed: true}).then(() =\u003e {\n    console.log('item updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// update item for nested objects\nLocalStorage.set('todos', 1, 'user.id', {name: 'nemo'}).then(() =\u003e {\n    console.log('item updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// update item for nested objects using array\nLocalStorage.set('todos', 1, ['user', 'id'], {name: 'nemo'}).then(() =\u003e {\n    console.log('item updated')\n}).catch(error =\u003e {\n    console.error(error);\n});\n```\n\n## Pop\n\n```js\npop(key, value, path)\n```\n`pop` delete an item from an array stored in AsyncStorage by its value\n* The `key`  key will be removed\n* The `value`  The value to delete from the array of string, if array of objects is the value to match with\n* The `path`  The path of the property to get.\n\n### Example\n```js\n\nimport LocalStorage from 'react-native-storage-simply';\n\n// delete item from array using id\nLocalStorage.pop('todos', 1, 'id').then(() =\u003e {\n    console.log('item deleted')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// delete item from array for nested objects\nLocalStorage.set('todos', 1, 'user.id').then(() =\u003e {\n    console.log('item deleted')\n}).catch(error =\u003e {\n    console.error(error);\n});\n\n// delete item from array for nested objects using array\nLocalStorage.set('todos', 1, ['user', 'id']).then(() =\u003e {\n    console.log('item deleted')\n}).catch(error =\u003e {\n    console.error(error);\n});\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminerol%2Freact-native-storage-simply","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faminerol%2Freact-native-storage-simply","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminerol%2Freact-native-storage-simply/lists"}