{"id":28429703,"url":"https://github.com/appsilon/shiny.collections","last_synced_at":"2025-08-01T18:09:50.338Z","repository":{"id":48415347,"uuid":"85219961","full_name":"Appsilon/shiny.collections","owner":"Appsilon","description":"This project is deprecated and no longer supported. (Google Docs-like live collaboration in Shiny)","archived":false,"fork":false,"pushed_at":"2023-12-15T17:39:53.000Z","size":335,"stargazers_count":76,"open_issues_count":5,"forks_count":14,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-07-04T18:44:02.834Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://appsilon.github.io/shiny.collections/","language":"R","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/Appsilon.png","metadata":{"files":{"readme":"README.Rmd","changelog":"CHANGELOG.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}},"created_at":"2017-03-16T16:48:14.000Z","updated_at":"2023-07-26T18:27:36.000Z","dependencies_parsed_at":"2023-12-15T18:50:08.768Z","dependency_job_id":null,"html_url":"https://github.com/Appsilon/shiny.collections","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Appsilon/shiny.collections","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Appsilon%2Fshiny.collections","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Appsilon%2Fshiny.collections/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Appsilon%2Fshiny.collections/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Appsilon%2Fshiny.collections/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Appsilon","download_url":"https://codeload.github.com/Appsilon/shiny.collections/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Appsilon%2Fshiny.collections/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268272947,"owners_count":24223789,"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-08-01T02:00:08.611Z","response_time":67,"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":[],"created_at":"2025-06-05T13:38:54.548Z","updated_at":"2025-08-01T18:09:50.310Z","avatar_url":"https://github.com/Appsilon.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\noutput: html_document\nparams:\n   website_url: http://appsilon.com\n   logo_url: https://cdn.rawgit.com/Appsilon/website-cdn/gh-pages/logo-white.png\n   repo_name: shiny.collections\n   repo_url: https://github.com/Appsilon/shiny.collections\n   demo_url: http://appsilon.com/demo\n   chagelog_url: https://github.com/Appsilon/shiny.collections/blob/master/CHANGELOG.md\n   escape_script: false\n---\n\n\u003clink href=\"http://fonts.googleapis.com/css?family=Maven+Pro:400,700|Inconsolata\" rel=\"stylesheet\" type=\"text/css\"\u003e\n\u003clink href='docs/style.css' rel='stylesheet' type='text/css'\u003e\n\n`r params$repo_name`\n===========\n\n\u003cdiv class=\"subheader\"\u003eGoogle Docs-like live collaboration in Shiny\u003c/div\u003e\n\n\u003cdiv class=\"section level2\"\u003e\n**shiny.collections** adds persistent reactive collections that can be effortlessly integrated with components like Shiny inputs, DT::dataTable or rhandsontable. The package makes it easy to build collaborative Shiny applications with persistent data.\n\n\n\u003c!-- #Basic tutorial article is available on [Appsilon Data Science blog](your_future_art_link). --\u003e\n\n\u003c!-- Live demo link below \n\u003cp style=\"text-align: center; font-size: x-large;\"\u003e\n\u003ca href=\"`r params$demo_url`\"\u003eLive demo\u003c/a\u003e\n\u003c/p\u003e--\u003e\n\n\u003c/div\u003e\n\nSource code {.darkslide}\n-----------\n\nThis library source code can be found on [Appsilon Data Science's](`r params$website_url`) Github:\n\u003cbr\u003e\n[`r params$repo_url`](`r params$repo_url`)\n\n```{r, echo = F, results='asis'}\nif (params$type == \"web\") {\n  cat(paste0('\u003cscript\u003e\n    document.write(\\'\u003cdiv class=\"logo\"\u003e\u003ca href=\"', params$website_url, '\"\u003e\u003cimg alt=\"Appsilon Data Science\" src=\"', params$logo_url, '\"/\u003e\u003c/a\u003e\u003c/div\u003e\\')\n    \u003c/script\u003e\n  '))\n}\n```\n\n\nHow to install?\n---------------\n**Note! This library is still in its infancy. Api might change in the future.**\n\nAt the moment it's possible to install this library through [devtools](https://github.com/hadley/devtools).\n```\ndevtools::install_github(\"Appsilon/`r params$repo_name`\")\n```\n\nTo install [previous version](`r params$changelog_url`) you can run:\n```\ndevtools::install_github(\"Appsilon/`r params$repo_name`\", ref = \"0.1.0\")\n```\n\nExample {.darkorange}\n-------\n\nBefore running an example make sure that your RethinkDB is set-up and running. For installation and running guidelines you can visit [RethinkDB docs](https://www.rethinkdb.com/).\n\n```\nlibrary(shiny)\n\nui \u003c- shinyUI(fluidPage(\n  actionButton(\"click\", \"Add one\"),\n  DT::dataTableOutput(\"cars_data\")\n))\n\nconnection \u003c- shiny.collections::connect()\n\nserver \u003c- shinyServer(function(input, output) {\n  cars \u003c- shiny.collections::collection(\"cars\", connection)\n\n  observeEvent(input$click, {\n    shiny.collections::insert(cars, list(name = \"Sample name\", value = sample(1:100, 1)))\n  })\n  output$cars_data \u003c- DT::renderDataTable(DT::datatable(cars$collection))\n})\n\nshinyApp(ui = ui, server = server)\n```\n\nTalk\n----\n\nWe are proud that **shiny.collections** gained a lot of interests at **useR!2017** in\nBrussels. Here you can see a talk by [Marek Rogala](https://github.com/marekrogala)\npresenting two interesting use cases: https://goo.gl/mD1KfV .\n\nHow to contribute?\n-----------------\nIf you want to contribute to this project please submit a regular PR, once you're done with new feature or bug fix.\u003cbr\u003e\n\n**Changes in documentation**\n\nBoth repository **README.md** file and an official documentation page are generated with Rmarkdown, so if there is a need to update them, please modify accordingly a **README.Rmd** file  and run a **build_readme.R** script to compile it.\n\nTroubleshooting {.darkslide}\n-----------------\nWe used the latest versions of dependencies for this library, so please update your R environment before installation.\n\nHowever, if you encounter any problems, try the following:\n\n1. Up-to-date R language environment\n2. Installing specific dependent libraries versions\n    * shiny\n    ```\n    install.packages(\"shiny\", version='0.14.2.9001')\n    ```\n3. Make sure you open the connection _outside_ the `server` function.\n\nFuture enhacements\n------------------\n* CRAN release\n* More methods (allowing for batch insert, update, delete, etc)\n* Publications and subscriptions allowing to sync only part of the data in each Shiny session\n\n\nAppsilon Data Science {.footer}\n------------------\n\n```{r, echo = F, results='asis'}\nif (params$type == \"web\") {\n  cat(paste0('\u003cscript\u003e\n    document.write(\\'\u003cdiv class=\"logo\"\u003e\u003ca href=\"', params$website_url, '\"\u003e\u003cimg alt=\"Appsilon Data Science\" src=\"', params$logo_url, '\" /\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv class=\"subheader\"\u003e We Provide End-to-End Data Science Solutions \u003c/div\u003e  \\');\n    \u003c/script\u003e\n  '))\n}\n```\n\nGet in touch [dev@appsilon.com](dev@appsilon.com)\n\n```{r, echo = F, results='asis'}\nif (params$type == \"web\") {\n  cat(paste0('\u003cscript\u003e\n    document.write(\\'\u003ca href=\"', params$repo_url, '\"\u003e\u003cimg style=\"position: absolute; margin: 0; top: 0; right: 0; border: 0;\" src=\"https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67\" alt=\"Fork me on GitHub\" data-canonical-src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png\"\u003e\u003c/a\u003e\\');\n    \u003c/script\u003e\n  '))\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsilon%2Fshiny.collections","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappsilon%2Fshiny.collections","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsilon%2Fshiny.collections/lists"}