[Bug]: Busy indicator is not shown for `ui.output_ui`/`render.ui`
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 65/100
Research direction
Run the provided minimal reproducible example and compare the busy-indicator behavior of output_ui/render.ui with output_data_frame. Start from the ui.busy_indicators configuration and the @render.ui and ui.value_box entry points; done means the spinner appears while the dynamic UI render is pending, with an opt-in path if required.
Written by the indexing model from the issue text.
Description
Component
UI (ui.*)
Severity
P1 - High (major feature broken)
Shiny Version
1.5.1
Python Version
3.13.9
Minimal Reproducible Example
from time import sleep
import pandas as pd
from shiny import App, reactive, render, ui
WAIT_TIME = 3
def server(input, output, session):
@render.data_frame
@reactive.event(input.run)
def get_df():
sleep(WAIT_TIME)
df = pd.DataFrame({"A": range(5), "B": range(5, 10)})
return render.DataGrid(df)
@render.ui
@reactive.event(input.run)
def box():
sleep(WAIT_TIME)
return ui.value_box("Title", "Value")
app_ui = ui.page_fluid(
ui.busy_indicators.options(spinner_type="bars"),
ui.input_action_button("run", "Run"),
ui.layout_column_wrap(
ui.output_ui("box"),
ui.output_data_frame("get_df"),
width=1 / 2,
),
)
app = App(app_ui, server)
Behavior
Current: when "Run" button is clicked, the busy indicator is shown for output_data_frame but not for output_ui.
Expected: The busy indicator should be shown for all dynamic UI elements, including those rendered with @render.ui. This is especially relevant when using ui.value_box. In some cases, this might not be desirable, but there should be a way to opt in for this behaviour.
Here is a shinylive app containing an MRE.
Error Messages (if any)
None
Environment
OS: macOS 26.3.1
Browser: Safari, Firefox and Chrome
- Dominant language
- Python
- Stars
- 1.8k
- Forks
- 135
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 21
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from posit-dev/py-shiny
-
needs-triage Priority: Medium
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
enhancement to-close
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
ai-triage:done bug needs-triage Priority: Low
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
-
ai-triage:done needs-triage Priority: Medium
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
All issues in posit-dev/py-shiny
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bancolombia/sentinel#23 ·
-
test md OpenCI
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100