Версия: 1.0
Дата создания: 2025-11-10
Статус: Production ready
Источник: https://streamlit.io, https://docs.streamlit.io
✅ Streamlit Framework — 100% бесплатный, open-source (Apache 2.0 лицензия)
✅ Все встроенные компоненты API — без ограничений
✅ Неограниченное количество приложений локально
✅ Создание custom компонентов — бесплатно
✅ Community компоненты — 90%+ бесплатные (open-source)
✅ Streamlit Community Cloud — бесплатный хостинг публичных приложений
❌ Streamlit Enterprise (через Snowflake) — для корпоративного развёртывания
❌ Private apps на Community Cloud — требуют аккаунт с доступом
❌ Некоторые premium community компоненты — редкость, обычно все бесплатные
Все встроенные компоненты Streamlit API бесплатны и доступны после установки:
pip install streamlit
st.title("Заголовок приложения") # H1
st.header("Раздел") # H2
st.subheader("Подраздел") # H3
st.markdown("**Жирный** текст с *курсивом*") # Markdown
st.caption("Маленький текст") # Подпись
st.text("Обычный текст") # Plain text
st.code("print('Hello')", language="python") # Код с подсветкой
st.latex(r"\int_0^\infty x^2 dx") # LaTeX формулы
st.divider() # Разделитель
st.badge("NEW", type="success") # Бэйджик
st.html("<p>Custom HTML</p>") # Кастомный HTML
import pandas as pd
df = pd.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6]})
st.dataframe(df) # Интерактивная таблица
st.data_editor(df) # Редактируемая таблица
st.table(df) # Статичная таблица
st.metric("Revenue", "$1,234", "+12%") # Метрики с дельтой
st.json({"key": "value"}) # JSON просмотр
# Простые встроенные графики
st.line_chart(df) # Линейный график
st.area_chart(df) # Area chart
st.bar_chart(df) # Столбчатая диаграмма
st.scatter_chart(df) # Scatter plot
st.map(df) # Карта (для lon/lat данных)
# Интеграции с библиотеками (бесплатно!)
import matplotlib.pyplot as plt
st.pyplot(fig) # Matplotlib
import plotly.express as px
st.plotly_chart(fig) # Plotly
import altair as alt
st.altair_chart(chart) # Altair/Vega-Lite
st.vega_lite_chart(df, spec) # Vega-Lite
st.bokeh_chart(fig) # Bokeh
st.pydeck_chart(deck) # PyDeck (3D карты)
st.graphviz_chart(graph) # Graphviz (графы)
st.image("image.jpg", caption="Картинка") # Изображения
st.logo("logo.png") # Логотип в sidebar
st.pdf("document.pdf") # PDF просмотр
st.audio("audio.mp3") # Аудио плеер
st.video("video.mp4") # Видео плеер
st.button("Нажми меня") # Обычная кнопка
st.link_button("Ссылка", "https://example.com") # Кнопка-ссылка
st.download_button("Скачать", data, "file.csv") # Скачивание файла
st.page_link("pages/page.py", label="Страница") # Навигация
st.checkbox("Согласен с условиями") # Checkbox
st.toggle("Включить фичу") # Toggle switch
st.radio("Выбор", ["Opt1", "Opt2", "Opt3"]) # Radio buttons
st.selectbox("Выберите", ["A", "B", "C"]) # Dropdown select
st.multiselect("Выберите", ["A", "B", "C"]) # Multi-select
st.pills("Категория", ["All", "New", "Popular"]) # Pills selector
st.segmented_control("View", ["Grid", "List"]) # Segmented control
st.slider("Значение", 0, 100, 50) # Слайдер
st.select_slider("Range", options=[1, 2, 3, 4]) # Select slider
st.number_input("Число", min_value=0, max_value=100) # Число
st.text_input("Имя", placeholder="Введите имя") # Текстовый input
st.text_area("Комментарий", height=200) # Многострочный текст
st.chat_input("Сообщение") # Chat input
from datetime import date, time
st.date_input("Дата", value=date.today()) # Календарь
st.time_input("Время", value=time(9, 0)) # Время
st.file_uploader("Загрузить файл", type=["csv", "xlsx"]) # Файл
st.camera_input("Сделать фото") # Камера
st.audio_input("Запись голоса") # Микрофон (NEW!)
st.color_picker("Цвет", "#00FF00") # Color picker
st.feedback("thumbs") # Лайк/дизлайк
# Колонки
col1, col2, col3 = st.columns(3)
with col1:
st.write("Колонка 1")
# Контейнеры
container = st.container()
with container:
st.write("Внутри контейнера")
# Sidebar
with st.sidebar:
st.write("Боковая панель")
# Tabs (вкладки)
tab1, tab2 = st.tabs(["Вкладка 1", "Вкладка 2"])
with tab1:
st.write("Содержимое 1")
# Expander (сворачиваемый блок)
with st.expander("Показать больше"):
st.write("Скрытое содержимое")
# Popover (всплывающее окно)
with st.popover("Открыть"):
st.write("Всплывающий контент")
# Dialog (модальное окно)
@st.dialog("Модальное окно")
def show_modal():
st.write("Содержимое модального окна")
# Пустой контейнер (для динамического обновления)
placeholder = st.empty()
placeholder.text("Обновлю позже")
# Пробел
st.space()
# Чат сообщение
with st.chat_message("user"):
st.write("Привет, как дела?")
with st.chat_message("assistant", avatar="🤖"):
st.write("Отлично! Чем могу помочь?")
# Chat input
prompt = st.chat_input("Напишите сообщение")
if prompt:
st.write(f"Вы написали: {prompt}")
# Прогресс
progress = st.progress(0)
for i in range(100):
progress.progress(i + 1)
# Spinner (загрузка)
with st.spinner("Загрузка..."):
time.sleep(3)
# Status container
with st.status("Обработка...", expanded=True):
st.write("Шаг 1")
time.sleep(1)
st.write("Шаг 2")
# Toast уведомления
st.toast("Успешно сохранено!", icon="✅")
# Сообщения
st.success("Операция выполнена успешно!")
st.info("ℹ️ Информация")
st.warning("⚠️ Предупреждение")
st.error("❌ Ошибка")
st.exception(RuntimeError("Детали ошибки"))
# Анимации
st.balloons() # Шарики
st.snow() # Снег
with st.form("my_form"):
name = st.text_input("Имя")
age = st.number_input("Возраст", min_value=0)
submitted = st.form_submit_button("Отправить")
if submitted:
st.write(f"Привет, {name}! Тебе {age} лет.")
# Multi-page navigation (NEW!)
pg = st.navigation([
st.Page("page1.py", title="Главная"),
st.Page("page2.py", title="Настройки"),
])
pg.run()
# Переключение страниц
if st.button("Перейти на другую страницу"):
st.switch_page("pages/other_page.py")
# Ссылка на страницу
st.page_link("pages/settings.py", label="⚙️ Настройки")
# Встроенная авторизация
st.login(
title="Вход",
providers=["google", "github"],
)
# Проверка авторизации
if st.user.email:
st.write(f"Привет, {st.user.email}")
if st.button("Выйти"):
st.logout()
# Session State (сохранение между reruns)
if "counter" not in st.session_state:
st.session_state.counter = 0
st.session_state.counter += 1
st.write(f"Счётчик: {st.session_state.counter}")
# Cache data (кэширование результатов)
@st.cache_data
def load_data():
return pd.read_csv("large_file.csv")
# Cache resource (кэширование соединений)
@st.cache_resource
def get_database_connection():
return pymysql.connect(...)
# Query params (URL параметры)
st.query_params["page"] = "home"
page = st.query_params.get("page", "home")
# Бесплатные коннекторы
conn = st.connection("my_database", type="sql")
df = conn.query("SELECT * FROM users")
# Поддерживаемые типы (все бесплатно):
# - sql (PostgreSQL, MySQL, SQLite, etc.)
# - snowflake
# - gsheets (Google Sheets)
# - Custom connections
# Конфигурация страницы (вызывать первым!)
st.set_page_config(
page_title="Мое приложение",
page_icon="🎨",
layout="wide", # или "centered"
initial_sidebar_state="expanded"
)
# Secrets (секреты)
api_key = st.secrets["api_key"]
db_password = st.secrets["database"]["password"]
# Опции
st.set_option("deprecation.showPyplotGlobalUse", False)
value = st.get_option("server.port")
# Rerun приложения
if st.button("Обновить"):
st.rerun()
# Остановить выполнение
if not st.session_state.get("authenticated"):
st.error("Авторизуйтесь!")
st.stop()
# Fragment (изолированный rerun) — NEW!
@st.fragment
def update_chart():
st.line_chart(get_realtime_data())
Тысячи бесплатных компонентов от сообщества: https://streamlit.io/components
Интерактивная визуализация данных (аналог Tableau)
pip install pygwalker
Готовая система авторизации
pip install streamlit-authenticator
Продвинутые таблицы с фильтрами, сортировкой, экспортом
pip install streamlit-aggrid
Видео/аудио стримы, конференции
pip install streamlit-webrtc
Красивое боковое меню
pip install streamlit-option-menu
Коллекция полезных виджетов
pip install streamlit-extras
Оптимизация больших графиков
pip install plotly-resampler
Интерактивные карты (Leaflet)
pip install streamlit-folium
Анимации Lottie
pip install streamlit-lottie
MUI components для Streamlit
pip install streamlit-elements
| Категория | Примеры компонентов |
|---|---|
| LLMs | streamlit-chat, langchain-streamlit |
| Widgets | streamlit-toggle-switch, streamlit-card |
| Charts | pygwalker, echarts, vega |
| Authentication | streamlit-authenticator, streamlit-login |
| Tables | streamlit-aggrid, pandas-profiling |
| Maps | streamlit-folium, pydeck |
| Audio | streamlit-audiorecorder, audio-recorder |
| Video | streamlit-webrtc, streamlit-player |
| Images | streamlit-image-comparison, annotated-images |
| Code Editors | streamlit-ace, streamlit-code-editor |
| Developer Tools | streamlit-profiler, streamlit-debug |
Почти все компоненты — бесплатные и open-source!
URL: https://streamlit.io/cloud
Что бесплатно:
- ✅ Хостинг публичных приложений
- ✅ Неограниченное количество приложений
- ✅ GitHub интеграция
- ✅ Автодеплой при push
- ✅ SSL сертификаты
- ✅ Secrets management
- ✅ Logs и monitoring
Лимиты бесплатного тарифа:
| Параметр | Лимит |
|---|---|
| CPU | До 2 ядер |
| RAM | До 2.7 GB |
| Storage | 50 GB |
| Одновременных пользователей | Не ограничено, но производительность зависит от RAM |
| Deployment updates | Макс 5 в минуту |
| Timeout сессии | Ограничено (для long-running процессов) |
Требования:
- ✅ Публичный GitHub репозиторий (или приватный с OAuth)
- ✅ requirements.txt с зависимостями
- ✅ Python приложение на Streamlit
Деплой:
1. Запушить код на GitHub
2. Зайти на https://share.streamlit.io
3. Подключить репозиторий
4. Выбрать главный файл (app.py)
5. Deploy! 🚀
Enterprise features:
- Single Sign-On (SSO)
- SAML authentication
- Custom domains на Community Cloud
- VPC deployment
- SLA гарантии
Resource limits:
- Приложения > 2.7 GB RAM будут throttled
- Long-running процессы могут timeout'иться
- Большие файлы (>1GB) требуют external storage
Private hosting:
- Community Cloud требует публичный GitHub repo
- Для приватного хостинга нужен свой сервер
✅ Свой сервер:
# Бесплатно деплоить на своем VPS/AWS/GCP
streamlit run app.py --server.port=8501
✅ External databases:
# Использовать бесплатные БД (Supabase, PostgreSQL, MongoDB Atlas)
conn = st.connection("postgresql", type="sql")
✅ Caching:
# Кэшировать тяжелые операции
@st.cache_data(ttl=3600)
def load_large_data():
return pd.read_csv("https://...")
✅ Lazy loading:
# Загружать данные по запросу, а не при старте
if st.button("Загрузить данные"):
data = load_heavy_data()
99% задач решаются встроенными компонентами.
Не ищите external компонент для:
- Таблиц → st.dataframe(), st.data_editor()
- Графиков → st.line_chart(), st.plotly_chart()
- Форм → st.form()
- Аутентификации → st.login() (v1.51+)
Добавляйте external компоненты только если:
- Встроенных недостаточно
- Компонент популярен (500+ stars на GitHub)
- Активно поддерживается (commits < 6 месяцев назад)
- Документация понятная
# ✅ Хорошо
@st.cache_data
def load_data():
return pd.read_csv("data.csv")
# ❌ Плохо (каждый раз читает файл)
df = pd.read_csv("large_file.csv")
import psutil
# Проверить использование памяти
memory = psutil.virtual_memory()
st.sidebar.metric("RAM", f"{memory.percent}%")
# .streamlit/secrets.toml (не коммитить!)
[database]
host = "localhost"
password = "secret123"
[api]
openai_key = "sk-..."
# app.py
db_password = st.secrets["database"]["password"]
api_key = st.secrets["api"]["openai_key"]
❌ Streamlit Enterprise — корпоративная версия через Snowflake
❌ Private deployments на Community Cloud
Для 99% разработчиков Streamlit полностью бесплатен!
Версия: 1.0
Дата: 2025-11-10
Автор: Claude Code
Лицензия: Apache 2.0 (Streamlit framework)