{"id":14068957,"url":"https://github.com/datacamp/shinybones","last_synced_at":"2025-04-13T01:27:25.888Z","repository":{"id":42591362,"uuid":"168050962","full_name":"datacamp/shinybones","owner":"datacamp","description":"A highly opinionated framework for building shiny dashboards.","archived":false,"fork":false,"pushed_at":"2020-04-30T21:22:18.000Z","size":285,"stargazers_count":136,"open_issues_count":6,"forks_count":14,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-03-26T19:12:11.092Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/datacamp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-28T22:50:21.000Z","updated_at":"2025-03-04T14:15:40.000Z","dependencies_parsed_at":"2022-09-21T21:23:25.663Z","dependency_job_id":null,"html_url":"https://github.com/datacamp/shinybones","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacamp%2Fshinybones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacamp%2Fshinybones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacamp%2Fshinybones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacamp%2Fshinybones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datacamp","download_url":"https://codeload.github.com/datacamp/shinybones/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248652818,"owners_count":21140085,"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","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":"2024-08-13T07:06:30.501Z","updated_at":"2025-04-13T01:27:25.809Z","avatar_url":"https://github.com/datacamp.png","language":"R","funding_links":[],"categories":["R"],"sub_categories":[],"readme":"# ShinyBones \u003cimg src=\"man/figures/logo.png\" width=\"120px\" align=\"right\" /\u003e\n\n\u003c!-- badges: start --\u003e\n  [![Travis build status](https://travis-ci.org/ramnathv/shinybones.svg?branch=master)](https://travis-ci.org/ramnathv/shinybones)\n   [![lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)\n\u003c!-- badges: end --\u003e\n\n\n\n__shinybones__ is an R package that provides a highly opinionated way to organize large, multi-page shiny dashboards. It allows users to focus on building independent modules for each page following a minimal set of conventions, and relegating all the boilerplate code involding in laying them out in the dashboard to a simple YAML configuration file.\n\n\u003cimg src=\"man/figures/shinybones-illustration.svg\" class = \"center\" /\u003e\n\n## Installation\n\nYou can install `shinybones` from github:\n\n```r\nremotes::install_github('ramnathv/shinybones')\n```\n\n`shinybones` ships with two useful snippets `stpage` and `stcomponent` that lets you create `page` and `component` modules that follow the conventions. You can install it by running `st_add_snippets`. Note that you will need to restart RStudio for the snippets to be usable.\n\n```r\nshinybones::sb_add_snippets()\n```\n\n## Usage\n\nYou can easily scaffold a shinydashboard app using `shinybones` by clicking on the `New Project` menu in `RStudio`\n\n\u003cimg src=https://imgur.com/eE7rbBB.png class=center /\u003e\n\n## Conventions\n\n1. A module referred to as `foo` needs to specify the following functions:\n\n   - ui: `foo_ui`\n   - server: `foo`\n   - sidebar: `foo_ui_sidebar` (optional)\n   \n\u003cbr/\u003e\n\n2. The layout for the dashboard is specified in YAML.\n\n   - Each `menu` item becomes a menu item in the sidebar.\n   - If a `menu` item has more than 1 child, the children become subitems.\n   - If the child of a `menu` item has a `tabs` item, they are rendered as a\n     `tabSetPanel`\n   - Each item (page) is connected to a module by its name.\n   \n\n```yaml\nname: Main Dashboard\nsidebar:\n  - text: Finance\n    icon: briefcase\n    menu:\n      - text: Registrations\n        module: registrations\n      - text: Subscriptions\n        tabs:\n          - text: Individual\n            module: subscribers_individual\n          - text: Group\n            module: subscribers_group\n\n  - text: People\n    icon: user\n    menu:\n      - text: People\n        tabs:\n          - text: Team Size\n            module: team_size\n          - text: Organogram\n            module: organogram\n```\n\n## Development Process\n\n1. Each page is independently developed as a standalone module.\n2. Use the function `preview_module` to preview the module.\n3. Add it to the dashboard by editing `_site.yml`.\n\n\n## ToDos\n\n- [x] Hook up passing of data to each module\n- [x] Wrap all utilities into a package\n- [ ] Automatically check if tabnames are unique\n- [x] Allow factory modules that can accept static parameters\n- [ ] Fix bugs where when menu item has only one child, tabNames have to be same.\n- [ ] Allow deep linking at the tab level (by default)\n\n## Acknowledgements\n\nThis package was initially named `satin`, but had to be renamed since it was already in use by a now-archived package on CRAN. Thanks to @dgrtwo for suggesting the name `shinybones`, which is very appropriate since this package allows you to create a skeleton of a dashboard app!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatacamp%2Fshinybones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatacamp%2Fshinybones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatacamp%2Fshinybones/lists"}