4. Le rendre visible
À ce stade, votre module fonctionne. Les tables existent, l’API répond, les écrans sont déclarés.
Et il est invisible.
Ouvrez le lanceur d’applications : library n’y est pas. Aucune erreur, aucun message, aucun
journal. Le module fonctionne parfaitement et personne ne peut y accéder.
Pourquoi
Chaque installation décide quels modules elle active. Ce n’est pas une question de code : le registre est global au processus, l’activation est un filtre de visibilité par installation.
Un module qui n’a pas été activé n’apparaît ni dans le lanceur, ni dans les menus, et ses écrans répondent 404 pour cette installation. Ses tables, elles, existent toujours.
Activer votre module
Depuis l’interface : Paramètres → Modules, puis activez Library.
En ligne de commande, pendant le développement :
from sqlalchemy import create_enginefrom kewos.tenant_modules import set_module_active, list_module_states
engine = create_engine(DATABASE_URL)with engine.begin() as connection: set_module_active(connection, module="library", active=True)
print(list_module_states(engine))# {'core': True, 'pipeline': True, 'support': True, 'audit': True, 'library': True}Rechargez le lanceur :

Library est là, rangé dans le rayon déclaré par category dans le manifeste.
L’icône
Sur la capture, Library s’affiche avec ses initiales « LI » : c’est ce que fait le lanceur
quand le module n’a pas d’icône.
Ajoutez icon.svg à la racine du module. Un tracé simple, monochrome, qui hérite de la couleur
courante :
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 7h18M6 7v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V7M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/></svg>Vérifier que vous n’avez rien oublié
| Symptôme | Cause |
|---|---|
| Le module n’est pas dans le lanceur | Il n’est pas activé pour cette installation. |
| Il y est mais sans écran | Aucune vue déclarée, ou le dossier views/ n’est pas chargé par register(). |
| Il y est, avec des écrans, mais vides | Une question de droits : voir Les droits. |
| Il affiche ses initiales | Pas d’icon.svg. |
| Il est classé « Autres » | Pas de category dans le manifeste. |