Aller au contenu principal

Présentation du framework

Liberty Next repose sur six fichiers de configuration placés sous config/. Chacun décrit une couche de la plateforme ; ensemble, ils définissent une application complète.

CoucheFichierContenu
Poolsconnectors.toml ([pools.*])Connexions aux bases de données — URL, dialecte, password / schemas / max_rows optionnels.
Connecteursconnectors.toml ([connectors.*])Connecteurs SQL (requêtes nommées) et connecteurs API (endpoints nommés).
Dictionnairedictionary.tomlMétadonnées par colonne : libellés, formats, règles BOOLEAN / ENUM / LOOKUP.
Écransscreens.tomlUn écran par objet métier : la requête de lecture, les requêtes optionnelles d'écriture, les onglets et les champs du dialogue.
Tableaux de borddashboards.tomlGraphiques, indicateurs et mises en page groupées au-dessus des mêmes requêtes nommées.
Menusmenus.tomlL'arborescence latérale — dossiers, items, permissions.

Tous sont rechargeables à chaud. POST /admin/reload reconstruit le registre ; les requêtes en cours conservent la version qu'elles utilisent au moment de leur exécution.


Vue d'ensemble

CONFIGURATION · TOMLconnectors.tomlpools + connecteursdictionary.tomlscreens.tomldashboards.tomlmenus.tomlauth.toml · app.tomlPOST /admin/reloadrechargement à chaud⚙ CŒUR LIBERTY NEXTRegistre de poolsengines async · décodage des ENC:Registre de connecteursconnecteurs SQL et APIcontrôle d'écriture · liaison de paramètresDictionnairelibellés · formats · règles · i18nÉcranslecture · modification · ajout · suppressionTableaux de bord · menusgraphiques · indicateurs · arborescenceAuthentificationTOML ou base · JWT · OIDC⚛️ INTERFACE REACT📋 Grille de table📊 Tableau de bord⚙ Éditeurs de configuration🌐 Lanceur HTTP💬 Assistant IA🗂 Workspace · barre latéralei18n EN / FRlibellés issus du dictionnairelocalisés à chaque requêteUne clé de licence active les connecteurs marqués licensed = true (Nomasx-1 · Nomajde). Le framework fonctionne sans clé — les connecteurs concernés ne sont simplement pas chargés.

Les couches

Pools

Un pool correspond à un moteur SQLAlchemy asynchrone — postgresql+asyncpg://…, oracle+oracledb://…, sqlite+aiosqlite://…. Déclaré sous [pools.<nom>] dans connectors.toml :

[pools.myapp]
url = "postgresql+asyncpg://myapp@db:5432/myapp"
password = "ENC:…" # valeur chiffrée, référence ${ENV} ou texte clair
pool_size = 10
max_rows = 5000 # plafond SELECT par défaut sur ce pool

[pools.myapp.schemas]
PROD = "myapp_prod" # `#SCHEMA.PROD#` dans une requête → `myapp_prod` à l'exécution

Le pool default est particulier : c'est le pool du framework lui-même, qui porte les tables d'authentification ly2_* quand [auth] backend = "db". Sur un checkout vierge, il pointe vers un fichier SQLite local pour que l'instance démarre sans base à configurer.

Connecteurs

Un connecteur définit comment Liberty Next atteint une source de données. Deux types existent :

  • Le connecteur SQL rassemble un ensemble de requêtes nommées qui s'exécutent sur un pool de base de données. Le schéma de chaque résultat est lu à l'exécution sur le curseur de la requête ; le dictionnaire ajoute les libellés et les règles d'affichage.
  • Le connecteur API rassemble un ensemble d'endpoints HTTP nommés. L'authentification, l'URL de base et la substitution de variables sont définies sur le connecteur.

Voir Connecteurs.

Dictionnaire

Le dictionnaire définit les métadonnées d'affichage par colonne : libellé (avec traductions par langue), format et règle. Chaque entrée fixe ces informations une seule fois ; tous les écrans qui retournent cette colonne en bénéficient automatiquement :

[entries.USER_STATUS]
label = "Status"
[entries.USER_STATUS.l]
fr = "Statut"

