{"id":15246105,"url":"https://github.com/oobianom/shinyStorePlus","last_synced_at":"2025-10-05T08:30:59.129Z","repository":{"id":53822302,"uuid":"519731473","full_name":"oobianom/shinyStorePlus","owner":"oobianom","description":"An R package with in-browser storage for Shiny persistent, synchronized data from the inputs using IndexedDB. Transfer browser link parameters to Shiny input or output values.","archived":false,"fork":false,"pushed_at":"2025-05-10T15:09:03.000Z","size":242,"stargazers_count":29,"open_issues_count":5,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-10T16:23:19.405Z","etag":null,"topics":["cran","data","data-structures","r","r-package","shiny"],"latest_commit_sha":null,"homepage":"https://shinystoreplus.obi.obianom.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oobianom.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"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,"zenodo":null}},"created_at":"2022-07-31T09:27:20.000Z","updated_at":"2025-05-10T15:09:07.000Z","dependencies_parsed_at":"2024-11-28T01:21:07.671Z","dependency_job_id":"df5c3c69-e173-4404-82ff-b62d8f1c6d07","html_url":"https://github.com/oobianom/shinyStorePlus","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/oobianom/shinyStorePlus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oobianom%2FshinyStorePlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oobianom%2FshinyStorePlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oobianom%2FshinyStorePlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oobianom%2FshinyStorePlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oobianom","download_url":"https://codeload.github.com/oobianom/shinyStorePlus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oobianom%2FshinyStorePlus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278427580,"owners_count":25985081,"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","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cran","data","data-structures","r","r-package","shiny"],"created_at":"2024-09-29T14:01:09.213Z","updated_at":"2025-10-05T08:30:59.120Z","avatar_url":"https://github.com/oobianom.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Backend"],"sub_categories":["Web APIs Integration"],"readme":"# shinyStorePlus R package \u003cimg src=\"https://shinystoreplus.obi.obianom.com/hex-shinyStorePlus.png\" align=\"right\" width=\"200\"\u003e\n\n### FOUR MAIN FEATURES: \n\n - [x] In-browser storage for Shiny persistent, synchronized data from the inputs using IndexedDB. \n - [x] Transfer browser link parameters to Shiny input or output values.\n - [x] Execute shiny::observe once across multiple browser sessions e.g show welcome message only once to a user\n - [x] __Store shiny app visitor views, likes and followers using api.rpkg.net !NEW__\n\nNote: As of version 1.4, shinyStorePlus now allows storage of visitor views, likes and followers\n\nNote: As of version 1.5, shinyStorePlus now use of \"*\" in the __dyn.inputs__ of setupStorage(). [check](inst/example/dynamicInput/app2.R)\n\n---------------------------------------------------------------------------------------\n\n### Official docs link: [https://shinystoreplus.obi.obianom.com](https://shinystoreplus.obi.obianom.com)\n\n### Demo 1: https://r2apps.shinyapps.io/shinystoreplus/\n### Demo 2: https://r2apps.shinyapps.io/browserLinkToInput/?data=pressure\u0026name=obinna\u0026num=50\u0026outt=wowowow\n### Demo 3: https://rpkg.shinyapps.io/shiny-app-views-likes-followers/\n\n### Transformation of various shiny apps with the shinyStorePlus package: https://github.com/oobianom/aagarw30_shinyapps_to-shinyStorePlus\n\n### Start with more simple example code #2: https://github.com/oobianom/shinyStorePlus/tree/main/inst/example/storeInputs\n\n### Start with more simple example code #3: https://github.com/oobianom/shinyStorePlus/tree/main/inst/example/browserLinkToInput\n\n### Teaser video: https://www.youtube.com/watch?v=gkZfCF4Kr7I\n\n### Other packages required for shinyStorePlus: https://depends.rpkg.net/package/shinyStorePlus \n\n### Author R scholar profile: https://scholar.rpkg.net/aut/obinna+obianom \n\n[![](https://rpkg.net/pub-age/shinyStorePlus)](https://rpkg.net/package/shinyStorePlus)\n[![CRAN\\_Status\\_Badge](https://www.r-pkg.org/badges/version/shinyStorePlus)](https://cran.r-project.org/package=shinyStorePlus) [![](https://cranlogs.r-pkg.org/badges/grand-total/shinyStorePlus)](https://cran.r-project.org/package=shinyStorePlus) \n\n\n\n\n-------------------------------------------------------------------------------------------------\n\nThere has been tremendous contribution from the R community on the topic of storing Shiny data and re-using them within an application. The current solutions include Dropbox, Amazon s3, Googlesheets, SQLite, MongoDB and so on. However, a problem with these methods is that it takes a number of steps in order to correctly program your Shiny application for them. More so, the owner of the accounts may need to consistently monitor the storage accounts to ensure that it is not expire or that the data storage is not exhausted. \n\n__So let's face it. When you develop a shiny app that allows a user to change inputs and see the results immediately, guess what the user is itching to have?? The ability to change the inputs and when they refresh or reopen the shiny app at a later time, still see the inputs they previously entered. Well, \u003ccode\u003eshinyStorePlus R package\u003c/code\u003e gives that!__\n\n----------------------------------------------------------------------------------------------\n\nAs of __version 0.8__ , you are also able to transfer the parameters in a browser link to Shiny inputs and outputs. e.g extracting the value of name from __http://127.0.0.1:6692/?data=pressure\u0026name=obinna\u0026num=50\u0026outt=wowowow__. See [link](https://shinystoreplus.obi.obianom.com/articles/shinystoreplus_v08.html)\n\n-------------------------------------------------------------------------------------------------\n\n![](https://shinystoreplus.obi.obianom.com/shinystoreplus-2.png)\n\n## Installation and Usage\n\n### Install\n\n```{r shinyStorePlus}\n\n# From CRAN\ninstall.packages(shinyStorePlus)\n\n# OR from Github\nlibrary(devtools)\ninstall_github(\"oobianom/shinyStorePlus\")\n\n```\n\n### Usage\n\n`library(shinyStorePlus)`\n\n### Use example\n\n`seeexample()`\n\n## Sample code\n\n```\nquickcode::clean(clearPkgs = TRUE) #clear all environment and previous loaded packages\nlibrary(shiny)\nlibrary(shinyStorePlus)\nui \u003c- fluidPage(\n  titlePanel(\"Simplified shiny app in-browser storage of inputs, long term storage of app views, likes and followers\"),\n  initStore(\"all\",rpkg.api.key = \"c20c5eead7714c119dd3f20bd249a388e72db2aa0f9305d0380b683a37c5296a\"), # need to get api at https://api.rpkg.net\n  tags$h2(\"Save App Views\"),hr(),\n  viewsBox(\"viewsshow\",\"loading views...\"),\n  tags$h2(\"Save App Likes, and allow user to Like!\"),hr(),\n  lfButton(\"liket\",suffix=\"likes\"),\n  tags$h2(\"Save App Followers, and allow user to Follow!\"),hr(),\n  lfButton(\"followt\",suffix=\"followers\"),\n  tags$h2(\"Also incorporate in-browser storage for input fields!\"),hr(),\n  selectInput(\"sel_not0\", \"Color (store):\", choices = c(\"\",\"brown\", \"green\", \"blue\", \"red\", \"yellow\", \"cyan\"), selected = \"\"),\n  selectInput(\"sel_color\", \"Color (should be stored):\", choices = c(\"\", \"green\", \"blue\", \"red\", \"yellow\", \"cyan\"), selected = \"\"),\n  tags$h2(id=\"dyn1\",\"Dynamic Input Selected By Full ID name\"),\n  hr(),tags$p(tags$i(\"Like or Follow and Refresh the page - the values are saved and the views are incremented.\"))\n)\n\nserver \u003c- function(input, output, session) {\n  insertUI( selector = \"#dyn1\", where = \"afterEnd\", ui = textInput(\"dynamicinput1\", \"Dynamic input\",\"test\" ) )\n  \n  # set up views, likes and follows, leave as NULL if you don't need tracking for either\n  # in this case, we leave followID as NULL since we don't need to use that\n  setupRPKG(viewsID = \"viewsshow\", likesID = \"liket\", followID = \"followt\")\n  \n  # setup for in browser tracking for all inputs\n  # setupStorage(appId = \"shinestz12\", inputs = TRUE, session = session)\n  \n  # setup for in browser tracking for specific inputs\n  # setupStorage(appId = \"shinesty12\", inputs = c(\"sel_not0\",\"sel_color\"), session = session)\n  \n  # setup for in browser tracking for dynamic inputs\n  setupStorage(appId = \"shinestx12\", dyn.inputs = list(\"dynamicinput1\"), session = session)\n}\n\n\nshinyApp(ui = ui, server = server)\n\n\n```\n\n\n### Demo screenshot\n\n![](https://shinystoreplus.obi.obianom.com/shinystoreplus_demo.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foobianom%2FshinyStorePlus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foobianom%2FshinyStorePlus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foobianom%2FshinyStorePlus/lists"}