File size: 1,509 Bytes
071ba6b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # DEM-03: Streamlit vs Gradio Bake-Off
**Decision: Streamlit selected** (2026-04-25, Pratham)
## Evaluation Criteria
| Criterion | Streamlit | Gradio | Winner |
|-----------|-----------|--------|--------|
| D3/plotly recursion-tree embed | Native `st.components.v1.html` | `gr.HTML`, less flexible | Streamlit |
| Multi-panel layout control | `st.columns`, `st.sidebar` | Grid layout rigid | Streamlit |
| Live W&B metrics embed (iframe) | `st.components.v1.iframe` | `gr.HTML` | Tie |
| Pareto chart (plotly) | `st.plotly_chart` native | Custom wrapper | Streamlit |
| Setup time for HF Space | `app.py` + `requirements.txt` | Same | Tie |
| Ecosystem familiarity | Pratham: familiar | Pratham: less familiar | Streamlit |
| Interactive sliders for α sweep | `st.slider` | `gr.Slider` | Tie |
| Real-time episode streaming | `st.experimental_data_editor` + `st.status` | Gradio stream not as clean | Streamlit |
## Verdict
Streamlit wins on recursion-tree D3 embed flexibility and Pareto chart native plotly integration.
Both were scaffolded in ~20 min; Streamlit rendered the D3 tree with `st.components.v1.html`
without any wrapper boilerplate. Decision is FINAL for Phase 1–3.
## Notes
- Gradio's `gr.HTML` component requires manual iframe escaping for complex D3 visualizations.
- Streamlit `st.plotly_chart(use_container_width=True)` renders the Pareto frontier cleanly.
- For the pitch: 3-panel layout (recursion tree | Pareto frontier | W&B curves) is achievable in ~100 LoC with Streamlit.
|