{"id":3148,"date":"2026-09-29T00:26:40","date_gmt":"2026-09-28T22:26:40","guid":{"rendered":"https:\/\/libreduc.cc\/blog\/astuce\/2026\/09\/29\/ucblockly-ce-quest-et-nest-pas-le-noyau\/"},"modified":"2026-09-29T01:34:34","modified_gmt":"2026-09-28T23:34:34","slug":"ucblockly-ce-quest-et-nest-pas-le-noyau","status":"publish","type":"post","link":"https:\/\/libreduc.cc\/blog\/astuce\/2026\/09\/29\/ucblockly-ce-quest-et-nest-pas-le-noyau\/","title":{"rendered":"\u00b5cBlockly : ce qu\u2019est (et n\u2019est pas) le noyau"},"content":{"rendered":"<p>Dans l\u2019article pr\u00e9c\u00e9dent \u2014 Pourquoi un noyau : naissance de \u00b5cBlockly \u2014 <a href=\"https:\/\/libreduc.cc\/blog\/astuce\/2026\/09\/29\/pourquoi-un-noyau-naissance-ucblockly\/\">https:\/\/libreduc.cc\/blog\/astuce\/2026\/09\/29\/pourquoi-un-noyau-naissance-ucblockly\/<\/a> \u2014 on a vu <em>pourquoi<\/em> s\u00e9parer le moteur des applications. Ici, on fixe le vocabulaire : <strong>ce qu\u2019est \u00b5cBlockly<\/strong>, et surtout <strong>ce qu\u2019il n\u2019est pas<\/strong> \u2014 pour \u00e9viter de confondre le noyau avec BlocklyDuino, la d\u00e9mo, ou \u00ab un autre Blockly pour Arduino \u00bb.<\/p>\n<p><strong><span style=\"color: #ff0000;\">D\u00e9mos vid\u00e9o (cha\u00eene PeerTube Sciences &amp; Technologies)<\/span><\/strong> : <a href=\"https:\/\/tube-sciences-technologies.apps.education.fr\/c\/ucblockly\/videos\">https:\/\/tube-sciences-technologies.apps.education.fr\/c\/ucblockly\/videos<\/a><\/p>\n<h2 style=\"text-align: center;\">Trois niveaux, une seule pile<\/h2>\n<figure style=\"margin: 1.5rem 0; max-width: 36rem; font-family: system-ui,Segoe UI,sans-serif;\">\n<div style=\"border: 2px solid #1a6b6b; border-radius: 12px; padding: 1rem 1.25rem; background: linear-gradient(135deg, #e8f5f4, #f7fbfb); text-align: center;\">\n<div style=\"font-size: 0.75rem; font-weight: bold; letter-spacing: 0.04em; color: #1a6b6b; text-transform: uppercase;\">Niveau 1<\/div>\n<div style=\"font-size: 1.2rem; font-weight: bold; color: #0f3d3d; margin-top: 0.2rem;\">Blockly 13<\/div>\n<div style=\"color: #3d5a5a; margin-top: 0.25rem;\">moteur visuel g\u00e9n\u00e9rique<\/div>\n<\/div>\n<div style=\"text-align: center; font-size: 1.5rem; line-height: 1.4; color: #1a6b6b;\" aria-hidden=\"true\">\u2193<\/div>\n<div style=\"border: 2px solid #1e4d8c; border-radius: 12px; padding: 1rem 1.25rem; background: linear-gradient(135deg, #e8f0fa, #f5f8fc); text-align: center;\">\n<div style=\"font-size: 0.75rem; font-weight: bold; letter-spacing: 0.04em; color: #1e4d8c; text-transform: uppercase;\">Niveau 2 \u2014 noyau<\/div>\n<div style=\"font-size: 1.2rem; font-weight: bold; color: #12305c; margin-top: 0.2rem;\">\u00b5cBlockly<\/div>\n<div style=\"color: #3d4f66; margin-top: 0.25rem;\">blocs Arduino typ\u00e9s + g\u00e9n\u00e9rateur C++ + API<\/div>\n<\/div>\n<div style=\"text-align: center; font-size: 1.5rem; line-height: 1.4; color: #b05a1a;\" aria-hidden=\"true\">\u2193<\/div>\n<div style=\"border: 2px solid #b05a1a; border-radius: 12px; padding: 1rem 1.25rem; background: linear-gradient(135deg, #faf0e6, #fcf8f3); text-align: center;\">\n<div style=\"font-size: 0.75rem; font-weight: bold; letter-spacing: 0.04em; color: #b05a1a; text-transform: uppercase;\">Niveau 3 \u2014 produits<\/div>\n<div style=\"font-size: 1.2rem; font-weight: bold; color: #6b3410; margin-top: 0.2rem;\">Produits d\u00e9riv\u00e9s<\/div>\n<div style=\"color: #6b5340; margin-top: 0.25rem;\">BlocklyDuino \u00b7 Factory \u00b7 d\u00e9mo \u00b7 vos applis<\/div>\n<\/div><figcaption style=\"margin-top: 0.75rem; font-size: 0.9rem; color: #555;\">Pile Blockly \u2192 \u00b5cBlockly \u2192 produits : une seule base, plusieurs peaux.<\/figcaption><\/figure>\n<ul>\n<li><strong>Blockly<\/strong> \u2014 workspace, toolbox, s\u00e9rialisation, plugins @blockly\/*. Rien de sp\u00e9cifique Arduino ici.<\/li>\n<li><strong>\u00b5cBlockly<\/strong> \u2014 ce qui est commun et r\u00e9utilisable : typage, g\u00e9n\u00e9rateurs C++ (Arduino) et Python, contr\u00f4le des structures \/ connexions, instances, API d\u2019int\u00e9gration.<\/li>\n<li><strong>Produits<\/strong> \u2014 l\u2019exp\u00e9rience m\u00e9tier : barre d\u2019outils, choix de carte \u00ab produit \u00bb, Monaco, compilation web, sc\u00e9narios de classe.<\/li>\n<\/ul>\n<p>Si vous ne retenez qu\u2019une phrase : <em>BlocklyDuino n\u2019est pas le noyau ; il s\u2019appuie dessus.<\/em> Idem pour la Factory et pour la d\u00e9mo du d\u00e9p\u00f4t.<\/p>\n<h2>Ce qu\u2019est le noyau<\/h2>\n<p>Le noyau, c\u2019est la surface publique document\u00e9e dans KERNEL (wiki \/ d\u00e9p\u00f4t) :<\/p>\n<ul>\n<li>injecter un workspace Blockly \u00ab Arduino-ready \u00bb dans une page ;<\/li>\n<li>g\u00e9n\u00e9rer du C++ Arduino \u00e0 partir des blocs ;<\/li>\n<li>enregistrer blocs, types et plugins de fa\u00e7on idempotente ;<\/li>\n<li>sauver \/ recharger un workspace, changer de langue, redimensionner, disposer proprement.<\/li>\n<\/ul>\n<p>Point d\u2019entr\u00e9e principal :<\/p>\n<pre>import { createUcBlockly } from '\u00b5cBlockly\/core';\r\n\r\nconst uc = createUcBlockly(document.getElementById('editor'), {\r\n  language: 'fr',\r\n  \/\/ toolbox, th\u00e8me, enforceurs, plugins, onCodeChange\u2026\r\n});\r\n\r\nconsole.log(uc.getCode());<\/pre>\n<p><code>createUcBlockly(container, options)<\/code> renvoie une instance (<code>workspace<\/code>, <code>getCode()<\/code>, <code>saveWorkspace()<\/code> \/ <code>loadWorkspace()<\/code>, <code>resize()<\/code>, <code>dispose()<\/code>\u2026). Pour un host plus avanc\u00e9 : <code>UcBlocklyWorkspaceManager<\/code>, sans coller le shell de la d\u00e9mo.<\/p>\n<p>Couche <strong>h\u00f4te<\/strong> (<code>\u00b5cBlockly\/host<\/code>) : aides d\u2019interface r\u00e9utilisables (th\u00e8mes, accessibilit\u00e9, \u00e9diteur de code\u2026). Utile pour construire une appli, sans forcer la coque p\u00e9dagogique compl\u00e8te.<\/p>\n<h2>Ce que le noyau n\u2019est pas<\/h2>\n<ul>\n<li><strong>Pas BlocklyDuino<\/strong> \u2014 BDuino v3 est l\u2019application pour la classe (cartes AVR, UI, compile \/ Web Serial).<\/li>\n<li><strong>Pas la Factory<\/strong> \u2014 cr\u00e9ateur de blocs \/ packs d\u2019extension, outil \u00e0 part.<\/li>\n<li><strong>Pas la d\u00e9mo du d\u00e9p\u00f4t<\/strong> \u2014 pratique pour tester, pas un contrat d\u2019API.<\/li>\n<li><strong>Pas un fork \u00ab tout-en-un \u00bb<\/strong> \u2014 pas de Monaco \/ topbar m\u00e9tier dans <code>src\/core<\/code>.<\/li>\n<li><strong>Pas Blockly 12<\/strong> \u2014 la v3 est sur Blockly 13 ; les projets en 12 restent sur \u00b5cBlockly 2.x.<\/li>\n<\/ul>\n<p>Si une fonctionnalit\u00e9 n\u2019a de sens que pour <em>une<\/em> appli, elle appartient au produit, pas au noyau.<\/p>\n<p><a href=\"https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3153 size-full\" src=\"https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001.png\" alt=\"\" width=\"1298\" height=\"816\" srcset=\"https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001.png 1298w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-300x189.png 300w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-1024x644.png 1024w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-768x483.png 768w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-100x63.png 100w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-150x94.png 150w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-200x126.png 200w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-450x283.png 450w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-600x377.png 600w, https:\/\/libreduc.cc\/blog\/astuce\/wp-content\/uploads\/sites\/2\/2026\/09\/Image-001-900x566.png 900w\" sizes=\"auto, (max-width: 1298px) 100vw, 1298px\" \/><\/a><\/p>\n<h2>Licence, code, doc, vid\u00e9os<\/h2>\n<ul>\n<li><strong>Licence<\/strong> \u2014 AGPL-3.0-or-later<\/li>\n<li><strong>Code<\/strong> \u2014 <a href=\"https:\/\/github.com\/A-S-T-U-C-E\/ucBlockly\">https:\/\/github.com\/A-S-T-U-C-E\/ucBlockly<\/a><\/li>\n<li><strong>Doc<\/strong> \u2014 wiki LibrEduc (\u00b5cBlockly \/ KERNEL) + <code>docs\/KERNEL.md<\/code>, <code>INTEGRATION_DEPOT.md<\/code><\/li>\n<li><strong>Forum<\/strong> \u2014 <a href=\"https:\/\/forum.libreduc.cc\/\">https:\/\/forum.libreduc.cc\/<\/a><\/li>\n<li><strong>D\u00e9mos vid\u00e9o<\/strong> \u2014 <a href=\"https:\/\/tube-sciences-technologies.apps.education.fr\/c\/ucblockly\/videos\">https:\/\/tube-sciences-technologies.apps.education.fr\/c\/ucblockly\/videos<\/a><\/li>\n<\/ul>\n<p>Blockly (Google \/ Apache-2.0) reste clairement attribu\u00e9 ; \u00b5cBlockly et les produits d\u00e9riv\u00e9s sont sous AGPL.<\/p>\n<h2>Pour qui\u00a0?<\/h2>\n<ul>\n<li><strong>Enseignant\u00b7e \/ formateur\u00b7rice<\/strong> \u2014 vous utiliserez surtout un produit (BlocklyDuino, etc.).<\/li>\n<li><strong>D\u00e9veloppeur\u00b7euse<\/strong> \u2014 commencez par <code>createUcBlockly<\/code> + KERNEL.<\/li>\n<li><strong>Contributeur\u00b7rice<\/strong> \u2014 patch noyau dans \u00b5cBlockly ; patch produit dans le d\u00e9p\u00f4t du produit.<\/li>\n<\/ul>\n<p><em>Bient\u00f4t la suite\u2026<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9finition du noyau \u00b5cBlockly : trois niveaux Blockly \u2192 \u00b5cBlockly \u2192 produits, API createUcBlockly(), hors noyau,\u2026<\/p>\n<p class=\"read-more\"><a class=\"more-link\" href=\"https:\/\/libreduc.cc\/blog\/astuce\/2026\/09\/29\/ucblockly-ce-quest-et-nest-pas-le-noyau\/\">Read more \u2192<\/a><\/p>\n<p><!-- end of .read-more --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[16,20],"tags":[],"class_list":["post-3148","post","type-post","status-publish","format-standard","hentry","category-blocklyduino","category-cblockly"],"_links":{"self":[{"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/posts\/3148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/comments?post=3148"}],"version-history":[{"count":3,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/posts\/3148\/revisions"}],"predecessor-version":[{"id":3158,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/posts\/3148\/revisions\/3158"}],"wp:attachment":[{"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/media?parent=3148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/categories?post=3148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/astuce\/wp-json\/wp\/v2\/tags?post=3148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}