tiferet-streamlit
A Streamlit extension for the Tiferet Framework — build multi-page Streamlit applications with Domain-Driven Design.
Installation
pip install tiferet-streamlit
Requires tiferet>=2.0.0b3 and streamlit>=1.30.0.
Quick Start
import streamlit as st
from tiferet_streamlit import StreamlitApp, ViewContext
class HomeView(ViewContext):
def init_state(self):
self.session.set('count', 0)
def render(self):
count = self.session.get('count')
st.title('Home')
st.write(f'Count: {count}')
if st.button('Increment'):
self.session.set('count', count + 1)
st.rerun()
StreamlitApp('my_interface', pages={'/': HomeView})
Core Concepts
ViewContext
The code-behind for a Streamlit page. Manages state via SessionCacheContext, dispatches Tiferet features via AppInterfaceContext, and defines UI through render().
init_state()— Called once on first construction. Override to set initial state.dispatch(feature_id, headers=None, **data)— Execute a Tiferet feature.render()— Override to define Streamlit widgets.__call__()— Makes the view callable forst.Pagecomposition.
ViewComponent
A lightweight, prop-driven sub-component with parent ViewContext access.
from tiferet_streamlit import ViewComponent
class Counter(ViewComponent):
def render(self, label='Count', start=0):
count = self.ctx.session.get('count') or start
st.write(f'{label}: {count}')
SessionCacheContext
Cache backed by st.session_state with namespace isolation for multi-page apps.
from tiferet_streamlit import SessionCacheContext
cache = SessionCacheContext(namespace='my_view')
cache.set('key', 'value')
cache.get('key') # 'value'
Multi-Page Applications
Use StreamlitApp (or build_streamlit_app) to register multiple views with routes:
StreamlitApp('my_interface', pages={
'/': HomeView,
'/about': AboutView,
'/settings': SettingsView,
})
Config-Driven Pages
Define pages as Page domain objects for YAML-driven configuration:
from tiferet_streamlit import Page, StreamlitApp
pages = [
Page(route='/', title='Home', icon='🏠',
view_module_path='app.views.home', view_class_name='HomeView'),
Page(route='/about', title='About', icon='ℹ️',
view_module_path='app.views.about', view_class_name='AboutView'),
]
StreamlitApp('my_interface', page_configs=pages)
Feature Dispatch
Views dispatch Tiferet features for backend logic:
class CalcView(ViewContext):
def render(self):
a = st.number_input('a')
b = st.number_input('b')
if st.button('Add'):
result = self.dispatch('calc.add', a=a, b=b)
st.write(f'Result: {result}')
API Reference
| Export | Module | Description |
|---|---|---|
build_streamlit_app |
blueprints.streamlit |
Primary entry point blueprint function |
StreamlitApp |
blueprints |
Alias for build_streamlit_app |
Page |
domain.view |
Page configuration domain object |
ViewService |
interfaces.view |
Abstract service for page management |
SessionCacheContext |
contexts.session |
Session-state-backed cache with namespacing |
ViewContext |
contexts.view |
Page code-behind with lifecycle management |
ViewComponent |
contexts.view |
Prop-driven sub-component |
PageContext |
contexts.page |
Multi-page navigation manager |
Development
# Clone and set up
git clone https://github.com/greatstrength/tiferet-streamlit.git
cd tiferet-streamlit
python -m venv .venv
source .venv/bin/activate
pip install -e .[test]
# Run tests
pytest --verbose
License
MIT
Release files for tiferet-streamlit 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tiferet_streamlit-1.0.0.tar.gz | 33.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tiferet_streamlit-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 76.4 kB
Release files / tiferet_streamlit-1.0.0.tar.gz
| Download URL | tiferet_streamlit-1.0.0.tar.gz |
|---|---|
| Size | 33.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b65f0a36d8d4a70827217c248690c4a8e1b667ab9f7afa1971964210187567d4
|
|
BLAKE2b-256 checksum How to use checksums |
9fdef2661ac8aa9cd0ba65579a6520bb73ea2179f19fb7ac8f73c9233629ff4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / tiferet_streamlit-1.0.0-py3-none-any.whl
| Download URL | tiferet_streamlit-1.0.0-py3-none-any.whl |
|---|---|
| Size | 43.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ebfbffe6ec19d89f71b2db70b048a3e968ec26970408df28c481718fc5bf4da0
|
|
BLAKE2b-256 checksum How to use checksums |
b3ed09e12ee100b9ccc9e192cae5ae0a71eb62537192c0820206dcc135225d04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log