Application desktop Windows, Linux et macOS · 0.1.0-beta.9

Windows vérifié ; paquets Linux et macOS construits mais non testés à l'exécution. Le texte décrit le code courant, qui peut être plus récent que la release publiée.

Des blocs qui sont de vrai code, pas des dessins qui y ressemblent

Sapphire 3 est un environnement de programmation visuelle. Chaque carte posée sur le canvas est une construction du langage : une fonction, une variable typée, une boucle, un appel. Elles forment un arbre syntaxique indépendant du langage cible, qu'un moteur analyse, type et vérifie avant toute génération. Le texte n'a jamais été supprimé : il a seulement cessé d'être le point de départ.

  • React 19
  • Vite 8
  • JavaScript / JSX
  • CSS natif
  • Neutralinojs
  • pnpm
  • AST indépendant des cibles
  • Typage statique strict
canvas · projet réel
Canvas actuel de Sapphire 3 avec les modules Library et App reliés par une flèche.
Deux modules, une dépendance réelleVoir la visite →
10étapes de documentation
10captures rapprochées
65exemples locaux
8langues d'interface

État du projet

Sans emphase

Ce qui fonctionne aujourd'hui

Canvas navigable, zoom sémantique et cartes Module, Class, notes et images. Les classes proposent des membres public/private, un constructeur, des instances avec new, this et des types de classe. Pas d'héritage ni de polymorphisme ; les classes sont transpilées en JavaScript et Python, et refusées par le C expérimental. Le langage couvre les fonctions et types déclarés à la racine d'un module, conditions, boucles, ForEach, affectations, appels, tableaux, typage statique strict, références de fonction, pointeurs avec adresse, déréférencement et écriture, génériques avancés (plusieurs paramètres T, U, tableaux génériques et contraintes exactes), lambdas et fermetures avec retours de type fonction, opérations natives SP3 (maths, texte et tableaux), formules KaTeX dans les notes et références intermodules avec flèches courbes. La simulation s'exécute hors du fil React : Run live par défaut, avec entrées appliquées entre deux frames et Pause/Stop, ou Run borné pour précalculer une trace finie. Le debug et la transpilation JavaScript/Python/C expérimental restent bornés, avec progression et annulation ; le debug ajoute points d'arrêt, mémoire abstraite et valeurs au survol. Run propose aussi une simulation graphique simplifiée. L'interface offre aussi les graphes de contrôle et de dépendances, les cartes Screen/Gauge/ProgressBar/BarChart/LED avec lecture synchronisée à 24 fps, XY plot (Mafs), oscilloscope multicanal (uPlot), les grilles Heatmap fixes suivies par pas sans horloge de lecture, les contrats vérifiables, le gestionnaire de fenêtres, le constructeur de signatures de fonction, les thèmes prédéfinis et personnalisés, huit langues, l'import/export .sp3/JSON, l'autosauvegarde, la récupération des documents neufs, trois sauvegardes de secours et un workspace version 3 : dossier choisi, workspace.sp3, images liées et export ZIP, avec migration des versions 1 et 2. Le mode exercice ajoute un manifeste dans le document : consignes, snapshot de départ, tests d'entrée ou de fonction exécutés par Check, retour du robot, verrou d'édition par mot de passe haché (PBKDF2) et enregistrement d'une solution ZIP lorsque tous les tests passent. Les thèmes ont une apparence sombre et claire commune. Le Plugin SDK local ajoute des widgets déclaratifs, des opérations natives typées et des nœuds composites de niveau A ; les cartes de widget affichent leur définition JSON et leurs liaisons deviennent des flèches de dépendance. Les entrées natives placent leur sélecteur de fonction dans un volet Configuration pliable. Une Discord Rich Presence optionnelle, via un sidecar local sans compte ni token, affiche l'activité courante, un chronomètre et deux boutons GitHub ; seuls des compteurs génériques sont publiés.

Ce qui ne l'est pas encore

Aucun lancement de simulation sans action explicite ; seule la lecture d'une séquence d'écran sans cycle peut relancer la simulation pour renouveler ses images. La cible C est expérimentale et volontairement restreinte aux primitives, booléens, chaînes, fonctions, contrôle, pointeurs, pointeurs de fonction nommés, lambdas sans capture et Print ; tableaux, classes, lambdas capturantes, ForEach, opérations natives et conversions y sont refusés. C++ et Java restent indisponibles. Le détail est sur la page Transpilation. Les classes fonctionnent sans héritage ni polymorphisme. Les lambdas ont un corps expression unique et ne sont pas génériques ; leurs paramètres ne sont pas adressés par &. Les sauvegardes de secours ne tournent que lors d'un enregistrement direct. Les mutations structurelles du document gardent une analyse synchrone, même si les calculs lourds explicites passent par un Web Worker. Le rendu de monnaie des exemples est glouton pour un jeu canonique, et l'exemple de calcul utilise une intégrale numérique de Simpson. Le mode exercice ne verrouille que l'interface : les tests restent lisibles et modifiables dans le JSON, et le mot de passe ne chiffre pas le fichier. Le Plugin SDK reste déclaratif : pas de composant React ou JavaScript tiers, pas de marketplace, pas de backend distant, pas de permissions fichiers/réseau/native, et les nœuds sémantiques de niveau B ne sont pas opérationnels.

