StreamTree Roadmap
This document tracks product direction and phased delivery. It aligns with DEPENDENCY_STRATEGY.md (optional extras, wrapper-first APIs) and PLAN.md (async + rerun model). CHANGELOG records what actually shipped per version.
How to use this roadmap
- Release index (table below) — snapshot of phases and what has shipped in tagged releases (PyPI publishes when the release workflow succeeds on
v*.*.*tags). - Near-term themes — backlog and cross-cutting work (docs, CLI, helpers) that span releases.
- Pattern catalog — design vocabulary mapped to phases (not a separate product spec).
- Phase 0–5 — historical goals and long-range bets; detailed shipped vs open for Phase 2 lives in the table + backlog, not duplicated in the Phase 2 feature list.
Contents: Release index · Phase 2 backlog & themes · Patterns · Phase 0 · Phase 1 · Phase 2 · Phase 3 · Phase 4 · Documentation (RTD) · Phase 5 · Vision
Release index
Last updated: 2026-05-13 (0.11.0 Phase 4 tooling slice).
| Track | Status | Notes |
|---|---|---|
| Phase 0 — Foundation | Complete | Package layout, Streamlit renderer, design docs in docs/. |
| Phase 1 — MVP | In progress | 0.1.0 core tree + state; 0.2.0 Pydantic + stub extras; deeper memoization / streamlit-extras curation still open. |
| Phase 2 — Application | Complete (0.9.0) | Shipped through 0.9.0: navigation sections (page_links_sidebar_sections, multipage_sidebar_nav), routing clears/batch (clear_route, update_query_params, …), bool + layout forms (docs/PHASE2_FORMS.md), [ui] (Stoggle, TaggerRow, MentionChip), dismiss_tasks, composite example phase2_composite_demo.py, Phase 2 doc reconciliation. 0.10.0+ adds streamtree init --template scaffolds (Phase 3). Stretch: heavier opinionated App + Routes product templates; alternate auth protocols → backlog. |
| Phase 3 — Data toolkit | Complete (0.10.0) | Shipped through 0.10.0: CRUD helpers, subtree memo, deferred fragments, perf/debug counters, ordered submit_many helper, exploration + enterprise protocol modules, streamtree init --template, docs and demos. Stretch (deeper admin frameworks, heavier analytics) → Phase 4 / app-specific layers. |
| Phase 4 — Tooling | Complete (0.11.0) | streamtree tree / preview / serve, doctor --verbose, testing.viz, testing.introspection, testing.apptest, asyncio.summarize_async_tasks, debug_render_path; MkDocs + mkdocstrings API pages; .readthedocs.yml. Docs — RTD: site config in-repo; PyPI Documentation URL points at RTD (latest; stable once versioned builds are active). Stretch (Storybook-style visual regression) remains backlog. Backlog: imperative Streamlit codegen (virtual Element tree → readable st.* / context-manager Python) for docs, migration, and debugging — see Phase 4. |
| Docs — Read the Docs | In progress | .readthedocs.yml + PyPI Documentation URL (RTD latest); manual, guides, and API reference expand over releases (Documentation platform). |
0.11.0 (shipped)
- CLI:
streamtree tree(module:attr,--format,--summarize,--expand-components);preview/servealiases ofrun;doctor --verbose. - Testing / dev:
streamtree.testing.viz,streamtree.testing.introspection,streamtree.testing.apptest,streamtree.asyncio.summarize_async_tasks,debug_render_path;examples.counter:streamtree_tree_rootfortreedemos. - Docs:
docs/TESTING_AND_DEBUG.md; MkDocs mkdocstrings API reference;.readthedocs.yml.
0.10.0 (shipped)
- Charts:
AltairChart(Altair /st.altair_chart);EChartsChart(Apache ECharts viastreamlit-echarts);[charts]pins altair, plotly, and streamlit-echarts;examples/altair_chart_demo.py,examples/echarts_demo.py. - Tables:
DataGrid.on_resulthook afterAgGridfor selection-driven logic without forking the renderer;examples/datagrid_selection_demo.py. - Loading:
streamtree.loading.match_task_manyfor all-done / any-error / any-cancelled semantics across severalTaskHandle-like polls;submit_many_orderedfor stable key ordering withmatch_task_many. - State / layout:
memo_subtree(render-path scoped memo);DeferredFragment(st.fragmentwhen available). - Thin modules (stdlib):
streamtree.crud,streamtree.enterprise,streamtree.perf,streamtree.helpers.explore. - CLI / scaffold:
streamtree init --template {default,crud,explore,enterprise}(Typer--template/-t). - Testing:
streamtree.testing.summarize_tree_kindsforrender_to_treesummaries. - Docs / examples:
docs/PHASE3_CRUD.md,docs/PERFORMANCE.md(large-tree + hooks);examples/crud_pattern_demo.py,crud_automation_demo.py,deferred_region_demo.py,async_ordered_loader_demo.py.
0.9.0 (shipped)
- Portals:
Portal/PortalMount,gather_portals,portal_render_context(renderer integration); design in PHASE2_PORTALS_AND_PREFETCH.md. - Layout:
SplitView(pseudo-sidebar via columns). - Multipage:
iter_page_entries,prefetch_page_sources(stdlib file read + optionalcompilecheck);group_page_entries_by_order_prefix,page_links_sidebar_sections,multipage_sidebar_nav; documented in PERFORMANCE.md. - Forms:
streamtree.forms_layout—build_model_from_bindings,model_field_grid(row/column layout, including bool fields);bool_field_names,bind_bool_fields; docdocs/PHASE2_FORMS.md. - Routing:
clear_query_param,clear_route,update_query_params. [ui]:BottomDock,FloatingActionButton,Stoggle,TaggerRow,MentionChip(streamlit-extras).- Async:
dismiss_tasksbatch terminal cleanup. - Docs / examples:
docs/PHASE2_TAIL.mdreconciliation;examples/phase2_composite_demo.py; README multipage vsRoutesguidance; roadmap Phase 2 closure.
0.8.0 (shipped)
streamtree.helpers.page_links+init --with-pagestemplate (discover_pagesin sidebar).streamtree.asyncio.dismiss_taskfor terminal task cleanup before key reuse.[ui]:SocialBadge,StyleMetricCards.[tables]/[charts]:DataGrid(streamlit-aggrid) andChart(Plotly);streamtree.loading.match_task;routing.sync_query_value/set_query_value;docs/PERFORMANCE.md; examplesdatagrid_demo,chart_demo,async_loader_demo.[all]and[dev]: include aggrid + plotly pins for combined installs and CI coverage.
0.7.1 (shipped)
- Packaging / docs: patch 0.7.1; README CI badge and Actions links adjusted for the active GitHub remote used in development (see CHANGELOG).
0.7.0 (shipped)
streamtree.asyncio:submit_manyfor parallel independent tasks; cooperative cancellation (TaskHandle.cancel()on running work setscancel_requested;is_task_cancel_requested/complete_cancelledfor workers);mark_donerespects worker-initiated cancelled; module docstring covers stale keys (samekey= same logical task across reruns).
0.6.0 (shipped)
streamtree init: scaffoldapp.py(+ optionalpages/) via[cli];streamtree.helpers.scaffold.AuthGate+streamtree.auth.build_authenticatorbehind[auth](streamlit-authenticator).Dialog/Popoveroverlay elements; Streamlit ≥ 1.33 dependency floor.[ui]:ColoredHeader,VerticalSpaceLines(streamlit-extraswrappers).- Docs / tests:
PHASE2_TAIL.md; expanded renderer and CLI coverage.
0.5.0 (shipped)
streamtree.helpers.pages:PageEntry,pages_dir_next_to,list_page_entries,discover_pagesfor Streamlitpages/scripts (labels + sort keys +PageLinkpaths); exported fromstreamtree.helpers.streamtree.asyncio:set_task_progressandTaskHandle.progress(); task session dict storesprogress(lock-serialized with status/result/error).- Examples:
examples/pages_helpers_demo.py, stubexamples/pages/1_About_demo.py. - Docs: README install pin + capabilities, PLAN.md packaging line, DEPENDENCY_STRATEGY.md (
helpers.pages+ progress), this roadmap’s release index / Phase 2 “Next”. - Tests: expanded coverage for
helpers.pages(paths, unicode, ordering, in-directory symlinks) andasyncioprogress (poll while running, error path, main-thread updates).
0.4.1 (shipped)
- Patch: version 0.4.1; README / changelog release metadata; CI badge target alignment (fork).
0.4.0 (shipped)
- CLI: optional
[cli](Typer) +streamtree run/streamtree doctor; delegates tostreamlit run. streamtree.helpers.runner: argv builder +run_streamlit_sync(stdlib).[runner]extra remains a metadata stub;[pages]reserved for multipage helpers.PageLink+st.page_linkrenderer path; Streamlit ≥ 1.30 required.App:initial_sidebar_state,menu_itemsforst.set_page_config.- Forms:
bind_numeric_fields,number_inputs,numeric_field_names. - Examples:
examples/numeric_nav_demo.py,examples/streamtree_run_demo.md.
0.3.0 (shipped)
streamtree.app:App,apply_page_config,app_root_element,render_app()(guardedst.set_page_config).streamtree.theme:Theme,theme()/theme_css(),ThemeRoot+provider(theme=...).streamtree.asyncio:submit/TaskHandle(stdlib threads;[asyncio]slot for future backends).streamtree.forms:bind_str_fields,str_text_inputs.- Examples:
examples/app_shell.py,examples/async_bg.py,examples/model_form.py.
0.2.0 (shipped)
- Deps: Pydantic v2, typing-extensions; stub extras (
tables,charts,ui,auth,asyncio,async,cli,all);[async]aliases[asyncio]inpyproject.toml. - Routing:
sync_route,set_route,Routes(examples/routed_app.py). ErrorBoundary,app_context, forms slice (str_field_names,model_validate_json,format_validation_errors).
Phase 2 backlog & near-term themes
Backlog (post-0.6.0; Phase 2 application track closed at 0.9.0)
- Stretch: opinionated
App+Routesproduct templates (beyondstreamtree init --templateshells and helpers); alternate auth providers / OIDC stacks remain bring-your-own. - Auth: alternative providers / OIDC stacks remain bring-your-own;
[auth]staysstreamlit-authenticator+AuthGateunless a future pinned abstraction ships. - Async: new worker backends or pools (Phase 3
[async]story), beyonddismiss_tasksbatching. - More
streamlit-extrascuration behind stable StreamTree names (ongoing). - Richer theme / memoization — largely Phase 1 / 3 (see release index).
Optional dedicated helpers
Reserved empty extras (same pattern as [pages]) until deps/APIs are pinned:
[pages]— optional extra stays empty until pinned third-party deps land;streamtree.helpers.pages(stdlib discovery) ships in the default install as of 0.5.0 — multipage /pages/+ navigation APIs ↔Routes,App; Streamlit version matrix; no second web server.[runner]— metadata-only companion tostreamtree.helpers.runner(stdlibstreamlit runhelpers ship in the default install;[cli]adds Typer for thestreamtreeconsole script).
End-to-end app experience (optional Streamlit CLI)
Goal — One StreamTree-shaped workflow (scaffold → configure → run) without requiring the Streamlit CLI for teams that opt in.
- Always supported:
streamlit run app.py(CI, debugging, power users). - Shipped (0.4.0):
streamtree run/streamtree doctorbehindpip install "streamtree[cli]", delegating topython -m streamlit run(seestreamtree.helpers.runner). - Shipped (0.6.0):
streamtree initforapp.py(+ optionalpages/). - Boundary: DX/packaging layer in Phases 2–4, not a new server. “No Streamlit CLI” = no obligation to use Streamlit’s CLI, not removing Streamlit from the stack.
- Docs: Full manual/guides on RTD (Documentation platform); README stays short.
Patterns from React ergonomics (non-VDOM, rerun-native)
StreamTree is not React and will not ship a browser VDOM. The list below maps product patterns to Streamlit’s rerun model (see phase column).
- Error boundaries — subtree failures → fallback UI + logging.
- Context / DI — theme, tenant, flags, route data without prop drilling.
- Stable list identity / keys — dynamic children stay aligned across reruns.
- Subtree memoization — skip rebuilding when inputs unchanged.
- Transitions / deferred regions — lower-priority or chunked regions under load.
- Suspense-shaped async — loading / ready / error UI for async-shaped work (rerun-native).
- Imperative handles — focus, scroll, etc., where Streamlit allows; document limits.
- Portals / layout targets — attach subtrees to sidebar, dialog, etc.
- Dev introspection — tree, props, bound
session_statekeys. - Async task orchestration — submit off-thread, poll on rerun; optional progress (asynclit-class integrations behind
streamtree.*when applicable).
| # | Pattern | Primary phases |
|---|---|---|
| 1 | Error boundaries | 2, 5 |
| 2 | Context / DI | 2, 5 |
| 3 | Keyed lists / identity | 1, 2 |
| 4 | Subtree memoization | 1, 3 |
| 5 | Transitions / deferred regions | 3 |
| 6 | Async / Suspense-shaped boundaries | 1, 2, 3 |
| 7 | Imperative handles | 2 |
| 8 | Portals / layout targets | 2 |
| 9 | Dev introspection | 4 |
| 10 | Async task orchestration | 2, 3, 4, 5 |
Phase 0 — Foundation
Goals
- Package architecture, core rendering, developer ergonomics.
- Dependency philosophy: small hard set; heavy stacks opt-in via extras.
Deliverables
- Element model,
@component, tree + Streamlit renderer. - Minimal docs; pattern philosophy tied to Patterns.
- Async + rerun narrative + pointers to PLAN.md.
pyproject.tomlinstall tiers documented (streamtree,[tables], …,[pages],[runner]when added,[dev],[all]).
Phase 1 — MVP
Goals
- Usable framework on Streamlit; core layouts and state.
Features (checklist)
Elements: Text, Markdown, Button, TextInput, NumberInput, SelectBox, Checkbox, DataFrame, Image.
Layouts: VStack, HStack, Grid, Columns, Tabs, Sidebar, Form, Card.
State: state, toggle_state, form_state, session_state.
Rendering: render, component identity, key discipline.
Rerun-native: keyed dynamic lists; subtree memo hooks where MVP allows; documented loading branches (loading / ready / error) without blocking render.
Async (guidance): when to use st.cache_data / fragments vs future streamtree.asyncio.
Dependency alignment (MVP)
- Hard deps per strategy; Pydantic for props/forms where scope allows.
- Curated
streamlit-extrasonly behind stablestreamtree.*names.
Deliverables
- pip-installable package, examples, demos.
- Stub extras in
pyproject.toml(tables,charts,ui,auth,async,cli,pages,runner,all) as names are reserved. - Optional
[async]integration path documented even if not default-installed yet.
Phase 2 — Application features
Goals
- Production-grade apps on Streamlit: routing, resilience, theming, async slice, forms.
Shipped on the Phase 2 track (0.2.0–0.9.0)
The bullets below are delivered today; per-version pins and changelog prose live in the Release index and CHANGELOG.md.
- Routing & resilience:
sync_route/set_route,Routes,ErrorBoundary,app_context. - Forms: Pydantic-first string + scalar numeric bindings and inputs.
- App shell:
App,apply_page_config,render_app, sidebar composition,PageLink+st.page_link,initial_sidebar_state/menu_itemspassthrough. - Theming:
Theme/theme()/ThemeRoot. - Async worker slice:
streamtree.asynciosubmit/TaskHandle, session task dict, progress +set_task_progress/TaskHandle.progress();submit_manyand cooperative cancel (0.7.0);dismiss_taskfor terminal cleanup before key reuse (0.8.0). - Run / multipage DX (stdlib):
streamtree.helpers.runner, optional[cli]streamtree run/doctor/init(with--with-pagesshell +page_links, 0.8.0),streamtree.helpers.pages(discover_pages,page_links, …). - Package surface:
helpersis exposed on thestreamtreeroot package (streamtree.helpers). - Optional auth:
AuthGate+[auth](streamlit-authenticator). - Overlays:
Dialog,Popover(Streamlit-native; version floor 1.33). - Optional UI extras:
[ui]—ColoredHeader,VerticalSpaceLines(0.6.0);SocialBadge,StyleMetricCards(0.8.0);BottomDock,FloatingActionButton(0.9.0). - Portals & layout targets (0.9.0):
Portal/PortalMount,SplitView, prefetch helpers — see PHASE2_PORTALS_AND_PREFETCH.md. - Layout-aware forms (0.9.0):
streamtree.forms_layout—build_model_from_bindings,model_field_grid(str / numeric / bool); see PHASE2_FORMS.md. - Navigation / imperative edge (0.9.0): sectioned
pages/sidebar helpers;routingclear/batch query helpers (see README “Imperative handles”). [ui]breadth (0.9.0):Stoggle,TaggerRow,MentionChip.- Async polish (0.9.0):
dismiss_tasksbatch terminal cleanup.
Release notes
Shipped scope for 0.2.0 through 0.9.0 is in the Release index and subsections above. Stretch work is in the backlog and PHASE2_TAIL.md.
Optional dependency alignment
[auth]:streamlit-authenticatorbehindAuthGate/build_authenticator; document limits; third-party identity stacks stay app-wrapped until a future pinned protocol ships.[ui]: shadcn-style /extra-streamlit-componentsonly behind StreamTree components.[async](when shipped): optional backend (e.g. asynclit) only viastreamtree.asynciopublic API.
Deliverables (remaining / stretch)
Phase 2 application deliverables from the original charter are closed as of 0.9.0 (see PHASE2_TAIL.md closure checklist). Ongoing product work continues under Phase 3 (data), 4 (tooling), and the stretch bullets in the backlog above.
- Example apps for deeper data workflows and Phase 3 loaders (beyond the
phase2_composite_demoslice).
Phase 3 — Data application toolkit
Goals
- Best architecture layer for data-heavy Streamlit apps.
Features
- Shipped (0.8.0): optional
[tables]/DataGrid,[charts]/Chart(Plotly MVP);routing.sync_query_value/set_query_value;streamtree.loading.match_taskfor declarative loading / ready / error subtrees fromTaskHandle. - Shipped (0.10.0):
AltairChart(Altair);EChartsChart(streamlit-echarts);DataGrid.on_result;match_task_many;submit_many_ordered;memo_subtree;DeferredFragment;streamtree.crud,streamtree.enterprise,streamtree.perf,helpers.explore;streamtree init --template;testing.summarize_tree_kinds;docs/PHASE3_CRUD.md,PERFORMANCE.md,DEPENDENCY_STRATEGY.mdupdates; examplesaltair_chart_demo,echarts_demo,datagrid_selection_demo,crud_pattern_demo,crud_automation_demo,deferred_region_demo,async_ordered_loader_demo. - Stretch (Phase 4+): deeper packaged admin frameworks, richer analytics integrations, optional worker backends—treat as product-specific unless pinned here later.
Optional dependency alignment
[tables]: e.g.streamlit-aggrid→DataGrid.[charts]: plotly + altair + streamlit-echarts →Chart,AltairChart,EChartsChart(seepyproject.toml/ CHANGELOG 0.10.0).[async]: worker-loop integration; docs stay onstreamtree.asyncio.
Deliverables
- Templates, exploration toolkit, enterprise-oriented components.
- Shipped:
docs/PERFORMANCE.mdplaybook;docs/PHASE3_CRUD.md;streamtree init --templateshells; examplesdatagrid_demo,datagrid_selection_demo,chart_demo,async_loader_demo,altair_chart_demo,echarts_demo,crud_pattern_demo,crud_automation_demo,deferred_region_demo,async_ordered_loader_demo. - Ongoing (docs platform):
streamtree.asyncioreference depth (cancellation, stale-run rules) in RTD / guides when the docs site lands.
Phase 4 — Testing and tooling
Goals
- Enterprise workflows: testing, CLI, introspection, StreamTree-first run (optional), RTD as canonical learning surface.
Features
- Shipped:
streamtree.testing.render_to_treefor JSON snapshot workflows in tests (see README testing row); 0.10.0+streamtree.testing.summarize_tree_kindsforkindcounts on tree dicts. - Shipped (CI):
lint-test(reusable workflow) runs ruff (format + lint), ty, and pytest with coverage on ubuntu-latest, windows-2025-vs2026, and macos-latest, each with Python 3.10–3.13;cli-smokerunsstreamtree doctorwith[cli]on the same three OSes;docs-and-distruns MkDocs (build --strict) anduv buildon Ubuntu + 3.12. Release reuses the same jobs, uploadsdist/fromdocs-and-distforpublish-pypi/publish-github, and uses concurrency + Dependabot for Actions (see.github/workflows/). - Shipped (0.11.0):
streamtree tree(JSON / text / Mermaid,--summarize,--expand-components);streamtree preview/serve(runaliases);doctor --verbose;streamtree.testing.viz,streamtree.testing.introspection,streamtree.testing.apptest,streamtree.asyncio.summarize_async_tasks,debug_render_path; MkDocs + mkdocstrings API pages;.readthedocs.ymlfor RTD builds. - Backlog — Streamlit codegen: emit imperative Streamlit Python from a frozen
Elementtree (parallel torender_to_tree, not a second renderer). Intended for RTD side-by-side “Streamlit equivalent” panels, migration off StreamTree, and debug diffs. Scope is best-effort: map built-instreamtree.*widgets/layouts tost.*/with st.*;@componentcall sites may expand to inlined subtrees whenexpand_components=True-style data is available, otherwise stubs or comments. Extras (DataGrid,EChartsChart, …) need explicit tables or “opaque custom block” escapes. Likely homes:streamtree.testingorstreamtree tree --format streamlit(CLI + library API). - Stretch / backlog: Storybook-style visual regression; heavier “preview server” beyond Streamlit forwarding.
Optional dependency alignment
[dev]: pytest, ruff, ty (CI typecheck), mypy (optional local contributor toolchain); mkdocstrings + mkdocs-autorefs for API reference builds.[cli]: typer + minimal deps;streamlit runremains documented fallback.
Deliverables
- Shipped / in repo today: cross-platform CI coverage (see Features above);
render_to_treeandsummarize_tree_kindsworkflows; 0.11.0 CLI + testing helpers + RTD config + API reference skeleton. - Ongoing: RTD project wiring + deeper manual / guides; async testing recipes beyond
run_app_function; optional visual regression tooling; Streamlit codegen from element trees (Phase 4 Features backlog above). streamtreeentry point — RTD ↔ CLI copy alignment (Documentation platform).
Documentation platform (Read the Docs)
Goals
- Versioned, searchable docs on Read the Docs as the primary learning path (README +
docs/*.mdstay summaries / design depth).
Scope (rolled out over several releases)
User manual: concepts (rerun model, trees vs st.*, @component, keys, render / render_app, App); core libs; optional extras matrix + Streamlit version notes; interop + deployment.
How-to guides: first full app; routing; forms; async; lifecycle tutorials once streamtree run / init exist (End-to-end).
API reference: autodoc (Sphinx or MkDocs/mkdocstrings—decision in-repo); intersphinx to Streamlit / Pydantic / stdlib; stable per-symbol URLs.
Streamlit equivalent (future): optional generated st.* blocks next to StreamTree snippets once imperative Streamlit codegen lands (Phase 4 backlog — Testing and tooling).
Operations: stable vs latest policy tied to tags/PyPI; PR doc builds with fail-on-broken-links where feasible; contributor preview + prose styleguide.
Deliverables
- RTD project + webhooks; site skeleton (Manual · Guides · API · release notes link).
- MVP: minimal manual + one end-to-end guide + API index before “1.0”; then flesh out scope above.
- PyPI Documentation URL → RTD stable when the site goes public.
Phase 5 — Ecosystem expansion
Goals
- Optional non-Streamlit renderers and plugin ecosystem.
Features
- FastAPI / static HTML renderers; plugin registry; cross-runtime error/context/memo semantics where feasible; async-native data hooks for alternate hosts; FastAPI + Streamlit coexistence patterns.
Deliverables
- Multi-renderer abstraction, plugin SDK, extension registry, async-capable plugin contract.
Long-term vision
StreamTree becomes:
- The architecture layer for Streamlit-first apps.
- A Python-native UI ecosystem with optional heavier runtimes.
- A production application platform: optional StreamTree CLI + templates + runner for create/run, Streamlit as default engine,
streamlit runalways available. - A project whose manual, guides, and API reference live on Read the Docs (above).
Potential spin-out packages: streamtree-auth, streamtree-testing, streamtree-fastapi, streamtree-admin, streamtree-charts, streamtree-enterprise, optional streamtree-async if streamtree.asyncio grows large enough.
Reuse Patterns for testing, admin, and async-heavy surfaces.