[enums.USER_STATUS]
values = [
{ value = "Y", label = "Active", l = { fr = "Actif" } },
{ value = "N", label = "Inactive", l = { fr = "Inactif" } },
]

Une indication column.dd = "USER_STATUS" sur la requête applique le libellé et la règle ENUM à la grille — la cellule affiche le libellé localisé, le filtre de colonne propose le picker multi-sélection, sans code supplémentaire. Voir Dictionnaire.

Écrans

Un écran est la définition d'un objet métier : la requête de lecture qui alimente la grille, les requêtes d'écriture optionnelles, et le formulaire modal intégré. Déclaré sous [screens.<app>.<id>] dans screens.toml :

[screens.myapp.users]
label = "Users"
read_query = "users_get"
update_query = "users_put"
audit = true
auto_load = true

[[screens.myapp.users.dialog.tabs]]
id = "main"
label = "General"
cols = 2
fields = [
{ column = "ID", hidden = true },
{ column = "NAME", required = true },
{ column = "STATUS", colspan = 2 },
]

Un clic sur une ligne ouvre un formulaire modal typé construit à partir de cette définition. Le widget de chaque champ est choisi selon la règle de la colonne (BOOLEAN → case à cocher, ENUM → liste déroulante recherchable, LOOKUP → liste déroulante restreinte par lookup_param_binds, plus les types date / nombre / texte selon format et type). Voir Écrans.

Tableaux de bord

Un tableau de bord est un agencement d'indicateurs et de graphiques au-dessus des mêmes requêtes nommées. Chaque panneau se rattache à une requête, choisit une agrégation et se présente sous un des types de graphiques standards. Voir Tableaux de bord.

L'arborescence latérale. Les dossiers se composent ; les feuilles renvoient vers une requête (grille de table), un tableau de bord, un endpoint HTTP ou un slug statique. L'arborescence est filtrée selon les droits de l'utilisateur — une feuille à laquelle l'utilisateur ne peut pas accéder (sql:{conn}:{name} / api:{conn}:{name}) est masquée, et un dossier devenu vide disparaît à son tour. Voir Menus.


Authentification

Deux backends, sélectionnés dans [auth] :

BackendStockage des utilisateursQuand l'utiliser
toml (défaut)config/auth.tomlPas de base de données requise au démarrage. Relu à chaque appel. Adapté aux petits déploiements et aux tests.
dbTables ly2_* du pool du frameworkGestion des utilisateurs via l'éditeur Settings → Users de l'interface React. Mots de passe hachés avec argon2.

Les jetons sont des JWT signés avec LIBERTY_JWT_SECRET (clé éphémère si la variable n'est pas définie). L'OIDC est branché via authlib et fonctionne avec n'importe quel fournisseur.

La liste permissions d'un rôle contrôle ce que l'utilisateur peut exécuter : sql:<connecteur>:<requête>, api:<connecteur>:<endpoint>, admin:*. Le même filtre s'applique à l'arborescence du menu — l'utilisateur ne voit jamais une feuille qu'il n'a pas le droit d'ouvrir.


Licence

Le framework est gratuit. Les connecteurs marqués licensed = true dans connectors.toml sont déverrouillés par la variable LIBERTY_LICENSE_KEY — un JWT signé RS256 produit par l'éditeur. Une clé configurée mais invalide (expirée ou signature incorrecte) fait apparaître un bandeau dans l'interface React ; l'absence totale de clé masque simplement les connecteurs concernés.

C'est ce mécanisme qui active Nomasx-1 et Nomajde, regroupés sous une clé unique.


Frontend en une phrase

React 19 + Vite + TypeScript, buildé une seule fois dans frontend/dist puis servi en statique par le backend. Thème sombre par défaut avec bascule en mode clair, internationalisation EN / FR via react-i18next, icônes lucide-react, police DM Sans, @tanstack/react-table pour la grille, react-markdown + remark-gfm pour les réponses de l'assistant, @monaco-editor/react pour l'éditeur TOML brut. Apparence « liquid-glass » identique à NomaUBL via les composants @emotion/styled thématisés.