Welcome to the Streamlit community! Thanks for your detailed question—this is a common challenge when building interactive apps. In Streamlit, every widget interaction (including clicking a link or button) triggers a full script rerun, which can feel like a “refresh.” However, you can persist user data and UI state using st.session_state , so users don’t lose their progress or inputs when the script reruns.