Le manifeste (module.toml)
Le fichier module.toml à la racine décrit votre module au core : identité, processus, port, routes, entrées de barre latérale et événements.
Exemple complet #
[module]
id = "calendar" # alphanumérique + '-' + '_'
display_name = "Calendar"
version = "0.1.0"
description = "Calendriers, événements, CalDAV…"
author = "Kubuno Contributors"
license = "AGPL-3.0"
homepage_url = "https://github.com/kubuno/kubuno" # optionnel
runtime = "rust" # rust | python | node | binary
dependencies = [] # ids d'autres modules requis
internal = false # true : module d'infrastructure, masqué de l'administration
settings_path = "/calendar/settings" # optionnel
[process]
entrypoint = "kubuno-calendar" # nom de l'exécutable
args = []
[server]
host = "127.0.0.1"
port = 3102 # port dédié du module (le core est sur 8080)
[routes]
patterns = [
{ method = "*", path = "/*" },
]
[[sidebar_items]]
id = "calendar"
label = "Calendar"
icon = "Calendar" # nom d'icône Lucide
path = "/calendar"
position = 20 # ordre de tri
section = "main" # main | secondary
[events]
subscribed = ["UserDeleted", "ContactUpdated"]
publishes = ["EventCreated", "EventUpdated", "EventDeleted"]
# Réglages rendus par la console d'administration du core — donc cherchables,
# héritables et journalisés dans l'audit, ce qu'une page maison n'obtient pas.
[[setting_groups]]
id = "access"
label = "Accès et restrictions"
icon = "ShieldCheck"
position = 30
[[settings]]
key = "allow_downloads"
scope = "global" # global | overridable | user
group = "access"
type = "bool" # bool | int | string | enum
default = true
label = "Téléchargement des fichiers"
description = "Désactivé, la lecture reste entière ; seul le fichier d'origine est refusé."Les sections #
| Section | Rôle |
|---|---|
[module] | Identité : id, display_name, version, runtime, licence. |
[process] | Exécutable lancé par le superviseur du core (entrypoint + args). |
[server] | host et port sur lesquels le module écoute en local. |
[routes] | Motifs de routes que le core proxifiera vers le module. |
[[sidebar_items]] | Entrées de la barre latérale (icône Lucide, position, section). |
[events] | Événements subscribed (reçus) et publishes (émis). |
[[setting_groups]] | Regroupe les réglages en sections de la console d'administration (id, label, icône, position). |
[[settings]] | Réglages déclarés : scope (global, overridable par unité organisationnelle, ou user), type, valeur par défaut et libellés. |
Note
Déclarer un réglage plutôt que d'écrire votre propre page le rend cherchable dans la console, héritable par unité organisationnelle et traçable dans le journal d'audit — trois choses qu'une vue maison n'obtient pas.
Note
Le manifeste est aussi un garde-fou de compatibilité : la version est confrontée à celle attendue par le core, et côté frontend le module déclare son sdkVersion.