architect/_archive/2025-11-26-cleanup/templates/library/streamlit/FREE_COMPONENTS_GUIDE.md

Бесплатные компоненты Streamlit — Полное руководство

Версия: 1.0
Дата создания: 2025-11-10
Статус: Production ready
Источник: https://streamlit.io, https://docs.streamlit.io


📋 СОДЕРЖАНИЕ

  1. Что бесплатно в Streamlit
  2. Встроенные компоненты API
  3. Бесплатные community компоненты
  4. Streamlit Community Cloud (бесплатный хостинг)
  5. Ограничения бесплатного тарифа
  6. Рекомендации по использованию

✅ ЧТО БЕСПЛАТНО

Полностью бесплатное использование:

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 компоненты — редкость, обычно все бесплатные


🎨 ВСТРОЕННЫЕ КОМПОНЕНТЫ (100% бесплатно)

Все встроенные компоненты Streamlit API бесплатны и доступны после установки:

pip install streamlit

1. Display Elements

Text элементы

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

Data отображение

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 просмотр

Графики и Charts

# Простые встроенные графики
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 (графы)

Media элементы

st.image("image.jpg", caption="Картинка")          # Изображения
st.logo("logo.png")                                 # Логотип в sidebar
st.pdf("document.pdf")                              # PDF просмотр
st.audio("audio.mp3")                               # Аудио плеер
st.video("video.mp4")                               # Видео плеер

2. Input Widgets (все бесплатно!)

Кнопки

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")                               # Лайк/дизлайк

3. Layout & Containers

# Колонки
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()

4. Chat элементы

# Чат сообщение
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}")

5. Status элементы

# Прогресс
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()                                           # Снег

6. Формы

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} лет.")

7. Navigation & Pages

# 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="⚙️ Настройки")

8. Authentication (NEW! v1.51+)

# Встроенная авторизация
st.login(
    title="Вход",
    providers=["google", "github"],
)

# Проверка авторизации
if st.user.email:
    st.write(f"Привет, {st.user.email}")
    if st.button("Выйти"):
        st.logout()

9. State & Cache

# 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")

10. Connections (Database integrations)

# Бесплатные коннекторы
conn = st.connection("my_database", type="sql")
df = conn.query("SELECT * FROM users")

# Поддерживаемые типы (все бесплатно):
# - sql (PostgreSQL, MySQL, SQLite, etc.)
# - snowflake
# - gsheets (Google Sheets)
# - Custom connections

11. Configuration & Testing

# Конфигурация страницы (вызывать первым!)
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")

12. Execution Control

# 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())

🌟 COMMUNITY КОМПОНЕНТЫ (бесплатные!)

Тысячи бесплатных компонентов от сообщества: https://streamlit.io/components

Топ бесплатных компонентов:

1. Pygwalker (8,223 ⭐)

Интерактивная визуализация данных (аналог Tableau)

pip install pygwalker

2. Streamlit-Authenticator (919 ⭐)

Готовая система авторизации

pip install streamlit-authenticator

3. Streamlit-AgGrid (841 ⭐)

Продвинутые таблицы с фильтрами, сортировкой, экспортом

pip install streamlit-aggrid

4. Streamlit-WebRTC (1,022 ⭐)

Видео/аудио стримы, конференции

pip install streamlit-webrtc

5. Streamlit-Option-Menu (600+ ⭐)

Красивое боковое меню

pip install streamlit-option-menu

6. Streamlit-Extras

Коллекция полезных виджетов

pip install streamlit-extras

7. Plotly-Resampler

Оптимизация больших графиков

pip install plotly-resampler

8. Streamlit-Folium

Интерактивные карты (Leaflet)

pip install streamlit-folium

9. Streamlit-Lottie

Анимации Lottie

pip install streamlit-lottie

10. Streamlit-Elements

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!


☁️ БЕСПЛАТНЫЙ ХОСТИНГ

Streamlit Community Cloud

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! 🚀


⚠️ ОГРАНИЧЕНИЯ БЕСПЛАТНОГО ТАРИФА

Что НЕЛЬЗЯ сделать бесплатно:

  1. Enterprise features:
    - Single Sign-On (SSO)
    - SAML authentication
    - Custom domains на Community Cloud
    - VPC deployment
    - SLA гарантии

  2. Resource limits:
    - Приложения > 2.7 GB RAM будут throttled
    - Long-running процессы могут timeout'иться
    - Большие файлы (>1GB) требуют external storage

  3. Private hosting:
    - Community Cloud требует публичный GitHub repo
    - Для приватного хостинга нужен свой сервер

Работающие workarounds:

Свой сервер:

# Бесплатно деплоить на своем 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()

💡 РЕКОМЕНДАЦИИ

1. Используйте встроенные компоненты

99% задач решаются встроенными компонентами.

Не ищите external компонент для:
- Таблиц → st.dataframe(), st.data_editor()
- Графиков → st.line_chart(), st.plotly_chart()
- Форм → st.form()
- Аутентификации → st.login() (v1.51+)

2. Community компоненты — только при необходимости

Добавляйте external компоненты только если:
- Встроенных недостаточно
- Компонент популярен (500+ stars на GitHub)
- Активно поддерживается (commits < 6 месяцев назад)
- Документация понятная

3. Оптимизация для Community Cloud

# ✅ Хорошо
@st.cache_data
def load_data():
    return pd.read_csv("data.csv")

# ❌ Плохо (каждый раз читает файл)
df = pd.read_csv("large_file.csv")

4. Мониторинг ресурсов

import psutil

# Проверить использование памяти
memory = psutil.virtual_memory()
st.sidebar.metric("RAM", f"{memory.percent}%")

5. Используйте секреты

# .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"]

📚 ПОЛЕЗНЫЕ РЕСУРСЫ

Официальная документация:

Примеры:

Сообщество:


✅ ВЫВОДЫ

Что 100% бесплатно:

  1. Весь Streamlit framework (open-source)
  2. Все встроенные компоненты API (60+ виджетов)
  3. 90%+ community компонентов (тысячи бесплатных)
  4. Streamlit Community Cloud (публичный хостинг)
  5. Создание custom компонентов
  6. Локальная разработка (без ограничений)

Единственное платное:

Streamlit Enterprise — корпоративная версия через Snowflake
Private deployments на Community Cloud

Для 99% разработчиков Streamlit полностью бесплатен!


Версия: 1.0
Дата: 2025-11-10
Автор: Claude Code
Лицензия: Apache 2.0 (Streamlit framework)