问题
Streamlit 开发者在构建依赖 session state 的多页应用时,页面跳转体验很差:2023 年 9 月的 issue 反馈,新推出的 st.link_button 只能在新标签页打开链接,而跨标签页重定向会导致 session state 全部重置,开发者只能忍受这一缺陷。更早的 issue(2022 年 8 月)还请求内置访问浏览器 local storage 的能力,说明状态在客户端持久化是长期未满足的需求。
目标用户
用 Streamlit 构建 Python 数据应用/内部工具的开发者,尤其是依赖 session state 做多页交互、本地状态持久化的中高级用户。市场规模与 GitHub issue 的讨论量(9-12 条评论、60-70 分热度)相符,属于小而具体的开发者细分,付费意愿未被验证。
解决方案
- 提供一个 Streamlit 自定义组件 st_state_link:在当前标签页内完成跳转,session state 不丢失(对应信号中的 new_tab 需求)
- 提供组件 st_local_storage:在 Python 侧直接读写浏览器 localStorage,实现跨刷新、跨会话的客户端持久化
- 提供 state 迁移/备份工具,把 session state 序列化到 localStorage,防止页面切换时丢数据
- 兼容 Streamlit 多页应用(MPA)与 st.link_button 等现有元素,作为 drop-in 替换
- AI 的角色:可用 LLM 辅助生成组件的 TypeScript 样板与文档示例,但核心是前端组件工程,AI 不是本产品的关键卖点
为什么是现在
信号 1 显示 st.link_button 于 2023 年才推出,随即暴露出跨标签页重置 session state 的新问题,说明 Streamlit 多页应用生态正在扩张、状态管理痛点刚刚集中爆发,是切入的窗口期;但信号本身没有提供模型能力或成本变化层面的依据。
MVP 范围
第一版只做两件事:提供 st_state_link / st_local_storage 两个自定义组件——st_state_link 在当前标签页内跳转 URL 而不清空 session state,st_local_storage 读写浏览器 localStorage。不做的事:不做云服务、不做账号体系、不支持 Streamlit 之外的框架、不承诺与官方未来实现完全兼容。以 PyPI 开源包形式发布,附最小可运行 demo。
风险
平台依赖是最大风险:这两个需求都是 streamlit 官方仓库的 issue,官方一旦在核心库实现(如给 st.link_button 加 new_tab 参数、内置 local storage 组件),第三方包价值归零。技术风险包括自定义组件与 Streamlit 版本升级的兼容维护成本。商业化路径不明:目标用户是开源开发者,信号中无任何付费意愿。若不商业化,则只能作为引流或开源声誉项目。
信号证据
这张卡片依据的原始讨论。摘录保持原文,点“原文”查看上下文。
GitHub Issues · streamlit/streamlit9月30日功能请求▲ 769 条评论
“The recently launched st.link_button opens up in a new tab. But if I want to use session states, they reset out if the redirection happens in different tab.”
st.link_button only opens links in a new tab, which resets Streamlit session states, so users can't redirect in the same tab while preserving state.原文
GitHub Issues · streamlit/streamlit8月7日功能请求▲ 6512 条评论
“ideally, something like this:”
Streamlit users want the ability to interact with the browser's local storage.原文