Le Play Store du Terminal — une TUI immersive style Google Play pour découvrir, télécharger, installer et publier des applications en ligne de commande.
_____ ___ ___ ____ _____ _ ____ ____
/ ____| _|| || _ \| ___| / \ | _ \| _ \
\___ \ | |_| || |_) | _| / _ \| |_) | |_) |
___) || _| || _ <| |___/ ___ \ __/| __/
|____/ |_| \___||_| \_\|____/_/ \_\_| |_|
✦ Le Play Store du Terminal ✦
Backend public : https://storeapp-7mbo.onrender.com
Python requis : 3.9+
OS : Linux · macOS · Windows (WSL recommandé)
git clone https://github.com/gopu-inc/store-app.git
cd store-app
bash install.shOptions disponibles :
| Flag | Effet |
|---|---|
| (aucun) | Installe uniquement le client TUI |
--dev |
Client + dépendances serveur (développement local) |
--server |
Dépendances serveur uniquement |
--uninstall |
Supprime l'installation complète |
# 1. Cloner
git clone https://github.com/gopu-inc/store-app.git
cd store-app
# 2. Dépendances
pip install textual>=0.50.0 rich>=13.0.0 httpx>=0.27.0
# 3. (Optionnel) Installer le package
pip install -e .pip install storeapp-tui# Via l'entry-point installé
store
# Directement depuis le dépôt
cd store && python store.py
# Avec un serveur personnalisé
STOREAPP_API_URL=http://localhost:8000 store| Zone | Description |
|---|---|
| Top bar | Logo + barre de recherche intégrée + nom d'utilisateur connecté |
| Catégories | Chips scrollables : Tout / Python / Node / Go / Rust / Bash… |
| Carousel "En vedette" | 6 cartes riches (icône env, auteur, note ★, téléchargements) — cliquables |
| Liste Applications | DataTable avec icônes d'environnement, notes colorées, highlight de recherche |
| Barre de nav | Accueil · Parcourir · Publier · Profil |
| Fonctionnalité | Détail |
|---|---|
| Live search | Recherche dès 2 caractères tapés, sans appuyer Entrée |
| Highlight | Correspondances surlignées dans le nom et la description |
| Filtres Env | Chips : Tout / Python / Node / Go / Rust… |
| Tri | Pertinence · Note ↓ · Téléchargements ↓ · Récent |
| Statut serveur | Indicateur ● vert/rouge (ping Render en temps réel) |
| Onglet | Contenu |
|---|---|
| 📋 Informations | Nom, bundle, version, auteur, description, dépendances, permissions |
| 📖 README | Rendu Markdown du README de l'application |
| 📸 Médias | Icône pixel art (.pxl) + carousel de screenshots |
| ⭐ Avis | Liste des notes et commentaires utilisateurs |
Le bouton ⚙ Installer :
- Télécharge le
.tpkgdans~/.storeapp/downloads/ - Extrait l'archive dans
~/.storeapp/tmp_store/<bundle>/ - Détecte et exécute
postinstall.shautomatiquement - Affiche la progression et les logs en temps réel
| Écran | Description |
|---|---|
| Login | ASCII art banner · Connexion + Inscription · Session persistante |
| Publier | Upload .tpkg avec validation en temps réel |
| Touche | Action |
|---|---|
Ctrl+H |
Accueil |
Ctrl+B |
Parcourir |
Ctrl+P |
Publier |
Ctrl+Q |
Quitter |
Escape |
Retour / Fermer dialog |
1 – 5 |
Sélectionner une note (dialog de notation) |
F5 |
Rafraîchir l'écran courant |
Tab / Shift+Tab |
Naviguer entre les champs |
store-app/
├── install.sh # Script d'installation universel
├── setup.py # Package Python (pip install -e .)
├── MANIFEST.in # Fichiers inclus dans la distribution
├── server.py # Backend FastAPI (Render)
├── manifest.txml # Manifest du projet
│
└── store/ # Client TUI
├── store.py # Point d'entrée (python store.py)
├── app.py # StoreApp — routage, bindings globaux
├── api.py # Client httpx → API Render
├── config.py # Config + persistance session (~/.storeapp/)
│
├── screens/
│ ├── login.py # Login/signup avec ASCII art
│ ├── home.py # Accueil Play Store (carousel, catégories)
│ ├── browse.py # Recherche live + filtres avancés
│ ├── detail.py # Détail tabbé + installation + médias
│ └── publish.py # Publication .tpkg
│
├── widgets/
│ ├── pixel_art.py # PixelArtWidget — rendu .pxl (blocs colorés)
│ ├── rating_dialog.py # Modal notation 1–5 ★
│ └── comment_dialog.py # Modal commentaire texte libre
│
├── styles/
│ └── app.tcss # Thème cyberpunk dark complet (730+ lignes)
│
└── agent/ # Outils développeur
├── builder.py # Construction du .tpkg
├── commands.py # Commandes CLI (init/build/publish)
└── metadata.py # Gestion du manifest.txml
Utilisateur
│
▼
StoreApp (app.py) ← bindings clavier, routage screens
│
├── StoreAPI (api.py) ← httpx → https://storeapp-7mbo.onrender.com
│ │
│ └── /apps · /search · /featured · /download · /rate · /comment
│
└── Screens ← workers thread (jamais de freeze UI)
Les icônes et screenshots sont stockés côté serveur en PNG et convertis à la volée en .pxl (texte brut) par l'API.
Format hex (par défaut) :
#1a1b1e #58a6ff #58a6ff #1a1b1e
#58a6ff #ffffff #ffffff #58a6ff
#1a1b1e #58a6ff #58a6ff #1a1b1e
Format palette :
PALETTE
B=#1a1b1e W=#ffffff A=#58a6ff .=transparent
PIXELS
B A A B
A W W A
B A A B
Rendu dans le terminal : blocs colorés █ via Rich.
Les applications publiées sur le store sont des archives .tar.gz renommées .tpkg.
Structure attendue :
monapp.tpkg/
├── manifest.txml # Obligatoire
├── README.md # Recommandé
├── postinstall.sh # Exécuté automatiquement à l'installation
├── icon.png # 200×200 px (optionnel)
└── screenshots/ # Max 5 PNG (optionnel)
├── 01.png
└── 02.png
manifest.txml minimal :
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<name>Mon Application</name>
<bundle>com.auteur.monapp</bundle>
<version>1.0.0</version>
<author>Auteur</author>
<description>Description courte</description>
<environnement>python</environnement>
<entrypoint>main.py</entrypoint>
</manifest># Initialiser un nouveau projet
agent init
# Construire le .tpkg
agent build
# Publier sur le store (connexion requise)
agent publishLe serveur server.py est déployé sur Render à l'adresse https://storeapp-7mbo.onrender.com.
# Dépendances serveur
pip install fastapi uvicorn[standard] python-jose[cryptography] pillow python-multipart httpx
# Variables d'environnement requises
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxx # Token GitHub (stockage des .tpkg)
export GITHUB_REPO=owner/repo # Dépôt de stockage
export SECRET_KEY=changeme # Clé JWT (optionnel, défaut généré)
# Lancement
python server.py
# → http://localhost:8000| Méthode | Route | Description |
|---|---|---|
GET |
/apps |
Liste toutes les applications |
GET |
/apps/{bundle} |
Détail d'une application |
GET |
/apps/{bundle}/icon |
Icône .pxl 16×8 |
GET |
/apps/{bundle}/screenshots |
Screenshots .pxl 40×14 |
GET |
/search?q=… |
Recherche full-text |
GET |
/featured |
Applications en vedette |
GET |
/download/{bundle} |
Téléchargement .tpkg |
POST |
/signup |
Création de compte |
POST |
/login |
Connexion (JWT) |
POST |
/publish |
Publication .tpkg |
POST |
/rate/{bundle} |
Note + commentaire |
~/.storeapp/
├── session.json # Token JWT + nom d'utilisateur
├── downloads/ # .tpkg téléchargés
├── apps/ # Applications installées
└── tmp_store/ # Extraction temporaire à l'installation
| Paquet | Version min | Rôle |
|---|---|---|
textual |
0.50.0 | Framework TUI |
rich |
13.0.0 | Rendu texte coloré |
httpx |
0.27.0 | Client HTTP async-compatible |
fastapi |
(serveur) | API REST |
uvicorn |
(serveur) | Serveur ASGI |
pillow |
(serveur) | Conversion PNG → .pxl |
python-jose |
(serveur) | JWT |
- Forkez le dépôt
- Créez une branche :
git checkout -b feat/ma-fonctionnalite - Committez :
git commit -m "feat: description" - Pushez :
git push origin feat/ma-fonctionnalite - Ouvrez une Pull Request
MIT — voir LICENSE