Développer avec Streamlit
Ceci est une routing skill qui vous oriente vers des sous-skills spécialisées pour le développement Streamlit.
Quand l'utiliser
Invoquez cette skill quand la demande de l'utilisateur porte sur :
- Créer une nouvelle app Streamlit
- Éditer ou modifier une app Streamlit existante
- Déboguer des problèmes Streamlit (erreurs, bugs de session state, problèmes de performance)
- Embellir ou améliorer le design visuel d'une app Streamlit
- Optimiser les performances Streamlit (caching, fragments, reruns)
- Déployer des apps Streamlit (localement ou sur Snowflake)
- Styliser les widgets (couleurs de bouton, arrière-plans, personnalisation CSS)
- Toute question sur les widgets, layouts ou composants Streamlit
Phrases déclencheurs : « streamlit », « st. », « dashboard », « app.py », « embellir app », « la rendre meilleure », « style », « CSS », « couleur », « arrière-plan », « thème », « bouton », « rerun lent », « session state », « performance », « plus rapide », « cache », « déployer »
Workflow
Étape 1 : Localiser le code source Streamlit
↓
Étape 2 : Identifier le type de tâche et charger la ou les sous-skill(s) appropriée(s)
↓
Étape 3 : Appliquer les conseils de la sous-skill pour éditer le code
↓
Étape 4 : Vérifier si l'app s'exécute et proposer de la lancer
Étape 1 : Localiser le code source Streamlit (si nécessaire)
Objectif : Identifier le(s) fichier(s) app à éditer. Ignorez cette étape si c'est déjà clair à partir du contexte.
Quand ignorer :
- L'utilisateur a mentionné un chemin de fichier spécifique (ex. « édite
src/app.py») - Le(s) fichier(s) est/sont déjà dans le contexte de la conversation
- Le répertoire de travail a un point d'entrée unique évident (
app.py,streamlit_app.py)
Quand faire une recherche :
- L'utilisateur dit « ma streamlit app » sans spécifier quel fichier
- Plusieurs fichiers Python existent et il n'est pas clair quel est le point d'entrée
Si une recherche est nécessaire :
-
Scan rapide des fichiers Streamlit :
find . -name "*.py" -type f | xargs grep -l "import streamlit\|from streamlit" 2>/dev/null | head -10 -
Appliquer les heuristiques du point d'entrée (par ordre de priorité) :
streamlit_app.pyà la racine → c'est le point d'entrée (nom canonique)app.pyà la racine → probable point d'entrée- Fichier utilisant
st.navigation→ point d'entrée pour les apps multi-pages - Fichier
.pyunique à la racine avec import streamlit → point d'entrée - Fichiers dans
pages/ouapp_pages/→ PAS des points d'entrée (ce sont des sous-pages)
-
Si le point d'entrée est évident → l'utiliser, pas de confirmation nécessaire
Exemple : Trouvé
streamlit_app.pyetpages/metrics.py→ utiliserstreamlit_app.py -
Demander seulement s'il y a véritable ambiguïté (ex. plusieurs candidats à la racine, aucun nommé
streamlit_app.py) :Trouvé plusieurs points d'entrée potentiels : - dashboard.py - main.py Quel est votre app principale ?
Sortie : Chemin vers le(s) fichier(s) source Streamlit principal(aux)
Étape 2 : Identifier le type de tâche et router vers la sous-skill
Objectif : Déterminer ce dont l'utilisateur a besoin et charger les conseils appropriés.
Utilisez ce tableau de routage pour sélectionner la ou les sous-skill(s). Toujours lire le fichier de la sous-skill avant de faire des modifications :
| Besoin de l'utilisateur | Sous-skill à lire |
|---|---|
| Problèmes de performance, apps lentes, caching | read skills/optimizing-streamlit-performance/SKILL.md |
| Construire un dashboard avec KPIs/métriques | read skills/building-streamlit-dashboards/SKILL.md |
| Améliorer le design visuel, icônes, polish | read skills/improving-streamlit-design/SKILL.md |
| Choisir des widgets (selectbox vs radio vs pills) | read skills/choosing-streamlit-selection-widgets/SKILL.md |
| Styliser les widgets (couleurs de bouton, arrière-plans, CSS) | read skills/creating-streamlit-themes/SKILL.md |
| Layouts (colonnes, onglets, sidebar, conteneurs) | read skills/using-streamlit-layouts/SKILL.md |
| Afficher les données (dataframes, graphiques) | read skills/displaying-streamlit-data/SKILL.md |
| Architecture d'app multi-pages | read skills/building-streamlit-multipage-apps/SKILL.md |
| Session state et callbacks | read skills/using-streamlit-session-state/SKILL.md |
| Markdown, texte coloré, badges | read skills/using-streamlit-markdown/SKILL.md |
| Thèmes personnalisés et couleurs | read skills/creating-streamlit-themes/SKILL.md |
| Design de thème complet et alignement de marque | read skills/creating-streamlit-themes/SKILL.md |
| Interfaces chat et assistants IA | read skills/building-streamlit-chat-ui/SKILL.md |
| Connexion à Snowflake | read skills/connecting-streamlit-to-snowflake/SKILL.md |
| Construire ou packager un composant personnalisé, déclencher des événements vers Python depuis JS/HTML, HTML/JS personnalisé avec gestion des événements (CCv2), OU tout élément UI qui n'existe pas comme widget Streamlit natif (ex. drag-and-drop, visualisation interactive personnalisée, dessin sur canvas) | read skills/building-streamlit-custom-components-v2/SKILL.md — IMPORTANT : st.components.v1 est deprecated. Ne jamais utiliser v1 pour les nouveaux composants ; toujours utiliser st.components.v2.component(). |
| Composants tiers | read skills/using-streamlit-custom-components/SKILL.md |
| Organisation du code | read skills/organizing-streamlit-code/SKILL.md |
| Configuration de l'environnement | read skills/setting-up-streamlit-environment/SKILL.md |
| Commandes CLI | read skills/using-streamlit-cli/SKILL.md |
Fallback — « ce widget n'existe pas dans Streamlit » :
Si l'utilisateur demande un élément UI ou une interaction qui n'a jamais fait partie de l'API Streamlit et ne peut pas être construit avec une combinaison de widgets natifs (ex. drag-and-drop, dessin sur canvas, visualisations interactives personnalisées), router vers la sous-skill CCv2 (skills/building-streamlit-custom-components-v2/SKILL.md). Ne pas router vers CCv2 pour des fonctionnalités qui existent dans les versions Streamlit plus récentes (ex. st.connection, st.segmented_control) — suggérer plutôt une mise à jour.
Combinaisons courantes :
Pour embellir/améliorer une app, lire dans cet ordre :
skills/improving-streamlit-design/SKILL.mdskills/using-streamlit-layouts/SKILL.mdskills/choosing-streamlit-selection-widgets/SKILL.md
Pour construire un dashboard, lire :
skills/building-streamlit-dashboards/SKILL.mdskills/displaying-streamlit-data/SKILL.md
IMPORTANT - Utiliser les templates :
Quand vous créez une nouvelle app dashboard, préférez démarrer à partir d'un template dans templates/apps/ :
- Si un template correspond étroitement à la demande, le copier et l'adapter :
dashboard-metrics/dashboard-metrics-snowflake— cartes KPI avec graphiques en série temporelledashboard-companies— comparaison d'entreprises/entitésdashboard-compute/dashboard-compute-snowflake— monitoring de ressources/créditsdashboard-feature-usage— suivi d'adoption de fonctionnalitésdashboard-seattle-weather— exploration de datasets publics (local seulement)dashboard-stock-peers/dashboard-stock-peers-snowflake— analyse de pairs financiers
- Si aucun template ne correspond étroitement, démarrer de zéro mais emprunter les patterns pertinents des templates (ex. caching avec
@st.cache_data,filter_by_time_range(),st.set_page_config(), utilitaires de graphiques, structure de layout) - Voir
templates/apps/README.mdpour les descriptions des templates
Quand vous éditez une app existante, utilisez les templates comme référence pour les bonnes pratiques :
- Vérifier
templates/apps/pour les patterns de caching, structure de layout et intégration Snowflake - Appliquer les patterns consistants des templates pour améliorer le code existant
Quand vous appliquez un thème personnalisé, utiliser un template de templates/themes/ :
- Copier un répertoire de thème (snowflake, dracula, nord, stripe, solarized-light, spotify, github, minimal)
- Les thèmes utilisent Google Fonts pour une configuration facile
- Voir
templates/themes/README.mdpour les aperçus des thèmes
Pour l'optimisation des performances, lire :
skills/optimizing-streamlit-performance/SKILL.md
Étape 3 : Appliquer les conseils pour éditer le code
Objectif : Faire des modifications à l'app Streamlit en suivant les bonnes pratiques de la sous-skill.
Actions :
- Appliquer les patterns et recommandations de la ou des sous-skill(s) chargée(s)
- Faire des éditions au(x) fichier(s) source identifié(s) à l'étape 1
- Préserver les fonctionnalités existantes tout en ajoutant des améliorations
Étape 4 : Vérifier les apps en cours d'exécution et proposer de lancer
Objectif : Aider l'utilisateur à voir ses modifications en vérifiant si son app s'exécute.
Actions :
-
Vérifier les apps Streamlit en cours d'exécution sur les ports 850* :
lsof -nP -iTCP -sTCP:LISTEN 2>/dev/null | grep -i python | awk '{print $2, $9}' | grep ':85' || echo "No Streamlit apps detected on ports 850*" -
Présenter les résultats à l'utilisateur :
Si l'app s'exécute :
Streamlit app trouvée en cours d'exécution : - PID: [pid] à http://localhost:[port] Vos modifications devraient être visibles après un rafraîchissement de la page (Streamlit recharge automatiquement à la sauvegarde du fichier).Si aucune app ne s'exécute :
Aucune app Streamlit détectée sur les ports 850*. Voulez-vous que je lance l'app ? Je peux la démarrer avec : streamlit run [app_file.py] -
Si l'utilisateur veut lancer l'app, la démarrer :
streamlit run [path/to/app.py] --server.port 8501
Points d'arrêt
- Étape 2 : Si plusieurs sous-skills semblent pertinentes, demander à l'utilisateur sur quel aspect se concentrer en premier
- Étape 4 : Demander avant de lancer l'app Streamlit
Carte des skills
| Skill | Couvre |
|---|---|
| building-streamlit-chat-ui | Interfaces chat, réponses en streaming, historique des messages |
| building-streamlit-dashboards | Cartes KPI, métriques, layouts de dashboard |
| building-streamlit-multipage-apps | Structure des pages, navigation, état partagé |
| building-streamlit-custom-components-v2 | Streamlit Custom Components v2 (inline et packagés template-based), state bidirectionnel/callbacks de déclenchement, bundling, variables CSS de thème |
| choosing-streamlit-selection-widgets | Selectbox vs radio vs segmented control vs pills vs multiselect |
| connecting-streamlit-to-snowflake | st.connection, caching de requêtes, credentials |
| creating-streamlit-themes | Configuration de thème, couleurs, polices, modes clair/sombre, alignement de marque professionnel, éviter CSS |
| displaying-streamlit-data | Dataframes, configuration de colonnes, graphiques |
| improving-streamlit-design | Icônes, badges, texte coloré, polish visuel |
| optimizing-streamlit-performance | Caching, fragments, formulaires, widgets statiques vs dynamiques |
| organizing-streamlit-code | Quand diviser en modules, séparer UI de la logique |
| setting-up-streamlit-environment | Environnement Python, gestion des dépendances |
| using-streamlit-custom-components | Composants tiers de la communauté |
| using-streamlit-cli | Commandes CLI, lancer des apps |
| using-streamlit-layouts | Sidebar, colonnes, conteneurs, onglets, expanders, dialogs, alignement, espacement |
| using-streamlit-markdown | Texte coloré, badges, icônes, LaTeX et toutes les fonctionnalités markdown |
| using-streamlit-session-state | Session state, clés de widgets, callbacks, persistance d'état |