Un document, pas une maquette

Les captures de ce site proviennent de l'application réelle, pilotée par ses propres dialogues, sans montage. Le projet illustré a été construit bloc par bloc dans l'interface, puis simulé.

Canvas actuel de Sapphire 3 avec les modules Library et App reliés par une flèche.
Aperçu. Deux modules dépendants, une note et la barre de statut de l'application actuelle.

Dashboards exportés

12 exemples réels

Douze fichiers HTML autonomes : le système solaire, les deux boutons d'entrée avec LED, cinq démos visuelles existantes et cinq créations dédiées. Entrées aléatoires à chaque nouvelle simulation, entrées interactives, widgets, classes, modules, thèmes et huit langues. Le thème choisi dans Settings est le défaut, puis chaque visiteur peut changer librement de thème et de luminosité, avec un choix mémorisé localement. Run live exécute l’interpréteur continu ; Run autonomous rejoue la trace des programmes finis et lance le live continu des exemples SP3_LIVE. Rien ne démarre avant un clic.

Voir les 12 dashboards

Comment le projet est conduit

Le développement avance par incréments volontairement petits : une capacité visuelle, puis son modèle de données, puis son moteur, puis ses validations. Une direction de conception n'est jamais implémentée sans être demandée, et une fonctionnalité n'est annoncée que si elle est réellement opérationnelle dans la fenêtre de l'application.

Le code est écrit avec des assistants. Sapphire 3 est un projet conduit en dialogue avec des outils d'assistance au développement (OpenCode, DeepSeek V3.2, ChatGPT Sol 6.1, GLM 3.2, Nemotron de NVIDIA) : c'est un mode de fabrication assumé, pas un détail caché. Ce qui l'encadre : chaque incrément est relu, testé (suite Node et Python, runner Node natif, sans dépendance de test) et validé dans l'interface avant d'être retenu ; la CI GitHub Actions rejoue tests et build sur chaque pull request. Le vocabulaire, les contrats et les limites sont décidés par le projet, pas par le générateur.

Cette documentation évolue avec le projet. Elle décrit l'état atteint, pas un plan. Les pages sont produites en même temps que les fonctionnalités : une capacité ajoutée ailleurs se traduit ici par une nouvelle section ou sous-section, parfois sans nouvelle capture, et une capacité non encore livrée y est explicitement marquée comme absente.

Technologies

RôleChoixRemarque
InterfaceReact 19.3.1, composants fonctionnels JSXCanvas plein écran, panneaux flottants déplacables, aucune bibliothèque d'interface tierce
BuildVite 8.3.5Serveur de développement local, compilation du frontend pour la distribution
DesktopNeutralinojs 6.10.0 (neu 11.8.0)Fenêtre native, dialogues de fichiers, accès disque ; aucun backend, aucun service distant à l'exécution
StyleCSS natif + jetons dans src/styles/tokens.cssSept palettes prédéfinies et thèmes personnalisés, variables sémantiques, pas de charge distant de police ou de feuille de style
Icôneslucide-react ^1.64.0Utilisés comme glyphes décoratifs, toujours accompagnés d'un libellé ou d'aria-label
Moteur logiqueJavaScript pur dans src/utils/logic/Sans React, sans DOM, sans API native ; source JSON versionnée, importable et testable seul
Testsnode --testScénarios Node et Python : valides, invalides, incomplets, classes, localisations, non-mutation, conservation JSON, migrations, sauvegardes, widgets graphiques, exercices et verrou PBKDF2, notifications par mascotte, aimantation des modules et vitesse de simulation
Documentation ASTLaTeX → PDFabstract/ARCHITECTURE_AST.tex et son PDF, compilés par pnpm docs:ast

Dépôt du projet : github.com/lalBi94/Sapphire3 — sources, historique et issues de Sapphire 3. Le présent site n'est qu'un support de présentation : il ne contient aucun code de l'application et n'en est pas une copie fonctionnelle.

Cinq lectures possibles

Documentation visuelle

Dix étapes et dix captures rapprochées de l'interface actuelle : ouvrir un projet, lire une carte, ajouter une construction, relier deux modules, vérifier les propriétés, exécuter, exporter et changer d'apparence.

Le modèle AST

Ce que le moteur stocke vraiment : la source JSON v1, les trois relations indépendantes, les vingt-huit constructions et leurs slots, le typage strict, les portées, les diagnostics, puis la route vers l'analyse, la simulation et la transpilation.

Transpilation

Le périmètre exact de JavaScript, Python et du C expérimental : constructions acceptées, correspondances des fonctions et opérations SP3, refus explicites et limites connues.

Dashboards exportés

Douze fichiers HTML autonomes et interactifs : système solaire, boutons d'entrée, cube 3D, rosaces, signaux, widgets, contrats, Run live, Run/Pause/Stop, Run autonomous, thèmes et langues. Le thème de l'éditeur est le défaut et le visiteur peut changer librement de thème et de luminosité. Chaque exemple est régénéré après les changements du dashboard.

Architecture AST (PDF)

Le document de référence, rédigé en LaTeX : objectif et périmètre, concepts et relations, flux et responsabilités, structures et invariants, un exemple à deux modules, validations et limites connues.