Repository navigation
feat(cli): Add shiny inspect command with Reactlog visualization and interactive HTML export - #2467
Draft
karangattu wants to merge 60 commits into
Draft
karangattu wants to merge 60 commits into
karangattu wants to merge 60 commits into
Conversation
…interactive HTML export
karangattu
marked this pull request as draft
August 23, 2026 02:17
…zed graph timeline, and phase filtering
…nd type empty select args
…eadiness in playwright recording
…llisions, deduplicate inputs, and fix relative video paths
… unresolved inputs, and use synthetic IDs for graph export
…layback, and precise edge highlighting
…ose_network in CI
…sts without browser binaries
…nt, XSS, and CLI flags
…lizer and clean export formats
…ot-cause explanations
…cs, and regressions - Passive headless recording by default; require --auto-interact for auto fills/clicks - Redact passwords and secret tokens at collection time before entering recorded actions - Distinguish observed execution vs inferred evaluation and update did-not-run messaging - Use precomputed action waves with wave-scoped causal explanations - Remove inline JavaScript event handler string interpolation for XSS protection - Revert serialize_dtype signature in _tbl_data.py to nw.Series
- Use concise trigger names on timeline burst anchors with ellipsis and max-width constraints - Store full user action descriptions on title/tooltip and live story - Coalesce consecutive same-timestamp click/input bursts - Require significant idle duration and distance before displaying idle gap indicators
…nd rename reports
…styling, keyboard navigation, and bottleneck badges
… and clean process env
…ckward compatibility
This change fixes reactlog mark timing by normalizing and sorting mark timestamps consistently and by converting app-side timestamps to page-relative values when needed. It also avoids duplicate mark collection during session recording and adds a regression test covering the express showcase reactlog features. The repo config now ignores the generated dist2 directory and excludes it from pyright checks.
- `shiny inspect --html app.py` no longer writes the report over app.py; refuse to overwrite the inspected file in any case - Always route /__reactlog__ and check reactlog_enabled per request, so run_app(reactlog=...) and --no-reactlog take effect on an existing App - Don't treat proxied loopback requests as local; app source is only served to direct local requests - Use relative reactlog URLs so Cmd+F3 works under a path prefix
schloerke
added this pull request to stack #2528
October 6, 2026 16:45
schloerke
force-pushed
the
feat-shiny-inspect
branch
from
October 6, 2026 20:11
376e6b3 to
15988da
Compare
This was referenced Oct 6, 2026
… use vertical sidebar
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds
shiny inspect, a CLI command that helps developers understand how a Shiny app reacts to user actions.It shows dependencies, records browser sessions, replays reactive events, and creates reports for debugging or documentation.
Open the Reactlog report - Core Mode
Open another live Reactlog report - Express Mode
Quick start
Create an interactive HTML report:
Or run an app with live Reactlog enabled:
More command examples
Inspect an app in the terminal
Run an app with live Reactlog support
Record browser actions and video
Create a light-themed report
Import a Shiny for R Reactlog file
Export structured JSON
shiny inspect app.py --format json > graph.jsonExport a Mermaid diagram
shiny inspect app.py --format mermaid > graph.mdExport a Graphviz DOT diagram
shiny inspect app.py --format dot > graph.dotShow the event stream in the terminal
Simulate input changes
What the interactive report shows
New Reactlog features
shiny run --reactlog app.py.Cmd+F3(macOS) orCtrl+F3(Windows/Linux) in the running app to open the report at/__reactlog__.Cmd+Shift+F3orCtrl+Shift+F3to save a bookmark label during an active session.reactive.mark("label")in Python code to add timeline bookmarks.with reactive.isolate():display as dashed lines with isolated arrowheads in the graph.Left/Rightorh/l: Step backward and forward.Up/Downork/j: Jump between action bursts.Space: Play and pause timeline playback.Home/End: Jump to start or end.?: Open keyboard shortcut reference.Compatibility and correctness
@reactive.event()triggers as dependencies while keeping body reads isolated.with reactive.isolate():blocks during static analysis.CLI behavior
--formatcontrols the selected output, even when--recordis present.--htmlwrites toreactlog.htmlwhen the user does not supply an output path.--recordwrites video torecording.webmwhen the user does not supply a path.--reactlogenables live Reactlog recording onshiny run.