A Shiny Dashboard Template Modular System with Chat Bot Support
Overview
A template dashboard system with AI agent integrated. Comes with default themes that can be customized. Developers can upload modified templates on 'Github', and users can easily download templates with 'RStudio' project wizard. The key features of the default template include light and dark theme switcher, resizing graphs, synchronizing inputs across sessions, new notification system, fancy progress bars, and card-like flip panels with back sides, as well as various of 'HTML' tool widgets.
- The
MCPendpoint keeps a call log for each running app in the cache folder,MCP-logs/date-<start time>_app-<app id>/mcp-calls.log: one line (at most 300 characters) per request, reply, or failure, with the tool, theJSON-RPCid, the time taken, and the arguments, result, or reason. The stdio proxy adds the calls that never reach an app, marked(proxy). Turn the log off withoptions(shidashi.mcp_log = FALSE)or the environment variableSHIDASHI_MCP_LOG=false; the newestgetOption("shidashi.mcp_log_keep", 50)folders are kept - A running app writes
logs/server-info.login its folder (app id, process id, port, addresses, and call log folder). It and the app record are removed when the app stops, so an app stopped inside an R session that keeps running no longer leaves a record behind - Until an app has answered it, the stdio proxy skips app records whose port refuses connections and tries the next newest, instead of failing every call on a stopped app
register_input()gainshint(one ofinput_hint_classes): whether agents ask the user for an input before loading data or running the analysis, keep its default, or leave it alone.shiny_input_inforeturns each input's hint, takes ahintsfilter, and reports session state registered with the newregister_input_state()under@state- With no browser page open,
switch_moduleand module tool calls give the agent the app's address as a one-click link - The Claude plugin adds a
raveskill: how agents find a runningRAVEapp, open it in the browser, and what to ask before loading data - Added
mcp_click(): clicks an element for an agent and reports whether it matched, was clicked, or was refused; the browser refuses elements inside[mcp-agent-disabled="true"](controls for people only).shiny_input_updateclicks buttons through it, so a refused or missing button now fails the tool call colormapSelectInput()can no longer be emptied: Backspace/Delete keep the selected color map, an update with an emptyselectedrestores the previous value (or the first color map), and aselectedoutside the choices selects the first one- Added a color picker widget using vanilla
shinyselect input; - Added base theme for plots and viewers that are registered output, such as
plotOutput2; - Redesigned the
MCPendpoint so agents such asClaude Codecan drive the dashboard without session binding:
Show all changes in 0.3.0Hide the rest of the changes in 0.3.0
- the tool list is built from the template on disk (each module's tools load once without a browser), so it is available before any browser opens and never changes while an agent is connected; tools from modules that fail to load fall back to
agents/tool-schema.yaml - each tool call runs in a module chosen on the spot: the module named by the optional
_moduleargument, else the module tab the user pinned with the new pin button, else the one the user used most recently; results end with a note naming the module - removed the
list_shinysessions,register_shinysession,get_session_info, andask_userMCPtools; addedshidashi_sessions(open modules and the default one) andshidashi_call(tools that exist only in live sessions) - the server no longer issues
Mcp-Session-Id;/mcp/{module}limits a connection to one module (a module id or a handle) - agent modes and the confirmation policy apply only to the in-dashboard chat; over
MCP, tools carryreadOnlyHintanddestructiveHintannotations and a note, and the agent asks the user in its own chat, never in the browser; tools turned off inagents.yamlstay off - the stdio proxy picks up apps from per-app records, follows an app across restarts, accepts
--appand--module, and always replies to a request - the stdio proxy works without a running app: it connects, lists the tools it can, and tells the agent to ask the user whether to start an app or launch a saved one
- the stdio proxy can attach to a shidashi app at any address for the current session (
shidashi_connect,shidashi_disconnect); its tool list follows the attached app, andshidashi_toolslists the app's tools for clients that do not refresh their tool list - module handles always carry the session token prefix (
<module>@<token>), so a handle stays the same when the user opens the module again in another tab - added the
switch_modulemeta tool: it shows a module in the user's dashboard as clicking it in the sidebar does (its open tab comes to the front, or it opens in a new tab;auto_new = FALSEonly switches to an open tab), and returns once the module's page has loaded (optionsshidashi.switch_module_timeoutandshidashi.switch_module_wait); it is refused while the user has a module pinned - the dashboard now finds a module's open tab by its module id, and a module page asks its dashboard directly when switching modules, so
switch_module()also works when the dashboard sits in a frame switch_module()gainsauto_new: withauto_new = FALSEit only switches to a module whose tab is open- exported
mcp_call_active(): it isTRUEwhile a tool runs for anMCPcall, and while it is, the environment variableSHIDASHI_USING_MCPis"TRUE"(removed when the call returns), so tools and skill scripts can behave differently for agents, for example print less - Each skill is now two tools:
skill_load__<name>reads the instructions and reference files and never changes anything, andskill_run__<name>runs the scripts;skill_wrapper()returns both (load,run); in the dashboard chat, a script marked destructive inagents.yamlnow asks for confirmation - Skill scripts document their arguments in a
# Usage:header comment;skill_run__<name>lists each script's usage and refuses a call that leaves out a required argument; files inscripts/whose names start with_are helpers, not scripts - Environment variables passed to a skill script (
envs) are now added to the app's environment instead of replacing it, so the script keepsPATH,HOME, andSHIDASHI_USING_MCP - Added
save_launcher()andrun_launcher(): saved apps are kept in onelaunchers.jsonfile in theshidashicache folder, optionally with a copy of the app (copy_app = TRUE) and free-form metadata; theMCPproxy lists saved apps (shidashi_launchers) and, when the user picks one, starts it and opens the chosen module in the browser (shidashi_launch) shiny_query_uinow returns the element's HTML or image in one call;shiny_query_ui_resultis removed;transform_image = FALSEasks for HTML only, and long HTML is trimmed (image data and scripts shortened,max_charssets the limit)- Added the
shiny_output_resultMCPtool: it returns a registered output's rendered content even when the output is in a hidden tab or a collapsed card, rendering it first (waiting up to 10 seconds; optionshidashi.output_result_timeout); a plot that was never shown is drawn at a fallback size;shiny_query_uinotes when an element is not shown or shows an error; outputs registered withdownload_type = "htmlwidget"also return the widget data (x), since a widget such as aDTtable shows only one page of it, and outputs registered withdownload_type = "data"also return whatdownload_functionwrites; both are trimmed bymax_chars - Added
render_hidden_output(), which renders one output at the next flush even when it is hidden, then restoressuspendWhenHidden shiny_query_uiandshiny_output_resultask the browser after a short pause (optionshidashi.query_ui_delay, default 0.1 seconds): agents often send a change and a query in one turn as concurrent requests, whichRmay take in either order, and the pause lets the change reach the page first- In the
bslib-baretemplate,shiny_query_uiandshiny_output_resultask athreeBrainviewer for pictures of itsWebGLorWebGPUcanvases: they dispatch oneviewerApp.captureOnceevent on the viewer's wrapper (.threejs-brain-canvas) with an empty object asdetail, and the viewer draws a frame and adds{ canvas, dataURI }todetail.viewsfor each view it drew. When the viewer has not answered after three animation frames, and for any other canvas, the canvas is read directly as before. Such canvases used to come back blank inChromium, or out of date in browsers that keep the last frame. A page that draws no frames (for example in a background tab) is read after half a second, with a note - Errors inside
shidashi's own observers are reported as warnings instead of ending the user's session register_input()gainstooltip, shown when the mouse hovers over the input (itstitle); it defaults to the first sentence ofdescription(newas_tooltip()), andtooltip = NULLturns it off; only inputs get it, so other registered elements, such as cards, are unchanged
From NEWS.md in the release
Install
Health
- OK13 OK2026-08-04
- NOTE12 OK, 1 NOTE2026-08-01
- OK14 OK2026-03-10
Documentation
- Help pages
- 62 (4 internal)
- Examples that run
- 87%33 run in a plain check (2 of them under a condition) · 4 never run · 1 hold no code
- Exported functions with examples
- 64%
- Documented parameters
- 86%
- Return-value docs
- 97%
- Help pages citing references
- 0%
Downloads
Repository
- PRs merged (all time)
- 86%
- Median days to close, 50 most recently updated closed issues
- 1
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Forks over time
Releases over time
Issues over time
PRs over time
Commits over time
8 development-tooling and community-health practices detected across 4 families in the upstream repository
Checks run against github.com/dipterix/shidashi on 2026-10-21.
The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel
GitHub Pages site last deployed 2026-10-15 · The repository has a site deploy workflow
pkgdown site last built 2026-10-15
This repository shows signs of AI coding tools.
- GitHub Copilotfirst seen 2026-02-26Seen in the repository: .github/copilot-instructions.md
- Claude Codefirst seen 2026-09-29Seen in the repository: .claude-pluginNamed in .Rbuildignore: .claude-plugin
Dependencies
Installing shidashi adds 53 packages (29 with compiled code, 39 MB of source tarballs). Heaviest: bslib 5.6 MB, promises 3.1 MB, ellmer 3.0 MB.
Code & Tests
People & History
Pick two releases to compare their code metrics.
- 0.3.0Latest2026-10-11 · current release · diff ↗ ··
added 12 exports
as_tooltip, colormapSelectInput, input_hint_classes, mcp_call_active, mcp_click, objectListInput, register_input_state, renderPlot2, render_hidden_output, run_launcher, save_launcher, updateObjectListInputlisted once in CRAN's queue
Seen in one reading of CRAN's incoming queue, at 2026-10-11 22:36 UTC, so it stayed less than the time between readings. - RR 4.6.0 released · 2026-04-24
- 0.2.02026-04-10 · diff ↗ ·
removed 4 exports
get_jsevent, register_global_reactiveValues, register_session_events, register_session_idadded 29 exports
card_badge, card_recalculate_badge, combine_html_class, disable_input_broadcast, disable_input_sync, disable_recalculate_badge, enable_input_broadcast, enable_input_sync, enable_recalculate_badge, fire_event, get_event, get_handler, html_asis, read_stream_vis, register_session, remove_html_class, renderStreamViz, server_standalone_viewer, set_card_badge, set_handler, streamVizOutput, stream_file_id, stream_init, stream_path, stream_to_js, stream_viz, switch_module, unregister_session, updateStreamViz - 0.1.82026-03-23 · diff ↗ ·
added 13 exports
active_module, bslib_dependency, current_module, drawer_close, drawer_open, drawer_toggle, init_app, mcp_wrapper, module_drawer, open_url, register_input, register_output, skill_wrapper - RR 4.5.0 released · 2025-04-11
- RR 4.4.0 released · 2024-04-24
- 0.1.62024-02-17 · diff ↗
- RR 4.3.0 released · 2023-04-21
- 0.1.5
- 0.1.42022-10-16 · diff ↗
- 0.1.32022-08-06 · diff ↗
- 0.1.22022-06-21 · diff ↗ ·
added 5 exports
add_class, flex_break, register_global_reactiveValues, remove_class, reset_output - RR 4.2.0 released · 2022-04-22
- 0.1.02021-11-17
- RR 4.1.0 released · 2021-05-18
Package metadata
- First published
- 2021-11-17
- Total releases
- 9 / 5 yrs
- License
- MIT + file LICENSE OSI
- Download size
- 959 KB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("shidashi")This package has no citation file, so citation() returns this entry built from DESCRIPTION.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-24, which the citation names so these numbers can be found later. More on citing and the projects behind them.