<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Veille technologique · Sébastien Rigaux</title><description>Les derniers liens, outils et idées sélectionnés par Sébastien Rigaux.</description><link>https://sebastien.rigaux.be</link><language>fr</language><atom:link href="https://sebastien.rigaux.be/veille/rss.xml" rel="self" type="application/rss+xml"/><item><title>Reticle : donner aux agents un verdict sur l’application en cours d’exécution</title><link>https://sebastien.rigaux.be/veille/liens/reticle-donner-aux-agents-un-verdict-sur-lapplication-en-cours-dexecution</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/reticle-donner-aux-agents-un-verdict-sur-lapplication-en-cours-dexecution</guid><description>Reticle aide les agents de code à vérifier ce qu’ils ont réellement construit, au lieu de s’en tenir au changement de code. Le repository présente un outil de perception à l’exécution pour les applications web et desktop ; reticle compare confronte deux builds en les pilotant dans un navigateur et relève les différences visibles, les appels réseau et les erreurs de console. La vérification se fait depuis l’extérieur de l’application : aucun SDK n’est requis. Le comparateur peut opposer une version principale à une preview de pull request et, avec --base, classer les différences en régressions, cibles manquées ou changements.</description><pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/owWNlWV7HEROjmVg_image-0.png?auto=format,compress&quot; alt=&quot;Carte GitHub du repository reticlehq/reticle : son nom, une description de la perception à l’exécution pour les agents d’IA et une icône noire, avec les compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Reticle aide les agents de code à vérifier ce qu’ils ont réellement construit, au lieu de s’en tenir au changement de code. Le repository présente un outil de perception à l’exécution pour les applications web et desktop ; &lt;code&gt;reticle compare&lt;/code&gt; confronte deux builds en les pilotant dans un navigateur et relève les différences visibles, les appels réseau et les erreurs de console.&lt;/p&gt;
&lt;p&gt;La vérification se fait depuis l’extérieur de l’application : aucun SDK n’est requis. Le comparateur peut opposer une version principale à une preview de pull request et, avec &lt;code&gt;--base&lt;/code&gt;, classer les différences en régressions, cibles manquées ou changements.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/reticlehq/reticle&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/owWNlWV7HEROjmVg_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Carte GitHub du repository reticlehq/reticle : son nom, une description de la perception à l’exécution pour les agents d’IA et une icône noire, avec les compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.</media:description><category>AI Agents</category><category>End-to-end testing</category><category>Testing</category><category>Observability</category></item><item><title>Fimo automatise la maintenance et le référencement des sites web</title><link>https://sebastien.rigaux.be/veille/liens/fimo-automatise-la-maintenance-et-le-referencement-des-sites-web</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/fimo-automatise-la-maintenance-et-le-referencement-des-sites-web</guid><description>Fimo propose aux équipes marketing de maintenir un site et d’améliorer sa visibilité dans les moteurs de recherche et les réponses d’IA grâce à des agents spécialisés en SEO, GEO, contenu, performance, accessibilité et conformité. La plateforme inclut aussi un éditeur visuel, l’hébergement, des previews et l’historique des changements. Les agents s’exécutent selon un calendrier ou à la suite d’une modification du site. Les petites corrections peuvent être publiées automatiquement ; les changements qui exigent une décision arrivent sous forme de proposition avec preview, à approuver avant publication. Le site reste connecté à son framework existant, sans reconstruction, et les développeurs continuent de travailler dans le code.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/6paiUEqVDxsGt6eK_image-0.png?auto=format,compress&quot; alt=&quot;Visuel Fimo avec le texte « Your website, with superpowers » et « Get found in AI answers and search », sur fond clair décoré de formes circulaires colorées.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;Fimo propose aux équipes marketing de maintenir un site et d’améliorer sa visibilité dans les moteurs de recherche et les réponses d’IA grâce à des agents spécialisés en SEO, GEO, contenu, performance, accessibilité et conformité. La plateforme inclut aussi un éditeur visuel, l’hébergement, des previews et l’historique des changements.&lt;/p&gt;
&lt;p&gt;Les agents s’exécutent selon un calendrier ou à la suite d’une modification du site. Les petites corrections peuvent être publiées automatiquement ; les changements qui exigent une décision arrivent sous forme de proposition avec preview, à approuver avant publication. Le site reste connecté à son framework existant, sans reconstruction, et les développeurs continuent de travailler dans le code.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://fimo.ai/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/6paiUEqVDxsGt6eK_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Visuel Fimo avec le texte « Your website, with superpowers » et « Get found in AI answers and search », sur fond clair décoré de formes circulaires colorées.</media:description><category>AI Agents</category><category>SEO</category><category>Optimisation pour les moteurs génératifs</category></item><item><title>x18n vérifie les clés i18n du code aux fichiers de locale</title><link>https://sebastien.rigaux.be/veille/liens/x18n-verifie-les-cles-i18n-du-code-aux-fichiers-de-locale</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/x18n-verifie-les-cles-i18n-du-code-aux-fichiers-de-locale</guid><description>x18n repère les clés de traduction manquantes, inutilisées ou incorrectes en croisant les appels du code et les fichiers de locale. Son CLI peut faire échouer la CI sur les erreurs, tandis que les commandes de recherche et de renommage relient les valeurs traduites à leurs usages. Le même moteur alimente le CLI, l’extension VS Code et une interface web. Le renommage peut couvrir les fichiers de locale et le code, avec --dry-run pour examiner les changements avant écriture ; l’interface expose aussi des outils MCP pour les agents de programmation.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/9UONh-VeHMuUCwBb_image-0.png?auto=format,compress&quot; alt=&quot;Capture du site x18n en thème sombre : à gauche, le titre « i18n files, checked and maintained » ; à droite, une interface de traduction affichant des clés, leurs valeurs en plusieurs langues et une traduction française manquante.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;x18n repère les clés de traduction manquantes, inutilisées ou incorrectes en croisant les appels du code et les fichiers de locale. Son CLI peut faire échouer la CI sur les erreurs, tandis que les commandes de recherche et de renommage relient les valeurs traduites à leurs usages.&lt;/p&gt;
&lt;p&gt;Le même moteur alimente le CLI, l’extension VS Code et une interface web. Le renommage peut couvrir les fichiers de locale et le code, avec &lt;code&gt;--dry-run&lt;/code&gt; pour examiner les changements avant écriture ; l’interface expose aussi des outils MCP pour les agents de programmation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://x18n.dev/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/9UONh-VeHMuUCwBb_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Capture du site x18n en thème sombre : à gauche, le titre « i18n files, checked and maintained » ; à droite, une interface de traduction affichant des clés, leurs valeurs en plusieurs langues et une traduction française manquante.</media:description><category>Internationalization</category></item><item><title>React : détecter les effets superflus avec ESLint</title><link>https://sebastien.rigaux.be/veille/liens/react-detecter-les-effets-superflus-avec-eslint</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/react-detecter-les-effets-superflus-avec-eslint</guid><description>Ce plugin ESLint repère les useEffect qui compliquent inutilement le flux React et associe chaque anti-pattern à une alternative précise et à un lien vers la documentation. Il couvre notamment l’état dérivé, les mises à jour en chaîne et les effets utilisés comme gestionnaires d’événements. Son analyse tient compte de l’état, des props, du contexte, des refs et des dépendances pour évaluer quand un effet s’exécute. Il propose des configurations recommandées ou strictes et fonctionne aussi avec Oxlint.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/u9AMptLq8gFgu6PB_image-0.png?auto=format,compress&quot; alt=&quot;Bannière GitHub du dépôt avec son nom, une photo de profil et des compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Ce plugin ESLint repère les &lt;code&gt;useEffect&lt;/code&gt; qui compliquent inutilement le flux React et associe chaque anti-pattern à une alternative précise et à un lien vers la documentation. Il couvre notamment l’état dérivé, les mises à jour en chaîne et les effets utilisés comme gestionnaires d’événements.&lt;/p&gt;
&lt;p&gt;Son analyse tient compte de l’état, des props, du contexte, des refs et des dépendances pour évaluer quand un effet s’exécute. Il propose des configurations recommandées ou strictes et fonctionne aussi avec Oxlint.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nickjvandyke/eslint-plugin-react-you-might-not-need-an-effect&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/u9AMptLq8gFgu6PB_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière GitHub du dépôt avec son nom, une photo de profil et des compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.</media:description></item><item><title>Skullet : générer des skeleton states à la forme du contenu</title><link>https://sebastien.rigaux.be/veille/liens/skullet-generer-des-skeleton-states-a-la-forme-du-contenu</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/skullet-generer-des-skeleton-states-a-la-forme-du-contenu</guid><description>Skullet automatise les états de chargement sans placeholders dessinés à la main : le package npm affiche des données d’exemple invisibles, mesure les éléments, puis dessine des skeletons à leur forme pour limiter les décalages de mise en page. La démonstration met en scène plusieurs interfaces, des métriques aux notifications, et soulève aussi la question du rendu côté serveur.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/z6fxozLANK3DKxNU_image-0.png?auto=format,compress&quot; alt=&quot;Visuel noir avec un grand crâne gris en arrière-plan et le texte « Skullet — Smart Skeleton States ».&quot; width=&quot;1440&quot; height=&quot;760&quot; /&gt;&lt;/p&gt;&lt;p&gt;Skullet automatise les états de chargement sans placeholders dessinés à la main : le package npm affiche des données d’exemple invisibles, mesure les éléments, puis dessine des skeletons à leur forme pour limiter les décalages de mise en page.&lt;/p&gt;
&lt;p&gt;La démonstration met en scène plusieurs interfaces, des métriques aux notifications, et soulève aussi la question du rendu côté serveur.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://skullet.lochie.me/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/z6fxozLANK3DKxNU_image-0.png?auto=format,compress" width="1440" height="760"/><media:description>Visuel noir avec un grand crâne gris en arrière-plan et le texte « Skullet — Smart Skeleton States ».</media:description></item><item><title>react-resizable-panels : trois modèles de layouts redimensionnables</title><link>https://sebastien.rigaux.be/veille/liens/react-resizable-panels-trois-modeles-de-layouts-redimensionnables</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/react-resizable-panels-trois-modeles-de-layouts-redimensionnables</guid><description>La documentation de react-resizable-panels présente des composants React pour construire des interfaces redimensionnables : panneaux en ligne ou en colonne, grilles ajustables en deux dimensions et workspaces à onglets réorganisables par glisser-déposer. L’exemple de workspace montre comment fournir un modèle initial avec defaultModel et choisir le contenu d’un onglet via renderTabContent. Le package inclut ses définitions TypeScript.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/IogWwmmMVwggH229_image-0.png?auto=format,compress&quot; alt=&quot;Visuel violet portant le texte « react resizable panels » à côté d’un symbole de chevrons et d’une barre verticale.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;La documentation de react-resizable-panels présente des composants React pour construire des interfaces redimensionnables : panneaux en ligne ou en colonne, grilles ajustables en deux dimensions et workspaces à onglets réorganisables par glisser-déposer.&lt;/p&gt;
&lt;p&gt;L’exemple de workspace montre comment fournir un modèle initial avec &lt;code&gt;defaultModel&lt;/code&gt; et choisir le contenu d’un onglet via &lt;code&gt;renderTabContent&lt;/code&gt;. Le package inclut ses définitions TypeScript.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://react-resizable-panels.vercel.app/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/IogWwmmMVwggH229_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Visuel violet portant le texte « react resizable panels » à côté d’un symbole de chevrons et d’une barre verticale.</media:description><category>React</category></item><item><title>Hydratation React et SSR : éviter les écarts sans masquer le contenu</title><link>https://sebastien.rigaux.be/veille/liens/hydratation-react-et-ssr-eviter-les-ecarts-sans-masquer-le-contenu</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/hydratation-react-et-ssr-eviter-les-ecarts-sans-masquer-le-contenu</guid><description>Dans Next.js, une valeur de localStorage peut faire diverger le HTML rendu côté serveur du premier rendu client. L’article compare les compromis : attendre le montage évite l’erreur, mais retire le contenu réel du HTML SSR ; initialiser les deux rendus avec la même valeur préserve ce contenu, au prix d’une mise à jour ultérieure pouvant provoquer un flicker. Pour synchroniser une sidebar sans ce clignotement, un script inline applique son état au DOM avant l’hydratation et le transmet à React, qui reprend les mêmes classes. L’article distingue aussi le cas d’un contrôle de thème isolé et celui d’un backdrop mobile géré par CSS.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/mJPowUL3fg3mosuC_image-0.png?auto=format,compress&quot; alt=&quot;Carte blanche sur fond bleu pâle affichant « Fixing a Hydration Mismatch Error and UI Flicker in React » et la mention « Blog ».&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Dans Next.js, une valeur de &lt;code&gt;localStorage&lt;/code&gt; peut faire diverger le HTML rendu côté serveur du premier rendu client. L’article compare les compromis : attendre le montage évite l’erreur, mais retire le contenu réel du HTML SSR ; initialiser les deux rendus avec la même valeur préserve ce contenu, au prix d’une mise à jour ultérieure pouvant provoquer un flicker.&lt;/p&gt;
&lt;p&gt;Pour synchroniser une sidebar sans ce clignotement, un script inline applique son état au DOM avant l’hydratation et le transmet à React, qui reprend les mêmes classes. L’article distingue aussi le cas d’un contrôle de thème isolé et celui d’un backdrop mobile géré par CSS.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.gmoniava.com/blog/hydration-mismatch-errors-and-how-to-fix-them&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/mJPowUL3fg3mosuC_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Carte blanche sur fond bleu pâle affichant « Fixing a Hydration Mismatch Error and UI Flicker in React » et la mention « Blog ».</media:description><category>Next.js</category><category>React</category><category>SSR</category><category>Hydration</category></item><item><title>Decap CMS : éditer du contenu directement dans un workflow Git</title><link>https://sebastien.rigaux.be/veille/liens/decap-cms-editer-du-contenu-directement-dans-un-workflow-git</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/decap-cms-editer-du-contenu-directement-dans-un-workflow-git</guid><description>Decap CMS ajoute une interface éditoriale aux sites statiques sans déplacer le contenu hors du repository Git. Les équipes peuvent gérer brouillons, relectures et publications, avec historique versionné et aperçu en temps réel pour les contributeurs non techniques. La configuration déclarative tient dans un fichier config.yml et permet de définir collections, champs et workflows ; des widgets personnalisés étendent l’éditeur. Pour les équipes qui ont besoin d’accès centralisés ou de mieux absorber les limites d’API Git, Decap Turbo ajoute notamment authentification hébergée et proxy de base de données.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/El7JBafYDAXWFmzE_image-0.jpg?auto=format,compress&quot; alt=&quot;Logo blanc de Decap sur un fond dégradé violet et rose.&quot; width=&quot;1500&quot; height=&quot;900&quot; /&gt;&lt;/p&gt;&lt;p&gt;Decap CMS ajoute une interface éditoriale aux sites statiques sans déplacer le contenu hors du repository Git. Les équipes peuvent gérer brouillons, relectures et publications, avec historique versionné et aperçu en temps réel pour les contributeurs non techniques.&lt;/p&gt;
&lt;p&gt;La configuration déclarative tient dans un fichier &lt;code&gt;config.yml&lt;/code&gt; et permet de définir collections, champs et workflows ; des widgets personnalisés étendent l’éditeur. Pour les équipes qui ont besoin d’accès centralisés ou de mieux absorber les limites d’API Git, Decap Turbo ajoute notamment authentification hébergée et proxy de base de données.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://decapcms.org/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/El7JBafYDAXWFmzE_image-0.jpg?auto=format,compress" width="1500" height="900"/><media:description>Logo blanc de Decap sur un fond dégradé violet et rose.</media:description><category>Headless CMS</category><category>SSG</category><category>Open Source</category></item><item><title>Taste Skill : des règles de design et des contrôles navigateur pour les agents de code</title><link>https://sebastien.rigaux.be/veille/liens/taste-skill-des-regles-de-design-et-des-controles-navigateur-pour-les-agents-de-code</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/taste-skill-des-regles-de-design-et-des-controles-navigateur-pour-les-agents-de-code</guid><description>Taste Skill fournit aux agents de code un système pour construire des sites d’entreprise moins génériques : palettes, layouts de hero, fragments d’interface et images réelles, avec une direction adaptée au type d’activité. Le dépôt propose des intégrations pour Claude Code et Codex, ainsi qu’un usage via npx skills. Le point distinctif est le contrôle automatisé dans Chrome headless : la page est rendue à quatre largeurs, de 390 à 1440 px, et vérifiée pour les visuels vides, les contrastes, l’alignement ou les images manquantes sur réseau lent. Les effets WebGL et de scroll sont réservés aux pages tech, gaming et software, avec des replis statiques pour mobile et la réduction des animations.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/1kRnF--NxAGvLbtr_image-0.jpg?auto=format,compress&quot; alt=&quot;Bannière Taste Skill sur fond beige, avec le nom du projet à gauche et des maquettes d’interfaces empilées à droite.&quot; width=&quot;1731&quot; height=&quot;909&quot; /&gt;&lt;/p&gt;&lt;p&gt;Taste Skill fournit aux agents de code un système pour construire des sites d’entreprise moins génériques : palettes, layouts de hero, fragments d’interface et images réelles, avec une direction adaptée au type d’activité. Le dépôt propose des intégrations pour Claude Code et Codex, ainsi qu’un usage via &lt;code&gt;npx skills&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le point distinctif est le contrôle automatisé dans Chrome headless : la page est rendue à quatre largeurs, de 390 à 1440 px, et vérifiée pour les visuels vides, les contrastes, l’alignement ou les images manquantes sur réseau lent. Les effets WebGL et de scroll sont réservés aux pages tech, gaming et software, avec des replis statiques pour mobile et la réduction des animations.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Leonxlnx/taste-skill&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/1kRnF--NxAGvLbtr_image-0.jpg?auto=format,compress" width="1731" height="909"/><media:description>Bannière Taste Skill sur fond beige, avec le nom du projet à gauche et des maquettes d’interfaces empilées à droite.</media:description><category>Agent skills</category><category>AI Agents</category><category>UI/UX</category><category>Testing</category><category>Responsive design</category></item><item><title>Kiri, un runtime de conteneurs compatible Docker pour trois OS</title><link>https://sebastien.rigaux.be/veille/liens/kiri-un-runtime-de-conteneurs-compatible-docker-pour-trois-os</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/kiri-un-runtime-de-conteneurs-compatible-docker-pour-trois-os</guid><description>Kiri remplace Docker Desktop et OrbStack par un runtime de conteneurs léger pour macOS, Windows et Linux, compatible avec la CLI Docker, Compose et buildx. Le dépôt détaille aussi une interface native et la prise en charge de clusters Kubernetes et de machines Linux. Son architecture repose sur une VM Linux et un agent Rust qui lance les conteneurs via clone3, sans runc, shim ni dockerd. Le projet publie des benchmarks comparant les temps de démarrage à ceux de Docker Desktop et OrbStack, ainsi que la méthode pour les reproduire.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/PAyxHjMwSwHVENZ3_image-0.png?auto=format,compress&quot; alt=&quot;Bannière GitHub du dépôt libracoder/kiri : son nom, une courte description du runtime de conteneurs, le portrait d’un homme et les compteurs de contributeurs, issues, discussions, stars et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Kiri remplace Docker Desktop et OrbStack par un runtime de conteneurs léger pour macOS, Windows et Linux, compatible avec la CLI Docker, Compose et buildx. Le dépôt détaille aussi une interface native et la prise en charge de clusters Kubernetes et de machines Linux.&lt;/p&gt;
&lt;p&gt;Son architecture repose sur une VM Linux et un agent Rust qui lance les conteneurs via &lt;code&gt;clone3&lt;/code&gt;, sans runc, shim ni dockerd. Le projet publie des benchmarks comparant les temps de démarrage à ceux de Docker Desktop et OrbStack, ainsi que la méthode pour les reproduire.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/libracoder/kiri&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/PAyxHjMwSwHVENZ3_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière GitHub du dépôt libracoder/kiri : son nom, une courte description du runtime de conteneurs, le portrait d’un homme et les compteurs de contributeurs, issues, discussions, stars et forks.</media:description><category>Docker</category><category>Linux</category><category>Developer Experience</category></item><item><title>NewReleases centralise le suivi des versions et leurs alertes</title><link>https://sebastien.rigaux.be/veille/liens/newreleases-centralise-le-suivi-des-versions-et-leurs-alertes</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/newreleases-centralise-le-suivi-des-versions-et-leurs-alertes</guid><description>NewReleases suit les nouvelles versions de projets et de paquets sur des plateformes comme GitHub, npm, NuGet ou Docker Hub, puis envoie des alertes par e-mail, messagerie instantanée ou webhook. Le service évite de vérifier manuellement chaque dépendance ou outil utilisé. Les notifications peuvent être instantanées ou périodiques, et le suivi se configure avec des fichiers de dépendances comme package.json, requirements.txt ou go.mod. Des filtres par expressions régulières et par statut de préversion permettent d’affiner les versions signalées.</description><pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/1FPaxTPWGTJ8z2p2_image-0.png?auto=format,compress&quot; alt=&quot;Logo NewReleases : le mot « new » en bleu et « (releases) » en noir sur fond blanc.&quot; width=&quot;2400&quot; height=&quot;1254&quot; /&gt;&lt;/p&gt;&lt;p&gt;NewReleases suit les nouvelles versions de projets et de paquets sur des plateformes comme GitHub, npm, NuGet ou Docker Hub, puis envoie des alertes par e-mail, messagerie instantanée ou webhook. Le service évite de vérifier manuellement chaque dépendance ou outil utilisé.&lt;/p&gt;
&lt;p&gt;Les notifications peuvent être instantanées ou périodiques, et le suivi se configure avec des fichiers de dépendances comme &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;requirements.txt&lt;/code&gt; ou &lt;code&gt;go.mod&lt;/code&gt;. Des filtres par expressions régulières et par statut de préversion permettent d’affiner les versions signalées.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://newreleases.io/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/1FPaxTPWGTJ8z2p2_image-0.png?auto=format,compress" width="2400" height="1254"/><media:description>Logo NewReleases : le mot « new » en bleu et « (releases) » en noir sur fond blanc.</media:description><category>Dependency management</category><category>Automation</category></item><item><title>Papra : une archive documentaire open source à auto-héberger</title><link>https://sebastien.rigaux.be/veille/liens/papra-une-archive-documentaire-open-source-a-auto-heberger</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/papra-une-archive-documentaire-open-source-a-auto-heberger</guid><description>Papra centralise le stockage et la gestion de documents dans une plateforme d’archivage open source. Recherche plein texte, filtres avancés, tags et import automatique par e-mail ou depuis un dossier facilitent le classement et la récupération des fichiers. Le projet se déploie avec Docker et propose aussi une CLI, une API, des SDK et des webhooks pour l’intégrer à d’autres outils. La démo en ligne fonctionne uniquement en stockage local côté navigateur, sans backend.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/UhviEfcR4XFEzS4Z_image-0.png?auto=format,compress&quot; alt=&quot;Bannière GitHub de Papra : nom du dépôt, icône de document vert clair sur fond noir, et statistiques de contributeurs, d’utilisations, d’étoiles et de forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Papra centralise le stockage et la gestion de documents dans une plateforme d’archivage open source. Recherche plein texte, filtres avancés, tags et import automatique par e-mail ou depuis un dossier facilitent le classement et la récupération des fichiers.&lt;/p&gt;
&lt;p&gt;Le projet se déploie avec Docker et propose aussi une CLI, une API, des SDK et des webhooks pour l’intégrer à d’autres outils. La démo en ligne fonctionne uniquement en stockage local côté navigateur, sans backend.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/papra-hq/papra&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/UhviEfcR4XFEzS4Z_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière GitHub de Papra : nom du dépôt, icône de document vert clair sur fond noir, et statistiques de contributeurs, d’utilisations, d’étoiles et de forks.</media:description><category>Document management</category><category>Self-hosting</category><category>Search</category></item><item><title>Pullboard orchestre des agents IA avec specs et vérification indépendante</title><link>https://sebastien.rigaux.be/veille/liens/pullboard-orchestre-des-agents-ia-avec-specs-et-verification-independante</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/pullboard-orchestre-des-agents-ia-avec-specs-et-verification-independante</guid><description>Pullboard coordonne des agents de développement à partir de spécifications approuvées : chacun prend un item dans une worktree dédiée, passe un gate de tests, puis un autre agent vérifie le commit avant qu’il soit accepté. Les règles et l’activité restent dans le dépôt, avec un tableau local plutôt qu’un service hébergé. Le point fort est le contrôle du flux : les exigences approuvées sont figées quand l’agent prend l’item, les lanes limitent les chemins modifiables et les transitions d’état suivent une machine commune aux commandes, à l’interface et à la documentation.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/rihWX1gUkQAdBa6H_image-0.png?auto=format,compress&quot; alt=&quot;Aperçu GitHub du dépôt pullboard-dev/pullboard, avec son nom, une description tronquée et les compteurs de contributeurs, issues, étoiles et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Pullboard coordonne des agents de développement à partir de spécifications approuvées : chacun prend un item dans une worktree dédiée, passe un gate de tests, puis un autre agent vérifie le commit avant qu’il soit accepté. Les règles et l’activité restent dans le dépôt, avec un tableau local plutôt qu’un service hébergé.&lt;/p&gt;
&lt;p&gt;Le point fort est le contrôle du flux : les exigences approuvées sont figées quand l’agent prend l’item, les lanes limitent les chemins modifiables et les transitions d’état suivent une machine commune aux commandes, à l’interface et à la documentation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/pullboard-dev/pullboard&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/rihWX1gUkQAdBa6H_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Aperçu GitHub du dépôt pullboard-dev/pullboard, avec son nom, une description tronquée et les compteurs de contributeurs, issues, étoiles et forks.</media:description><category>AI Agents</category><category>Workflow Orchestration</category><category>Spec-driven development</category><category>Code review</category></item><item><title>Zerobyte automatise les sauvegardes Restic en self-hosting</title><link>https://sebastien.rigaux.be/veille/liens/zerobyte-automatise-les-sauvegardes-restic-en-self-hosting</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/zerobyte-automatise-les-sauvegardes-restic-en-self-hosting</guid><description>Zerobyte centralise la planification, la gestion et le suivi de sauvegardes chiffrées avec Restic, depuis une interface web. Il prend en charge des sources NFS, SMB, WebDAV, SFTP ou des répertoires locaux, et plusieurs destinations dont S3, GCS, Azure et rclone. Le déploiement Docker Compose peut être allégé si seuls des dossiers déjà montés sont sauvegardés : retirer SYS_ADMIN et le périphérique FUSE réduit les capacités accordées au conteneur, mais empêche le montage direct des partages distants.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/SVr7cLf4nJYzzKtq_image-0.png?auto=format,compress&quot; alt=&quot;Capture de l’interface Zerobyte affichant des tâches de sauvegarde planifiées, leur statut et leur dépôt de destination.&quot; width=&quot;3048&quot; height=&quot;1714&quot; /&gt;&lt;/p&gt;&lt;p&gt;Zerobyte centralise la planification, la gestion et le suivi de sauvegardes chiffrées avec Restic, depuis une interface web. Il prend en charge des sources NFS, SMB, WebDAV, SFTP ou des répertoires locaux, et plusieurs destinations dont S3, GCS, Azure et rclone.&lt;/p&gt;
&lt;p&gt;Le déploiement Docker Compose peut être allégé si seuls des dossiers déjà montés sont sauvegardés : retirer &lt;code&gt;SYS_ADMIN&lt;/code&gt; et le périphérique FUSE réduit les capacités accordées au conteneur, mais empêche le montage direct des partages distants.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nicotsx/zerobyte&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/SVr7cLf4nJYzzKtq_image-0.png?auto=format,compress" width="3048" height="1714"/><media:description>Capture de l’interface Zerobyte affichant des tâches de sauvegarde planifiées, leur statut et leur dépôt de destination.</media:description><category>Backup and restore</category><category>Restic</category><category>Self-hosting</category><category>Docker</category></item><item><title>Agents IA pour repérer et faire supprimer ses données exposées</title><link>https://sebastien.rigaux.be/veille/liens/agents-ia-pour-reperer-et-faire-supprimer-ses-donnees-exposees</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/agents-ia-pour-reperer-et-faire-supprimer-ses-donnees-exposees</guid><description>Un workflow en trois agents vise à repérer les données personnelles exposées, trouver les procédures de suppression et préparer des demandes RGPD. Le document détaille les rôles, les consignes à fournir et la manière de faire collaborer les agents dans un chat de groupe Cue. Le parcours garde une validation humaine avant l’envoi des e-mails et rappelle de ne jamais communiquer de mots de passe. Il distingue aussi les sites qui répertorient les fuites des organisations qui en sont à l’origine, pour éviter de contacter le mauvais interlocuteur.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/ZBmCZPRuUI4LbJ3T_image-0.png?auto=format,compress&quot; alt=&quot;Capture d’un document montrant des liens vers Have I Been Pwned et multisearch, ainsi qu’un avertissement sur les sources de fuites de données.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Un workflow en trois agents vise à repérer les données personnelles exposées, trouver les procédures de suppression et préparer des demandes RGPD. Le document détaille les rôles, les consignes à fournir et la manière de faire collaborer les agents dans un chat de groupe Cue.&lt;/p&gt;
&lt;p&gt;Le parcours garde une validation humaine avant l’envoi des e-mails et rappelle de ne jamais communiquer de mots de passe. Il distingue aussi les sites qui répertorient les fuites des organisations qui en sont à l’origine, pour éviter de contacter le mauvais interlocuteur.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docs.google.com/document/d/1UKPyj16OonZsQg-Q0NQ-jbvfAvvCC9Qcn7BL3VLLLJY/mobilebasic?&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/ZBmCZPRuUI4LbJ3T_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Capture d’un document montrant des liens vers Have I Been Pwned et multisearch, ainsi qu’un avertissement sur les sources de fuites de données.</media:description><category>Data privacy</category><category>AI Agents</category><category>Automation</category></item><item><title>Cloudflare Security Audit Skill structure les audits menés par un agent</title><link>https://sebastien.rigaux.be/veille/liens/cloudflare-security-audit-skill-structure-les-audits-menes-par-un-agent</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/cloudflare-security-audit-skill-structure-les-audits-menes-par-un-agent</guid><description>Ce skill transforme un coding agent en auditeur de sécurité en orchestrant un audit de dépôt en six phases, de la reconnaissance à la génération de rapports. Les constats sont structurés en données lisibles par machine et vérifiés indépendamment. Chaque piste est soumise à un agent distinct chargé de tenter de la réfuter ; les résultats distinguent constats confirmés, pistes à valider et pistes rejetées. L’exécution de code cible exige un sandbox imposé par le système d’exploitation, sans réseau externe et avec des ressources limitées.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/DHxWGOm7aMU9wETg_image-0.png?auto=format,compress&quot; alt=&quot;Bannière du dépôt GitHub cloudflare/security-audit-skill, présentant sa description comme skill de coding agent et les compteurs de contributeurs, issues, étoiles et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Ce skill transforme un coding agent en auditeur de sécurité en orchestrant un audit de dépôt en six phases, de la reconnaissance à la génération de rapports. Les constats sont structurés en données lisibles par machine et vérifiés indépendamment.&lt;/p&gt;
&lt;p&gt;Chaque piste est soumise à un agent distinct chargé de tenter de la réfuter ; les résultats distinguent constats confirmés, pistes à valider et pistes rejetées. L’exécution de code cible exige un sandbox imposé par le système d’exploitation, sans réseau externe et avec des ressources limitées.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/security-audit-skill&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/DHxWGOm7aMU9wETg_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière du dépôt GitHub cloudflare/security-audit-skill, présentant sa description comme skill de coding agent et les compteurs de contributeurs, issues, étoiles et forks.</media:description><category>Agent skills</category><category>AI Agents</category><category>Security</category></item><item><title>Fetch Metadata : lire le contexte des requêtes pour renforcer la protection CSRF</title><link>https://sebastien.rigaux.be/veille/liens/fetch-metadata-lire-le-contexte-des-requetes-pour-renforcer-la-protection-csrf</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/fetch-metadata-lire-le-contexte-des-requetes-pour-renforcer-la-protection-csrf</guid><description>Les quatre en-têtes Fetch Metadata indiquent au serveur d’où vient une requête et comment sa réponse sera utilisée. Andrew Lock détaille Sec-Fetch-Site, Sec-Fetch-Mode, Sec-Fetch-Dest et Sec-Fetch-User pour aider à distinguer, par exemple, une navigation légitime d’une requête intersite suspecte. Des exemples opposent le chargement d’une image depuis un CDN à un fetch() JavaScript. Ces signaux, que JavaScript ne peut pas modifier, peuvent alimenter une Resource Isolation Policy et ajouter une couche de défense contre les requêtes CSRF.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fpIu5TX2H8lLzQw3_image-0.webp?auto=format,compress&quot; alt=&quot;Un chien noir et blanc court après une balle de tennis verte sur un terrain.&quot; width=&quot;799&quot; height=&quot;533&quot; /&gt;&lt;/p&gt;&lt;p&gt;Les quatre en-têtes Fetch Metadata indiquent au serveur d’où vient une requête et comment sa réponse sera utilisée. Andrew Lock détaille &lt;code&gt;Sec-Fetch-Site&lt;/code&gt;, &lt;code&gt;Sec-Fetch-Mode&lt;/code&gt;, &lt;code&gt;Sec-Fetch-Dest&lt;/code&gt; et &lt;code&gt;Sec-Fetch-User&lt;/code&gt; pour aider à distinguer, par exemple, une navigation légitime d’une requête intersite suspecte.&lt;/p&gt;
&lt;p&gt;Des exemples opposent le chargement d’une image depuis un CDN à un &lt;code&gt;fetch()&lt;/code&gt; JavaScript. Ces signaux, que JavaScript ne peut pas modifier, peuvent alimenter une Resource Isolation Policy et ajouter une couche de défense contre les requêtes CSRF.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://andrewlock.net/understanding-the-fetch-metadata-http-headers-sec-fetch-site-and-friends/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fpIu5TX2H8lLzQw3_image-0.webp?auto=format,compress" width="799" height="533"/><media:description>Un chien noir et blanc court après une balle de tennis verte sur un terrain.</media:description><category>Security</category></item><item><title>Finbuckle.MultiTenant : isoler les tenants dans une application .NET</title><link>https://sebastien.rigaux.be/veille/liens/finbucklemultitenant-isoler-les-tenants-dans-une-application-net</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/finbucklemultitenant-isoler-les-tenants-dans-une-application-net</guid><description>Finbuckle.MultiTenant fournit à ASP.NET Core les briques de résolution des tenants, de configuration par tenant et d’isolation des données. Le démarrage combine une stratégie basée sur le host, un store alimenté par la configuration et le middleware UseMultiTenant(). Le middleware doit précéder ceux qui dépendent du tenant, comme l’authentification et l’autorisation. La bibliothèque propose aussi des intégrations pour les options, l’authentification et l’isolation des données avec Entity Framework Core.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Ltse_jt-4ItPqO0T_image-0.png?auto=format,compress&quot; alt=&quot;Logo en forme de cube composé de blocs gris, avec un bloc orange au centre.&quot; width=&quot;512&quot; height=&quot;512&quot; /&gt;&lt;/p&gt;&lt;p&gt;Finbuckle.MultiTenant fournit à ASP.NET Core les briques de résolution des tenants, de configuration par tenant et d’isolation des données. Le démarrage combine une stratégie basée sur le host, un store alimenté par la configuration et le middleware &lt;code&gt;UseMultiTenant()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le middleware doit précéder ceux qui dépendent du tenant, comme l’authentification et l’autorisation. La bibliothèque propose aussi des intégrations pour les options, l’authentification et l’isolation des données avec Entity Framework Core.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.finbuckle.com/MultiTenant/#getting-started&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Ltse_jt-4ItPqO0T_image-0.png?auto=format,compress" width="512" height="512"/><media:description>Logo en forme de cube composé de blocs gris, avec un bloc orange au centre.</media:description><category>Multi-tenancy</category><category>Finbuckle.MultiTenant</category><category>ASP.NET Core</category><category>Entity Framework Core</category><category>.NET</category></item><item><title>.NET multi-tenant : migrer un tenant sans interrompre le service — partie 4/4</title><link>https://sebastien.rigaux.be/veille/liens/net-multi-tenant-migrer-un-tenant-sans-interrompre-le-service-partie-44</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/net-multi-tenant-migrer-un-tenant-sans-interrompre-le-service-partie-44</guid><description>Ce volet explique comment déplacer un tenant d’une base partagée vers une base dédiée sans arrêter l’application ni perturber les autres tenants. Le catalogue pilote le basculement, tandis que le même modèle EF Core et son filtre restent en place dans les deux modes. La migration s’appuie sur une copie initiale, un passage temporaire en lecture seule, une copie delta et une vérification avant le cutover. Le runbook attend l’expiration du cache avant de rouvrir les écritures : les instances qui conservent encore l’ancienne connexion ne peuvent ainsi pas écrire dans la base partagée après le basculement.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fZlgTf99AQbWhZzY_image-0.jpg?auto=format,compress&quot; alt=&quot;Bannière « Multi-Tenant .NET, Part 4: Moving Day », avec des cartons de déménagement, un emblème de guilde et un portrait illustré.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Ce volet explique comment déplacer un tenant d’une base partagée vers une base dédiée sans arrêter l’application ni perturber les autres tenants. Le catalogue pilote le basculement, tandis que le même modèle EF Core et son filtre restent en place dans les deux modes.&lt;/p&gt;
&lt;p&gt;La migration s’appuie sur une copie initiale, un passage temporaire en lecture seule, une copie delta et une vérification avant le cutover. Le runbook attend l’expiration du cache avant de rouvrir les écritures : les instances qui conservent encore l’ancienne connexion ne peuvent ainsi pas écrire dans la base partagée après le basculement.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/08/multi-tenant-moving-day/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fZlgTf99AQbWhZzY_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Bannière « Multi-Tenant .NET, Part 4: Moving Day », avec des cartons de déménagement, un emblème de guilde et un portrait illustré.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>Databases</category><category>Software Architecture</category></item><item><title>.NET multi-tenant : une base par tenant — partie 3/4</title><link>https://sebastien.rigaux.be/veille/liens/net-multi-tenant-une-base-par-tenant-partie-34</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/net-multi-tenant-une-base-par-tenant-partie-34</guid><description>Avec une base par tenant, EF Core n’a plus besoin de filtre global, de colonne TenantId ni de clé de cache de modèle spécifique : le choix du tenant passe par une chaîne de connexion résolue depuis une base catalogue. Cette isolation simplifie le modèle, mais déplace la complexité vers l’exploitation : chaque migration doit s’appliquer à toutes les bases. L’article détaille aussi le rôle de IDesignTimeDbContextFactory pour permettre à dotnet ef de créer le contexte sans requête ni tenant actif.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/6Kkj_x73h6-CDgUF_image-0.jpg?auto=format,compress&quot; alt=&quot;Une main manipule des câbles réseau colorés devant des équipements installés en rack.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Avec une base par tenant, EF Core n’a plus besoin de filtre global, de colonne &lt;code&gt;TenantId&lt;/code&gt; ni de clé de cache de modèle spécifique : le choix du tenant passe par une chaîne de connexion résolue depuis une base catalogue.&lt;/p&gt;
&lt;p&gt;Cette isolation simplifie le modèle, mais déplace la complexité vers l’exploitation : chaque migration doit s’appliquer à toutes les bases. L’article détaille aussi le rôle de &lt;code&gt;IDesignTimeDbContextFactory&lt;/code&gt; pour permettre à &lt;code&gt;dotnet ef&lt;/code&gt; de créer le contexte sans requête ni tenant actif.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/08/multi-tenant-part-3/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/6Kkj_x73h6-CDgUF_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Une main manipule des câbles réseau colorés devant des équipements installés en rack.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>Databases</category><category>Software Architecture</category></item><item><title>.NET multi-tenant : séparer les données par schéma SQL Server — partie 2/4</title><link>https://sebastien.rigaux.be/veille/liens/net-multi-tenant-separer-les-donnees-par-schema-sql-server-partie-24</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/net-multi-tenant-separer-les-donnees-par-schema-sql-server-partie-24</guid><description>Cette partie 2/4 montre comment isoler les données de chaque tenant dans son propre schéma SQL Server, sans filtre global ni colonne TenantId obligatoire. Le modèle EF Core retrouve ainsi une clé primaire simple, tandis que la frontière d’isolation est portée par la structure de la base. Le changement central tient au cache du modèle : OnModelCreating ne s’exécute qu’une fois par modèle. Il faut intégrer le schéma à la clé via IModelCacheKeyFactory, faute de quoi EF Core peut réutiliser celui du premier tenant. L’article détaille aussi le provisionnement et les migrations par schéma, ainsi que la validation stricte des noms de schéma interpolés dans le SQL.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/vzw31Z0w6cBjGZ5P_image-0.jpg?auto=format,compress&quot; alt=&quot;Visuel intitulé « Multi-Tenant .NET, Part 2 — Shared Database with Schema Separation » : un panneau « House for Rent », un emblème circulaire avec deux épées et un portrait illustré.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Cette partie 2/4 montre comment isoler les données de chaque tenant dans son propre schéma SQL Server, sans filtre global ni colonne &lt;code&gt;TenantId&lt;/code&gt; obligatoire. Le modèle EF Core retrouve ainsi une clé primaire simple, tandis que la frontière d’isolation est portée par la structure de la base.&lt;/p&gt;
&lt;p&gt;Le changement central tient au cache du modèle : &lt;code&gt;OnModelCreating&lt;/code&gt; ne s’exécute qu’une fois par modèle. Il faut intégrer le schéma à la clé via &lt;code&gt;IModelCacheKeyFactory&lt;/code&gt;, faute de quoi EF Core peut réutiliser celui du premier tenant. L’article détaille aussi le provisionnement et les migrations par schéma, ainsi que la validation stricte des noms de schéma interpolés dans le SQL.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/07/multi-tenant-part-2/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/vzw31Z0w6cBjGZ5P_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Visuel intitulé « Multi-Tenant .NET, Part 2 — Shared Database with Schema Separation » : un panneau « House for Rent », un emblème circulaire avec deux épées et un portrait illustré.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>SQL Server</category><category>Software Architecture</category></item><item><title>.NET multi-tenant : requêtes isolées et partitions SQL Server — partie 1/4</title><link>https://sebastien.rigaux.be/veille/liens/net-multi-tenant-requetes-isolees-et-partitions-sql-server-partie-14</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/net-multi-tenant-requetes-isolees-et-partitions-sql-server-partie-14</guid><description>Cette première partie présente une architecture multi-tenant .NET à schéma partagé : EF Core filtre les lectures par tenant et SQL Server partitionne physiquement les lignes pour accélérer l’accès aux données. Le point essentiel : le partitionnement n’est pas une frontière de sécurité ; l’isolation repose sur le filtre global EF Core. L’article détaille aussi la résolution du tenant par requête, l’attribution de son identifiant aux nouvelles lignes et l’ajout des partitions aux migrations avec du SQL brut. La clé primaire doit inclure GuildId, contrainte imposée par SQL Server pour partitionner un index unique.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/hfTn_IrZQUYpxQ9__image-0.jpg?auto=format,compress&quot; alt=&quot;Bannière sur fond d’immeubles résidentiels, titrée « Multi-Tenant .NET, Part 1 — Shared Database with Partitions », avec un emblème d’épées croisées et un portrait illustré.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Cette première partie présente une architecture multi-tenant .NET à schéma partagé : EF Core filtre les lectures par tenant et SQL Server partitionne physiquement les lignes pour accélérer l’accès aux données. Le point essentiel : le partitionnement n’est pas une frontière de sécurité ; l’isolation repose sur le filtre global EF Core.&lt;/p&gt;
&lt;p&gt;L’article détaille aussi la résolution du tenant par requête, l’attribution de son identifiant aux nouvelles lignes et l’ajout des partitions aux migrations avec du SQL brut. La clé primaire doit inclure &lt;code&gt;GuildId&lt;/code&gt;, contrainte imposée par SQL Server pour partitionner un index unique.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/07/multi-tenant-part-1/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/hfTn_IrZQUYpxQ9__image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Bannière sur fond d’immeubles résidentiels, titrée « Multi-Tenant .NET, Part 1 — Shared Database with Partitions », avec un emblème d’épées croisées et un portrait illustré.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>SQL Server</category><category>Security</category></item><item><title>Boucles d’agents en C# avec Microsoft Agent Framework</title><link>https://sebastien.rigaux.be/veille/liens/boucles-dagents-en-c-avec-microsoft-agent-framework</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/boucles-dagents-en-c-avec-microsoft-agent-framework</guid><description>Les boucles d’agents enchaînent action, observation et évaluation pour affiner une réponse ou retenter une opération jusqu’à satisfaire un critère. Jesse Liberty illustre le principe en C# avec Microsoft Agent Framework : un agent de boucle, un évaluateur et une limite d’itérations. L’exemple distingue un marqueur déterministe comme DONE d’un évaluateur basé sur un modèle juge, puis détaille les garde-fous à prévoir : délais, appels idempotents, journalisation et suivi des coûts. Chaque itération ajoute en effet latence et consommation de tokens.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/sDf9Rzn57jqZWsGe_image-0.jpg?auto=format,compress&quot; alt=&quot;Schéma d’une boucle agentique : l’agent agit, observe, évalue, puis recommence ou s’arrête.&quot; width=&quot;800&quot; height=&quot;340&quot; /&gt;&lt;/p&gt;&lt;p&gt;Les boucles d’agents enchaînent action, observation et évaluation pour affiner une réponse ou retenter une opération jusqu’à satisfaire un critère. Jesse Liberty illustre le principe en C# avec Microsoft Agent Framework : un agent de boucle, un évaluateur et une limite d’itérations.&lt;/p&gt;
&lt;p&gt;L’exemple distingue un marqueur déterministe comme &lt;code&gt;DONE&lt;/code&gt; d’un évaluateur basé sur un modèle juge, puis détaille les garde-fous à prévoir : délais, appels idempotents, journalisation et suivi des coûts. Chaque itération ajoute en effet latence et consommation de tokens.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://jesseliberty.com/2026/10/26/prompts-are-dead-long-live-loops/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/sDf9Rzn57jqZWsGe_image-0.jpg?auto=format,compress" width="800" height="340"/><media:description>Schéma d’une boucle agentique : l’agent agit, observe, évalue, puis recommence ou s’arrête.</media:description><category>Microsoft Agent Framework</category><category>C#</category><category>AI Agents</category><category>Model Evaluation</category><category>Workflow Orchestration</category></item><item><title>Elephant-Goldfish Model : les skills de Google pour cadrer les specs</title><link>https://sebastien.rigaux.be/veille/liens/elephant-goldfish-model-les-skills-de-google-pour-cadrer-les-specs</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/elephant-goldfish-model-les-skills-de-google-pour-cadrer-les-specs</guid><description>Elephant-Goldfish Model, un plugin open source de Google, fournit des skills pour explorer une idée, rédiger une spécification et la faire challenger avant l’implémentation. Un agent « Elephant » conserve le contexte du projet ; des reviewers « Goldfish » examinent le document sans l’historique de conversation afin de faire ressortir les hypothèses implicites et les risques. Le dépôt couvre aussi la résolution des retours et la comparaison de la documentation au code. Les revues exigent des contextes de sous-agents indépendants : si l’environnement ne peut pas les créer, EGM interrompt cette étape.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/5iR3jqCDBycrtrSv_image-0.png?auto=format,compress&quot; alt=&quot;Visuel Elephant-Goldfish Model : deux panneaux présentent un éléphant bleu qui se souvient de tout et un poisson rouge orange qui ne se souvient de rien.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;Elephant-Goldfish Model, un plugin open source de Google, fournit des &lt;strong&gt;skills&lt;/strong&gt; pour explorer une idée, rédiger une spécification et la faire challenger avant l’implémentation. Un agent « Elephant » conserve le contexte du projet ; des reviewers « Goldfish » examinent le document sans l’historique de conversation afin de faire ressortir les hypothèses implicites et les risques.&lt;/p&gt;
&lt;p&gt;Le dépôt couvre aussi la résolution des retours et la comparaison de la documentation au code. Les revues exigent des contextes de sous-agents indépendants : si l’environnement ne peut pas les créer, EGM interrompt cette étape.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/google/elephant-goldfish-model&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/5iR3jqCDBycrtrSv_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Visuel Elephant-Goldfish Model : deux panneaux présentent un éléphant bleu qui se souvient de tout et un poisson rouge orange qui ne se souvient de rien.</media:description><category>Agent skills</category><category>Spec-driven development</category><category>AI Agents</category></item><item><title>Accessibilité web : le livre de Laura Kalbag est gratuit en ligne</title><link>https://sebastien.rigaux.be/veille/liens/accessibilite-web-le-livre-de-laura-kalbag-est-gratuit-en-ligne</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/accessibilite-web-le-livre-de-laura-kalbag-est-gratuit-en-ligne</guid><description>Laura Kalbag met Accessibility for Everyone en lecture gratuite sur le Web. Publié initialement en 2017 chez A Book Apart, le livre offre une ressource accessible à la communauté web pour aborder l’accessibilité. L’autrice précise que les bonnes pratiques ont peu changé, mais que certains outils recommandés et intitulés de postes peuvent être dépassés ; les WCAG approchent par ailleurs de leur version 3.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/y7vCKGXoUTU4Qeh2_image-0.png?auto=format,compress&quot; alt=&quot;Couverture sur fond vert portant le titre « Accessibility for Everyone », le nom de Laura Kalbag et la mention « Read for free ». &quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Laura Kalbag met &lt;em&gt;Accessibility for Everyone&lt;/em&gt; en lecture gratuite sur le Web. Publié initialement en 2017 chez A Book Apart, le livre offre une ressource accessible à la communauté web pour aborder l’accessibilité.&lt;/p&gt;
&lt;p&gt;L’autrice précise que les bonnes pratiques ont peu changé, mais que certains outils recommandés et intitulés de postes peuvent être dépassés ; les WCAG approchent par ailleurs de leur version 3.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://accessibilityforeveryone.site/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/y7vCKGXoUTU4Qeh2_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Couverture sur fond vert portant le titre « Accessibility for Everyone », le nom de Laura Kalbag et la mention « Read for free ».</media:description><category>Accessibility</category></item><item><title>Modern Web Guidance : des pratiques web actuelles pour les agents de code</title><link>https://sebastien.rigaux.be/veille/liens/modern-web-guidance-des-pratiques-web-actuelles-pour-les-agents-de-code</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/modern-web-guidance-des-pratiques-web-actuelles-pour-les-agents-de-code</guid><description>Modern Web Guidance fournit aux agents de code des recommandations expertes sur les API du navigateur, CSS, performance et accessibilité, pour les orienter vers des solutions natives plutôt que vers des patterns legacy. Le dépôt rassemble 232 fonctionnalités et 186 cas d’usage, sous forme de skills installables dans plusieurs agents. Le CLI recherche un guide en local, puis l’injecte dans le contexte de l’agent. Les consignes intègrent compatibilité Baseline, fallbacks ciblés et évaluation automatisée ; le projet est annoncé en preview.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/J1hz0dvFok1vq_YK_image-0.png?auto=format,compress&quot; alt=&quot;Visuel du dépôt GoogleChrome/modern-web-guidance, avec le logo Chrome et les compteurs de contributeurs, issues, étoiles et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Modern Web Guidance fournit aux agents de code des recommandations expertes sur les API du navigateur, CSS, performance et accessibilité, pour les orienter vers des solutions natives plutôt que vers des patterns legacy. Le dépôt rassemble 232 fonctionnalités et 186 cas d’usage, sous forme de skills installables dans plusieurs agents.&lt;/p&gt;
&lt;p&gt;Le CLI recherche un guide en local, puis l’injecte dans le contexte de l’agent. Les consignes intègrent compatibilité Baseline, fallbacks ciblés et évaluation automatisée ; le projet est annoncé en preview.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/GoogleChrome/modern-web-guidance&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/J1hz0dvFok1vq_YK_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Visuel du dépôt GoogleChrome/modern-web-guidance, avec le logo Chrome et les compteurs de contributeurs, issues, étoiles et forks.</media:description><category>Agent skills</category><category>AI Agents</category><category>Progressive enhancement</category><category>Accessibility</category><category>Web Performance</category></item><item><title>emoji-picker-react : personnaliser un sélecteur d’émojis React</title><link>https://sebastien.rigaux.be/veille/liens/emoji-picker-react-personnaliser-un-selecteur-demojis-react</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/emoji-picker-react-personnaliser-un-selecteur-demojis-react</guid><description>emoji-picker-react fournit un sélecteur d’émojis pour React, utilisable avec ses styles intégrés ou adapté à l’identité visuelle du produit. Le playground interactif permet de tester les propriétés, les thèmes CSS et des exemples de personnalisation. Le composant couvre notamment la recherche, les tons de peau, les émojis personnalisés et plusieurs langues. Son mode « réactions » affiche d’abord une sélection compacte de réactions populaires, puis donne accès à la bibliothèque complète.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;emoji-picker-react fournit un sélecteur d’émojis pour React, utilisable avec ses styles intégrés ou adapté à l’identité visuelle du produit. Le playground interactif permet de tester les propriétés, les thèmes CSS et des exemples de personnalisation.&lt;/p&gt;
&lt;p&gt;Le composant couvre notamment la recherche, les tons de peau, les émojis personnalisés et plusieurs langues. Son mode « réactions » affiche d’abord une sélection compacte de réactions populaires, puis donne accès à la bibliothèque complète.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ealush.com/emoji-picker-react/#playground&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><category>React</category><category>UI/UX</category></item><item><title>OpenTUI : interfaces terminal en TypeScript avec rendu natif en Zig</title><link>https://sebastien.rigaux.be/veille/liens/opentui-interfaces-terminal-en-typescript-avec-rendu-natif-en-zig</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/opentui-interfaces-terminal-en-typescript-avec-rendu-natif-en-zig</guid><description>OpenTUI permet de construire des interfaces utilisateur pour le terminal en TypeScript, directement ou avec React et Solid. Son moteur de rendu natif est écrit en Zig, et la mise en page s’appuie sur flexbox. La bibliothèque prend en charge les sélecteurs, les champs de saisie et les zones de défilement pilotés au clavier ou à la souris. Elle peut aussi afficher des images, jouer des sons et rendre des graphismes 3D.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/d0ol22PzIPoNO4uR_image-0.png?auto=format,compress&quot; alt=&quot;Logo OpenTUI noir sur fond blanc.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;OpenTUI permet de construire des interfaces utilisateur pour le terminal en TypeScript, directement ou avec React et Solid. Son moteur de rendu natif est écrit en Zig, et la mise en page s’appuie sur flexbox.&lt;/p&gt;
&lt;p&gt;La bibliothèque prend en charge les sélecteurs, les champs de saisie et les zones de défilement pilotés au clavier ou à la souris. Elle peut aussi afficher des images, jouer des sons et rendre des graphismes 3D.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://opentui.com/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/d0ol22PzIPoNO4uR_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Logo OpenTUI noir sur fond blanc.</media:description><category>TypeScript</category><category>Zig</category><category>UI/UX</category></item><item><title>Puck, éditeur visuel pour React : champs et canvas dans la version 0.24</title><link>https://sebastien.rigaux.be/veille/liens/puck-editeur-visuel-pour-react-champs-et-canvas-dans-la-version-024</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/puck-editeur-visuel-pour-react-champs-et-canvas-dans-la-version-024</guid><description>Puck, l’éditeur visuel de pages pour React, ajoute dans sa version 0.24 des groupes et des onglets pour organiser les champs, ainsi qu’un champ checkbox pour sélectionner plusieurs options. Des poignées de déplacement facilitent aussi le réagencement de composants dans des mises en page imbriquées. L’API renderFields permet de composer ces présentations. Côté canvas, InlineTextField rend possible l’édition directe du texte, tandis que fieldTransforms transforme les valeurs au rendu sans modifier les données sous-jacentes.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fqX2nrhIvI2o0pBt_image-0.png?auto=format,compress&quot; alt=&quot;Logo Puck en dégradé bleu-violet sur fond blanc.&quot; width=&quot;1200&quot; height=&quot;675&quot; /&gt;&lt;/p&gt;&lt;p&gt;Puck, l’éditeur visuel de pages pour React, ajoute dans sa version 0.24 des groupes et des onglets pour organiser les champs, ainsi qu’un champ &lt;code&gt;checkbox&lt;/code&gt; pour sélectionner plusieurs options. Des poignées de déplacement facilitent aussi le réagencement de composants dans des mises en page imbriquées.&lt;/p&gt;
&lt;p&gt;L’API &lt;code&gt;renderFields&lt;/code&gt; permet de composer ces présentations. Côté canvas, &lt;code&gt;InlineTextField&lt;/code&gt; rend possible l’édition directe du texte, tandis que &lt;code&gt;fieldTransforms&lt;/code&gt; transforme les valeurs au rendu sans modifier les données sous-jacentes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://puckeditor.com/blog/puck-024&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fqX2nrhIvI2o0pBt_image-0.png?auto=format,compress" width="1200" height="675"/><media:description>Logo Puck en dégradé bleu-violet sur fond blanc.</media:description><category>Puck</category><category>React</category><category>No-code / low-code</category><category>UI/UX</category></item><item><title>React : préserver le progressive enhancement des Server Actions</title><link>https://sebastien.rigaux.be/veille/liens/react-preserver-le-progressive-enhancement-des-server-actions</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/react-preserver-le-progressive-enhancement-des-server-actions</guid><description>React combine &lt;form action&gt;, useActionState et useOptimistic pour gérer les retours d’attente et les mises à jour optimistes tout en conservant un envoi de formulaire avant l’exécution de JavaScript. L’article montre comment cette continuité permet d’enrichir l’interface après hydratation sans abandonner le comportement natif du navigateur. Le point décisif est de garder l’action serveur directement dans action : une fonction cliente intermédiaire casse la soumission sans JavaScript. Pour l’optimisme, useHydrated() permet de choisir entre l’action serveur et sa version enrichie côté client.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React combine &lt;code&gt;&amp;lt;form action&amp;gt;&lt;/code&gt;, &lt;code&gt;useActionState&lt;/code&gt; et &lt;code&gt;useOptimistic&lt;/code&gt; pour gérer les retours d’attente et les mises à jour optimistes tout en conservant un envoi de formulaire avant l’exécution de JavaScript. L’article montre comment cette continuité permet d’enrichir l’interface après hydratation sans abandonner le comportement natif du navigateur.&lt;/p&gt;
&lt;p&gt;Le point décisif est de garder l’action serveur directement dans &lt;code&gt;action&lt;/code&gt; : une fonction cliente intermédiaire casse la soumission sans JavaScript. Pour l’optimisme, &lt;code&gt;useHydrated()&lt;/code&gt; permet de choisir entre l’action serveur et sa version enrichie côté client.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ebey.dev/blog/3myyseusgd22h&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><category>React</category><category>Server Actions</category><category>Progressive enhancement</category><category>Forms</category><category>Hydration</category></item><item><title>C# 15 : des unions exhaustives, avec un coût de boxing à surveiller</title><link>https://sebastien.rigaux.be/veille/liens/c-15-des-unions-exhaustives-avec-un-cout-de-boxing-a-surveiller</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/c-15-des-unions-exhaustives-avec-un-cout-de-boxing-a-surveiller</guid><description>C# 15 introduit le mot-clé union pour représenter une valeur parmi plusieurs types sans les regrouper dans une classe de base ni perdre leur typage dans object. Andrew Lock montre comment les switch expressions vérifient que chaque cas est traité, et comment déclarer des unions comme Result&lt;T&gt;. Le détail à considérer côté performance : l’implémentation générée stocke la valeur dans un object, ce qui boxe les types valeur. L’article présente une implémentation personnalisée avec TryGetValue pour éviter ce boxing dans les switch.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/yi5OJqeAKwzhGLHH_image-0.png?auto=format,compress&quot; alt=&quot;Extrait de code C# déclarant les records Windows, Linux et MacOS, puis une union SupportedOS contenant ces trois types.&quot; width=&quot;600&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;&lt;p&gt;C# 15 introduit le mot-clé &lt;code&gt;union&lt;/code&gt; pour représenter une valeur parmi plusieurs types sans les regrouper dans une classe de base ni perdre leur typage dans &lt;code&gt;object&lt;/code&gt;. Andrew Lock montre comment les &lt;code&gt;switch&lt;/code&gt; expressions vérifient que chaque cas est traité, et comment déclarer des unions comme &lt;code&gt;Result&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le détail à considérer côté performance : l’implémentation générée stocke la valeur dans un &lt;code&gt;object&lt;/code&gt;, ce qui boxe les types valeur. L’article présente une implémentation personnalisée avec &lt;code&gt;TryGetValue&lt;/code&gt; pour éviter ce boxing dans les &lt;code&gt;switch&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://andrewlock.net/exploring-the-dotnet-11-preview-2-dotnet-gets-union-types/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/yi5OJqeAKwzhGLHH_image-0.png?auto=format,compress" width="600" height="400"/><media:description>Extrait de code C# déclarant les records Windows, Linux et MacOS, puis une union SupportedOS contenant ces trois types.</media:description><category>C#</category><category>.NET</category></item><item><title>Microsoft Agent Framework : choisir où intercepter les appels</title><link>https://sebastien.rigaux.be/veille/liens/microsoft-agent-framework-choisir-ou-intercepter-les-appels</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/microsoft-agent-framework-choisir-ou-intercepter-les-appels</guid><description>Dans Microsoft Agent Framework, le middleware du ChatClient intercepte les messages échangés avec le LLM, tandis que le middleware d’agent agit sur l’exécution globale, notamment pour gérer session, identité ou budget de tokens. Cette distinction aide à placer la journalisation ou la modification au bon niveau. L’exemple C# ajoute un middleware d’invocation de fonction qui journalise les appels à l’outil Tavily du seul agent Researcher, sans modifier les autres agents. La trace affiche le nom de la fonction et ses arguments.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Ekq7OL1aNFQGqPQX_image-0.jpg?auto=format,compress&quot; alt=&quot;Trois joueurs de basketball illustrent une séquence : le premier tient le ballon, le deuxième observe avec des jumelles et le troisième lance le ballon vers le panier.&quot; width=&quot;765&quot; height=&quot;457&quot; /&gt;&lt;/p&gt;&lt;p&gt;Dans Microsoft Agent Framework, le middleware du &lt;code&gt;ChatClient&lt;/code&gt; intercepte les messages échangés avec le LLM, tandis que le middleware d’agent agit sur l’exécution globale, notamment pour gérer session, identité ou budget de tokens. Cette distinction aide à placer la journalisation ou la modification au bon niveau.&lt;/p&gt;
&lt;p&gt;L’exemple C# ajoute un middleware d’invocation de fonction qui journalise les appels à l’outil Tavily du seul agent Researcher, sans modifier les autres agents. La trace affiche le nom de la fonction et ses arguments.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://jesseliberty.com/2026/08/08/chatclient-middleware-vs-agent-middleware/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Ekq7OL1aNFQGqPQX_image-0.jpg?auto=format,compress" width="765" height="457"/><media:description>Trois joueurs de basketball illustrent une séquence : le premier tient le ballon, le deuxième observe avec des jumelles et le troisième lance le ballon vers le panier.</media:description><category>Microsoft Agent Framework</category><category>AI Agents</category><category>C#</category><category>Observability</category></item><item><title>C# : IfItQuacks transforme le duck typing en bibliothèque</title><link>https://sebastien.rigaux.be/veille/liens/c-ifitquacks-transforme-le-duck-typing-en-bibliotheque</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/c-ifitquacks-transforme-le-duck-typing-en-bibliotheque</guid><description>IfItQuacks permet d’utiliser en C# des objets qui correspondent à une interface sans l’implémenter ni hériter d’une classe commune. L’attribut [DuckTyped] déclenche un générateur de code qui vérifie la compatibilité à la compilation et crée un adaptateur, sans réflexion ni dynamic. Les types anonymes peuvent aussi servir de stubs de test : un objet { Name = &quot;Steven&quot;, Age = 90 } satisfait ainsi une interface IPerson. Les adaptateurs préservent par ailleurs l’identité en transférant Equals, GetHashCode et ToString à l’objet sous-jacent.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/dW9zy7zmosJKDENv_image-1.png?auto=format,compress&quot; alt=&quot;Illustration jaune « Buy me a coffee » avec une tasse stylisée.&quot; width=&quot;580&quot; height=&quot;146&quot; /&gt;&lt;/p&gt;&lt;p&gt;IfItQuacks permet d’utiliser en C# des objets qui correspondent à une interface sans l’implémenter ni hériter d’une classe commune. L’attribut &lt;code&gt;[DuckTyped]&lt;/code&gt; déclenche un générateur de code qui vérifie la compatibilité à la compilation et crée un adaptateur, sans réflexion ni &lt;code&gt;dynamic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Les types anonymes peuvent aussi servir de stubs de test : un objet &lt;code&gt;{ Name = &amp;quot;Steven&amp;quot;, Age = 90 }&lt;/code&gt; satisfait ainsi une interface &lt;code&gt;IPerson&lt;/code&gt;. Les adaptateurs préservent par ailleurs l’identité en transférant &lt;code&gt;Equals&lt;/code&gt;, &lt;code&gt;GetHashCode&lt;/code&gt; et &lt;code&gt;ToString&lt;/code&gt; à l’objet sous-jacent.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/41599817-4457-441e-b874-1a5c67f4e7cc&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/dW9zy7zmosJKDENv_image-1.png?auto=format,compress" width="580" height="146"/><media:description>Illustration jaune « Buy me a coffee » avec une tasse stylisée.</media:description><category>C#</category><category>.NET</category></item><item><title>.NET : modéliser les intervalles comme objets métier</title><link>https://sebastien.rigaux.be/veille/liens/net-modeliser-les-intervalles-comme-objets-metier</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/net-modeliser-les-intervalles-comme-objets-metier</guid><description>CodoMetis.ValueRanges propose des types d’intervalle .NET pour remplacer les paires de dates et leur logique dispersée. Les cinq variantes — finie, sans borne gauche ou droite, infinie et vide — rendent explicites les formes possibles et leurs règles, tandis que les opérations comme Contains et Overlaps s’exécutent en mémoire. Le package EF Core associé fait le pont avec PostgreSQL : les mêmes opérations dans le domaine sont traduites en opérateurs SQL via Npgsql. L’article détaille aussi le compromis de conception : des records abstraits plutôt que des structs, pour représenter les variantes par une hiérarchie de types.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/2CXATPwyNQbCQXAM_image-0.webp?auto=format,compress&quot; alt=&quot;Bandeau de l’article avec son titre, le nom de Ricardo Groß et la date « Jun 11 », sur fond blanc.&quot; width=&quot;1200&quot; height=&quot;627&quot; /&gt;&lt;/p&gt;&lt;p&gt;CodoMetis.ValueRanges propose des types d’intervalle .NET pour remplacer les paires de dates et leur logique dispersée. Les cinq variantes — finie, sans borne gauche ou droite, infinie et vide — rendent explicites les formes possibles et leurs règles, tandis que les opérations comme &lt;code&gt;Contains&lt;/code&gt; et &lt;code&gt;Overlaps&lt;/code&gt; s’exécutent en mémoire.&lt;/p&gt;
&lt;p&gt;Le package EF Core associé fait le pont avec PostgreSQL : les mêmes opérations dans le domaine sont traduites en opérateurs SQL via Npgsql. L’article détaille aussi le compromis de conception : des records abstraits plutôt que des structs, pour représenter les variantes par une hiérarchie de types.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/caffeinatedcoder/the-interval-is-the-thing-modelling-range-types-as-first-class-domain-objects-in-net-3jha&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/2CXATPwyNQbCQXAM_image-0.webp?auto=format,compress" width="1200" height="627"/><media:description>Bandeau de l’article avec son titre, le nom de Ricardo Groß et la date « Jun 11 », sur fond blanc.</media:description><category>.NET</category><category>C#</category><category>Entity Framework Core</category><category>PostgreSQL</category><category>Software Architecture</category></item><item><title>WordPress : une faille RCE exploite la fenêtre des mises à jour</title><link>https://sebastien.rigaux.be/veille/liens/wordpress-une-faille-rce-exploite-la-fenetre-des-mises-a-jour</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/wordpress-une-faille-rce-exploite-la-fenetre-des-mises-a-jour</guid><description>Une faille RCE dans WordPress Core permet à un attaquant non authentifié d’exécuter du code pendant une mise à jour complète, si le répertoire temporaire est accessible depuis le Web. Wordfence indique avoir bloqué 62 969 tentatives en 24 heures ; le correctif est disponible dans la version 7.1.4. Le risque tient à une course contre le nettoyage : les fichiers d’installation sont décompressés dans un chemin prévisible sous wp-content/upgrade, et des attaquants interrogent notamment setup-config.php pour tomber sur la fenêtre d’exposition, qui peut ne durer que quelques secondes. La faille concerne les versions 4.7 à 7.1.3.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/XZwPRoEwVwbHUkLi_image-0.webp?auto=format,compress&quot; alt=&quot;Logo WordPress blanc sur des panneaux bleus superposés, avec des chemins de fichiers en arrière-plan.&quot; width=&quot;900&quot; height=&quot;470&quot; /&gt;&lt;/p&gt;&lt;p&gt;Une faille RCE dans WordPress Core permet à un attaquant non authentifié d’exécuter du code pendant une mise à jour complète, si le répertoire temporaire est accessible depuis le Web. Wordfence indique avoir bloqué 62 969 tentatives en 24 heures ; le correctif est disponible dans la version 7.1.4.&lt;/p&gt;
&lt;p&gt;Le risque tient à une course contre le nettoyage : les fichiers d’installation sont décompressés dans un chemin prévisible sous &lt;code&gt;wp-content/upgrade&lt;/code&gt;, et des attaquants interrogent notamment &lt;code&gt;setup-config.php&lt;/code&gt; pour tomber sur la fenêtre d’exposition, qui peut ne durer que quelques secondes. La faille concerne les versions 4.7 à 7.1.3.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://thehackernews.com/2026/10/wordpress-rce-flaw-draws-nearly-63000.html?m=1&amp;amp;fbclid=IwVERDUAVSgZFleHRuA2FlbQIxMQBwZG9mBWZkaWQWURVldsH84Prb_V9O7MJ8RzmvQSBsuHNydGMGYXBwX2lkCjY2Mjg1NjgzNzkAAR8-ptU2QLdLnxH-DOwi8ZTpvDQvoHH5ARUtADcS_XgLJpuQ6RDMlL_aD1TW9g_aem_-NUl7MFU_kQudSHH6dvgVQ&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/XZwPRoEwVwbHUkLi_image-0.webp?auto=format,compress" width="900" height="470"/><media:description>Logo WordPress blanc sur des panneaux bleus superposés, avec des chemins de fichiers en arrière-plan.</media:description><category>Security</category></item><item><title>CVEngine : relier découverte de surface d’attaque et validation des CVE</title><link>https://sebastien.rigaux.be/veille/liens/cvengine-relier-decouverte-de-surface-dattaque-et-validation-des-cve</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/cvengine-relier-decouverte-de-surface-dattaque-et-validation-des-cve</guid><description>CVEngine regroupe dans une plateforme auto-hébergée la découverte continue d’actifs, les scans de vulnérabilités et le rapprochement avec les CVE exploitées. Le résultat vise à prioriser les failles réellement applicables, avec validation en lecture seule et éléments de preuve plutôt qu’une simple liste d’alertes. La version 1.3 ajoute des Sentinels pour lancer les scans depuis des réseaux privés, ainsi qu’une intégration OpenVAS désactivée par défaut. Les résultats alimentent le même inventaire et les mêmes niveaux de sévérité ; l’outil expose aussi une API REST et une intégration MCP.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/5CEuysgDJnMsu6zd_image-0.png?auto=format,compress&quot; alt=&quot;Bannière GitHub CVEngine avec son nom, une courte description, les nombres de contributeurs, issues, étoiles et forks, et une petite image d’une personne tendant les mains.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;CVEngine regroupe dans une plateforme auto-hébergée la découverte continue d’actifs, les scans de vulnérabilités et le rapprochement avec les CVE exploitées. Le résultat vise à prioriser les failles réellement applicables, avec validation en lecture seule et éléments de preuve plutôt qu’une simple liste d’alertes.&lt;/p&gt;
&lt;p&gt;La version 1.3 ajoute des Sentinels pour lancer les scans depuis des réseaux privés, ainsi qu’une intégration OpenVAS désactivée par défaut. Les résultats alimentent le même inventaire et les mêmes niveaux de sévérité ; l’outil expose aussi une API REST et une intégration MCP.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/hevnsnt/CVEngine&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/5CEuysgDJnMsu6zd_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière GitHub CVEngine avec son nom, une courte description, les nombres de contributeurs, issues, étoiles et forks, et une petite image d’une personne tendant les mains.</media:description><category>Security</category><category>Penetration testing</category><category>Self-hosting</category></item><item><title>Mautic : automatiser le marketing en gardant la maîtrise des données</title><link>https://sebastien.rigaux.be/veille/liens/mautic-automatiser-le-marketing-en-gardant-la-maitrise-des-donnees</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/mautic-automatiser-le-marketing-en-gardant-la-maitrise-des-donnees</guid><description>Mautic est une plateforme open source d’automatisation marketing qui regroupe campagnes, emails, pages d’atterrissage et gestion des contacts. Elle peut être hébergée sur l’infrastructure de l’organisation, avec une API REST et des plugins pour l’intégrer et l’étendre. La page met aussi en avant la création de campagnes par glisser-déposer, le scoring des leads et des fonctions orientées confidentialité. Des cas d’usage cités incluent l’envoi quotidien de plus d’un million d’emails personnalisés et multilingues dans l’e-commerce.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/QcT3-uJG_tmmZosI_image-0.jpg?auto=format,compress&quot; alt=&quot;Montagnes enneigées sous un voile violet, avec le texte « Free Your Marketing! empowered by mautic ».&quot; width=&quot;1919&quot; height=&quot;640&quot; /&gt;&lt;/p&gt;&lt;p&gt;Mautic est une plateforme open source d’automatisation marketing qui regroupe campagnes, emails, pages d’atterrissage et gestion des contacts. Elle peut être hébergée sur l’infrastructure de l’organisation, avec une API REST et des plugins pour l’intégrer et l’étendre.&lt;/p&gt;
&lt;p&gt;La page met aussi en avant la création de campagnes par glisser-déposer, le scoring des leads et des fonctions orientées confidentialité. Des cas d’usage cités incluent l’envoi quotidien de plus d’un million d’emails personnalisés et multilingues dans l’e-commerce.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://mautic.org/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/QcT3-uJG_tmmZosI_image-0.jpg?auto=format,compress" width="1919" height="640"/><media:description>Montagnes enneigées sous un voile violet, avec le texte « Free Your Marketing! empowered by mautic ».</media:description><category>Marketing automation</category><category>Self-hosting</category><category>Open Source</category></item><item><title>BillionMail : héberger sa plateforme d’e-mailing et ses campagnes</title><link>https://sebastien.rigaux.be/veille/liens/billionmail-heberger-sa-plateforme-de-mailing-et-ses-campagnes</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/billionmail-heberger-sa-plateforme-de-mailing-et-ses-campagnes</guid><description>BillionMail regroupe serveur mail, newsletters et marketing par e-mail dans une solution open source à auto-héberger. Le dépôt présente un parcours de configuration qui relie domaine et vérification DNS, puis création et envoi de campagnes, avec gestion de listes et de tags. Le projet s’appuie sur Docker et propose aussi une installation via aaPanel. Il intègre RoundCube pour le webmail, des outils d’analyse des envois et une licence AGPLv3 ; l’exploitation du service reste donc à la charge de l’équipe qui l’héberge.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/XjK3o0AbUsXd_m7Y_image-0.png?auto=format,compress&quot; alt=&quot;Bannière GitHub de BillionMail : nom du projet, description d’un service de messagerie et de marketing par e-mail auto-hébergé, et compteurs de contributeurs, issues, étoiles et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;BillionMail regroupe serveur mail, newsletters et marketing par e-mail dans une solution open source à auto-héberger. Le dépôt présente un parcours de configuration qui relie domaine et vérification DNS, puis création et envoi de campagnes, avec gestion de listes et de tags.&lt;/p&gt;
&lt;p&gt;Le projet s’appuie sur Docker et propose aussi une installation via aaPanel. Il intègre RoundCube pour le webmail, des outils d’analyse des envois et une licence AGPLv3 ; l’exploitation du service reste donc à la charge de l’équipe qui l’héberge.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Billionmail/BillionMail?fbclid=IwZnRzaAVSfsRleHRuA2FlbQIxMQBwZG9mBWZkaWQWURXNcp56FMhsSBMENWsMwQT7qCd6y3NydGMGYXBwX2lkCjY2Mjg1NjgzNzkAAR_MI9RcqU99pGd4uxK2p9-mnrPt77hPr6xfWTGamacb-oeBIqlbmf9PZ_hfIA_aem__boTMF88wTbUjGAZtHUMgQ&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/XjK3o0AbUsXd_m7Y_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Bannière GitHub de BillionMail : nom du projet, description d’un service de messagerie et de marketing par e-mail auto-hébergé, et compteurs de contributeurs, issues, étoiles et forks.</media:description><category>Marketing automation</category><category>Self-hosting</category><category>Open Source</category><category>Docker</category></item><item><title>Metalama : générer des patterns C# et faire appliquer l’architecture au build</title><link>https://sebastien.rigaux.be/veille/liens/metalama-generer-des-patterns-c-et-faire-appliquer-larchitecture-au-build</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/metalama-generer-des-patterns-c-et-faire-appliquer-larchitecture-au-build</guid><description>Metalama automatise les patterns transverses en C# avec des aspects qui génèrent le code à la compilation, tout en vérifiant les règles d’architecture dès l’édition. L’implémentation répétitive reste ainsi hors du code métier et du dépôt, tandis qu’un même aspect peut être appliqué à une méthode ou à un ensemble de méthodes sélectionnées par code. Un aspect peut, par exemple, envelopper une méthode dans un try/catch pour journaliser son entrée, son résultat et ses exceptions. Metalama permet aussi de prévisualiser le code transformé et de le déboguer, pour rendre ces transformations inspectables.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://bd7d5fa0.cdn.prismic.io/bd7d5fa0/M-33MF2ZXaLfipgW_image-0.svg?auto=compress,format&quot; alt=&quot;&quot; width=&quot;750&quot; height=&quot;700&quot; /&gt;&lt;/p&gt;&lt;p&gt;Metalama automatise les patterns transverses en C# avec des aspects qui génèrent le code à la compilation, tout en vérifiant les règles d’architecture dès l’édition. L’implémentation répétitive reste ainsi hors du code métier et du dépôt, tandis qu’un même aspect peut être appliqué à une méthode ou à un ensemble de méthodes sélectionnées par code.&lt;/p&gt;
&lt;p&gt;Un aspect peut, par exemple, envelopper une méthode dans un &lt;code&gt;try/catch&lt;/code&gt; pour journaliser son entrée, son résultat et ses exceptions. Metalama permet aussi de prévisualiser le code transformé et de le déboguer, pour rendre ces transformations inspectables.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://postsharp.net/metalama&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://bd7d5fa0.cdn.prismic.io/bd7d5fa0/M-33MF2ZXaLfipgW_image-0.svg?auto=compress,format" width="750" height="700"/><media:description/><category>C#</category><category>.NET</category><category>Software Architecture</category><category>Developer Experience</category></item><item><title>Motherload importe YAML, JSONC, CSV et Markdown typés dans TypeScript</title><link>https://sebastien.rigaux.be/veille/liens/motherload-importe-yaml-jsonc-csv-et-markdown-types-dans-typescript</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/motherload-importe-yaml-jsonc-csv-et-markdown-types-dans-typescript</guid><description>Motherload permet d’importer des fichiers de données comme des modules TypeScript typés d’après leur contenu. Le projet prend en charge TOML, YAML, JSONC, JSON5, CSV, TSV, Markdown, texte brut et .env ; les types sont disponibles dans l’éditeur et les erreurs de parsing remontent dans tsc avec leur emplacement. Le type-checking utilise les content mappers de TypeScript 7.1, actuellement en bêta, et exige --runExternalCode. À l’exécution, un preload ou un plugin adapte les mêmes imports à Node.js et à différents bundlers.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/dXKQOoq5YQNzTzMV_image-0.png?auto=format,compress&quot; alt=&quot;Visuel Motherload présentant à gauche le texte « Import data files into TypeScript, fully typed » et à droite un extrait TypeScript important des fichiers plans.toml, team.yaml, strings.jsonc, posts.csv, notes.md et .env.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Motherload permet d’importer des fichiers de données comme des modules TypeScript &lt;strong&gt;typés d’après leur contenu&lt;/strong&gt;. Le projet prend en charge TOML, YAML, JSONC, JSON5, CSV, TSV, Markdown, texte brut et &lt;code&gt;.env&lt;/code&gt; ; les types sont disponibles dans l’éditeur et les erreurs de parsing remontent dans &lt;code&gt;tsc&lt;/code&gt; avec leur emplacement.&lt;/p&gt;
&lt;p&gt;Le type-checking utilise les &lt;em&gt;content mappers&lt;/em&gt; de TypeScript 7.1, actuellement en bêta, et exige &lt;code&gt;--runExternalCode&lt;/code&gt;. À l’exécution, un preload ou un plugin adapte les mêmes imports à Node.js et à différents bundlers.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://motherload.dev/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/dXKQOoq5YQNzTzMV_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Visuel Motherload présentant à gauche le texte « Import data files into TypeScript, fully typed » et à droite un extrait TypeScript important des fichiers plans.toml, team.yaml, strings.jsonc, posts.csv, notes.md et .env.</media:description><category>TypeScript</category><category>Developer Experience</category><category>Node.js</category></item><item><title>Next.js : une skill IA analyse et réduit les imports JavaScript</title><link>https://sebastien.rigaux.be/veille/liens/nextjs-une-skill-ia-analyse-et-reduit-les-imports-javascript</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/nextjs-une-skill-ia-analyse-et-reduit-les-imports-javascript</guid><description>Next.js 16.4 fournit une skill d’agent IA qui analyse le graphe des modules et des chunks Turbopack pour repérer les imports qui alourdissent le JavaScript livré. Elle peut notamment détecter qu’un import statique ailleurs dans le bundle annule le chargement différé d’un composant, puis proposer des changements à examiner avant de les appliquer. L’analyseur compare aussi des snapshots et filtre le code chargé au rendu initial. Vercel rapporte près de deux mégaoctets de JavaScript compressé économisés sur v0 et vercel.com ; les corrections ont été vérifiées sur des déploiements preview. L’outil requiert Turbopack, le bundler par défaut depuis Next.js 16.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/LsCiTo3_qcg8nIQG_image-0.png?auto=format,compress&quot; alt=&quot;Visuel noir avec le texte « Ship less JavaScript in Next.js with your AI agent » et le logo Next.js.&quot; width=&quot;2400&quot; height=&quot;1256&quot; /&gt;&lt;/p&gt;&lt;p&gt;Next.js 16.4 fournit une skill d’agent IA qui analyse le graphe des modules et des chunks Turbopack pour repérer les imports qui alourdissent le JavaScript livré. Elle peut notamment détecter qu’un import statique ailleurs dans le bundle annule le chargement différé d’un composant, puis proposer des changements à examiner avant de les appliquer.&lt;/p&gt;
&lt;p&gt;L’analyseur compare aussi des snapshots et filtre le code chargé au rendu initial. Vercel rapporte près de deux mégaoctets de JavaScript compressé économisés sur v0 et vercel.com ; les corrections ont été vérifiées sur des déploiements preview. L’outil requiert Turbopack, le bundler par défaut depuis Next.js 16.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://nextjs.org/blog/ship-less-javascript-with-ai&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/LsCiTo3_qcg8nIQG_image-0.png?auto=format,compress" width="2400" height="1256"/><media:description>Visuel noir avec le texte « Ship less JavaScript in Next.js with your AI agent » et le logo Next.js.</media:description><category>Next.js</category><category>Agent skills</category><category>Web Performance</category><category>Turbopack</category></item><item><title>TanStack DB 1.0 RC1 : les oracles pour fiabiliser le code généré par des agents</title><link>https://sebastien.rigaux.be/veille/liens/tanstack-db-10-rc1-les-oracles-pour-fiabiliser-le-code-genere-par-des-agents</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/tanstack-db-10-rc1-les-oracles-pour-fiabiliser-le-code-genere-par-des-agents</guid><description>TanStack DB passe en 1.0 RC1 après un important travail de stabilisation. Kyle Mathews détaille comment des oracles de test — des modèles indépendants qui calculent le comportement attendu — et des tests property-based ont révélé des bugs dans les mises à jour de collections et les messages envoyés aux abonnés. Ces références exécutables donnent aussi aux agents de code des règles précises à préserver lorsqu’ils modifient l’implémentation. Le compromis est explicite : écrire et affiner les modèles demande du travail, mais leur simplicité facilite la vérification d’algorithmes plus complexes. La version RC propose par ailleurs une adoption progressive, des API REST existantes vers la persistance locale, le mode offline et la synchronisation temps réel.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/21BsJxsdofB3ufTH_image-0.jpg?auto=format,compress&quot; alt=&quot;Carte illustrée de montagnes, de vallées et de chemins pointillés reliant différents points.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack DB passe en 1.0 RC1 après un important travail de stabilisation. Kyle Mathews détaille comment des &lt;strong&gt;oracles de test&lt;/strong&gt; — des modèles indépendants qui calculent le comportement attendu — et des tests property-based ont révélé des bugs dans les mises à jour de collections et les messages envoyés aux abonnés.&lt;/p&gt;
&lt;p&gt;Ces références exécutables donnent aussi aux agents de code des règles précises à préserver lorsqu’ils modifient l’implémentation. Le compromis est explicite : écrire et affiner les modèles demande du travail, mais leur simplicité facilite la vérification d’algorithmes plus complexes. La version RC propose par ailleurs une adoption progressive, des API REST existantes vers la persistance locale, le mode offline et la synchronisation temps réel.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/tanstack-db-1.0-rc1-going-all-in-on-oracles&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/21BsJxsdofB3ufTH_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Carte illustrée de montagnes, de vallées et de chemins pointillés reliant différents points.</media:description><category>TanStack DB</category><category>Property-based testing</category><category>Testing</category><category>AI Agents</category><category>Local-first</category></item><item><title>Vinext 1.4 : moins de travail serveur et une hydratation plus rapide</title><link>https://sebastien.rigaux.be/veille/liens/vinext-14-moins-de-travail-serveur-et-une-hydratation-plus-rapide</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/vinext-14-moins-de-travail-serveur-et-une-hydratation-plus-rapide</guid><description>Vinext 1.4 réduit le travail à plusieurs étapes du rendu : les layouts App Router s’exécutent une seule fois par requête, le prefetch des routes dynamiques ne génère plus la page entière et les chunks nécessaires à l’hydratation se compilent en arrière-plan dans Chrome récent. Sur le benchmark Hacker News, l’éditeur mesure 31,1 ms de CPU par requête, contre 54,4 ms en 1.3 et 33,7 ms pour Next.js. La version synchronise aussi la génération du HTML et du payload RSC en cache. Les résultats restent toutefois dépendants du scénario : sur un prototype de site éditorial, Next.js peint plus vite et consomme moins de CPU par requête. Le test de TanStack Redact révèle un autre compromis : moins de JavaScript téléchargé, mais une hydratation nettement plus coûteuse sur les pages chargées.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/VoW3Vlu1ZaFTUg9z_image-0.png?auto=format,compress&quot; alt=&quot;Visuel du billet Vinext 1.4, avec son titre, un résumé des changements et la date du 28 octobre 2026.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Vinext 1.4 réduit le travail à plusieurs étapes du rendu : les layouts App Router s’exécutent une seule fois par requête, le prefetch des routes dynamiques ne génère plus la page entière et les chunks nécessaires à l’hydratation se compilent en arrière-plan dans Chrome récent. Sur le benchmark Hacker News, l’éditeur mesure 31,1 ms de CPU par requête, contre 54,4 ms en 1.3 et 33,7 ms pour Next.js.&lt;/p&gt;
&lt;p&gt;La version synchronise aussi la génération du HTML et du payload RSC en cache. Les résultats restent toutefois dépendants du scénario : sur un prototype de site éditorial, Next.js peint plus vite et consomme moins de CPU par requête. Le test de TanStack Redact révèle un autre compromis : moins de JavaScript téléchargé, mais une hydratation nettement plus coûteuse sur les pages chargées.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://vinext.dev/blog/vinext-1-4&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/VoW3Vlu1ZaFTUg9z_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Visuel du billet Vinext 1.4, avec son titre, un résumé des changements et la date du 28 octobre 2026.</media:description><category>Vinext</category><category>Next.js</category><category>Web Performance</category><category>Hydration</category><category>Prefetching</category></item><item><title>TanStack AI 1.0 : un cœur stable, un harness encore expérimental</title><link>https://sebastien.rigaux.be/veille/liens/tanstack-ai-10-un-coeur-stable-un-harness-encore-experimental</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/tanstack-ai-10-un-coeur-stable-un-harness-encore-experimental</guid><description>TanStack AI 1.0 stabilise ses API principales pour composer chat, outils, médias et intégrations avec plusieurs fournisseurs et frameworks UI. Les adapters tree-shakable et les tests de bout en bout sur fixtures déterministes permettent de vérifier les flux sans appels réels aux modèles. Le harness d’agents ajoute sessions durables, interruptions et travail en arrière-plan, mais reste en 0.x et peut changer lors d’une version mineure. Pour migrer, il faut mettre à niveau ensemble les packages stables et fournir explicitement un threadId ; le contrôle des types ne migre pas les conversations ni les fichiers persistés.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/WLRRw7i7xhI86EPe_image-0.jpg?auto=format,compress&quot; alt=&quot;Visuel TanStack AI 1.0 avec les logos TanStack, la mention « AI building blocks for TypeScript » et un palmier sur fond dégradé.&quot; width=&quot;1920&quot; height=&quot;1080&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack AI 1.0 stabilise ses API principales pour composer chat, outils, médias et intégrations avec plusieurs fournisseurs et frameworks UI. Les adapters tree-shakable et les tests de bout en bout sur fixtures déterministes permettent de vérifier les flux sans appels réels aux modèles.&lt;/p&gt;
&lt;p&gt;Le harness d’agents ajoute sessions durables, interruptions et travail en arrière-plan, mais reste en 0.x et peut changer lors d’une version mineure. Pour migrer, il faut mettre à niveau ensemble les packages stables et fournir explicitement un &lt;code&gt;threadId&lt;/code&gt; ; le contrôle des types ne migre pas les conversations ni les fichiers persistés.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/tanstack-ai-1-0&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/WLRRw7i7xhI86EPe_image-0.jpg?auto=format,compress" width="1920" height="1080"/><media:description>Visuel TanStack AI 1.0 avec les logos TanStack, la mention « AI building blocks for TypeScript » et un palmier sur fond dégradé.</media:description><category>TanStack AI</category><category>LLMs</category><category>AI Agents</category><category>TypeScript</category><category>Testing</category></item><item><title>TanStack Redact réduit le runtime client de React</title><link>https://sebastien.rigaux.be/veille/liens/tanstack-redact-reduit-le-runtime-client-de-react</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/tanstack-redact-reduit-le-runtime-client-de-react</guid><description>TanStack Redact 0.2.0 remplace React et React DOM dans le navigateur sans modifier le code de l’application. Ses intégrations stables couvrent TanStack Start, Vite, Vinext et Next.js ; dans ces deux derniers frameworks, React reste chargé du rendu serveur tandis que Redact gère l’hydratation et le rendu client. Les mesures fournies par TanStack montrent des réductions de bundle allant de 20,4 % à 70,5 % sur leurs applications de référence, mais ces gains varient selon le projet. Le compromis est concret : Redact rend de façon synchrone, sans time slicing ni rendu interruptible de React. Un rendu lourd peut donc retarder les interactions ; la compatibilité et les écrans les plus chargés méritent d’être vérifiés dans chaque application.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/VmfoXPThQXMAljxd_image-0.jpg?auto=format,compress&quot; alt=&quot;Visuel TanStack Redact indiquant « Your React app. Less JavaScript. » et affichant les logos de TanStack Start, Vite, Vinext et Next.js.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack Redact 0.2.0 remplace React et React DOM dans le navigateur sans modifier le code de l’application. Ses intégrations stables couvrent TanStack Start, Vite, Vinext et Next.js ; dans ces deux derniers frameworks, React reste chargé du rendu serveur tandis que Redact gère l’hydratation et le rendu client.&lt;/p&gt;
&lt;p&gt;Les mesures fournies par TanStack montrent des réductions de bundle allant de 20,4 % à 70,5 % sur leurs applications de référence, mais ces gains varient selon le projet. Le compromis est concret : Redact rend de façon synchrone, sans time slicing ni rendu interruptible de React. Un rendu lourd peut donc retarder les interactions ; la compatibilité et les écrans les plus chargés méritent d’être vérifiés dans chaque application.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/introducing-tanstack-redact?ck_subscriber_id=2550494205&amp;amp;utm_source=convertkit&amp;amp;utm_medium=email&amp;amp;utm_campaign=%E2%9A%9B%EF%B8%8F%20This%20Week%20In%20React%20%23303%3A%20TanStack%2C%20Next.js%2C%20Vinext%2C%20Motion%2C%20React%20Hook%20Form%20%7C%20Expo%20Desktop%2C%20Legend%20Spark%2C%20Nitro%2C%20Exact%2C%20Skia%2C%20Screens%2C%20Unistyles%20%7C%20Node.js%2C%20Bun%2C%20SWC%2C%20Content%20Mappers%2C%20pnpm%2C%20Biome%20-%2023928066&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/VmfoXPThQXMAljxd_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Visuel TanStack Redact indiquant « Your React app. Less JavaScript. » et affichant les logos de TanStack Start, Vite, Vinext et Next.js.</media:description><category>TanStack Redact</category><category>React</category><category>Hydration</category><category>Web Performance</category></item><item><title>OpnForm : création de formulaires open source, cloud ou auto-hébergée</title><link>https://sebastien.rigaux.be/veille/liens/opnform-creation-de-formulaires-open-source-cloud-ou-auto-hebergee</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/opnform-creation-de-formulaires-open-source-cloud-ou-auto-hebergee</guid><description>OpnForm est un éditeur de formulaires open source qui propose aussi bien un service cloud qu’un déploiement auto-hébergé. Le dépôt documente des fonctions concrètes pour l’exploitation et la maintenance : limites de taille des bundles, migrations d’index PostgreSQL sans bloquer les écritures, environnements Docker isolés pour les worktrees et contrôles des dépendances. Il expose aussi un serveur MCP permettant aux agents IA de créer et prévisualiser des brouillons, avec une gestion des versions pour restaurer des révisions.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/2LIDtYs1BVosHHc__image-0.png?auto=format,compress&quot; alt=&quot;Logo OpnForm sur fond clair, accompagné de la mention « The open-source form builder ».&quot; width=&quot;1200&quot; height=&quot;675&quot; /&gt;&lt;/p&gt;&lt;p&gt;OpnForm est un éditeur de formulaires open source qui propose aussi bien un service cloud qu’un déploiement auto-hébergé. Le dépôt documente des fonctions concrètes pour l’exploitation et la maintenance : limites de taille des bundles, migrations d’index PostgreSQL sans bloquer les écritures, environnements Docker isolés pour les worktrees et contrôles des dépendances. Il expose aussi un serveur MCP permettant aux agents IA de créer et prévisualiser des brouillons, avec une gestion des versions pour restaurer des révisions.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/OpnForm/OpnForm&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/2LIDtYs1BVosHHc__image-0.png?auto=format,compress" width="1200" height="675"/><media:description>Logo OpnForm sur fond clair, accompagné de la mention « The open-source form builder ».</media:description><category>Forms</category><category>Self-hosting</category><category>Open Source</category><category>MCP</category></item><item><title>Redact : un runtime React allégé, avec un rendu synchrone</title><link>https://sebastien.rigaux.be/veille/liens/redact-un-runtime-react-allege-avec-un-rendu-synchrone</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/redact-un-runtime-react-allege-avec-un-rendu-synchrone</guid><description>L’expérience de projection React pilotée par l’IA de Tanner Linsley est devenue un projet TanStack utilisé en production. Redact propose un runtime plus léger, compatible avec React et déjà fonctionnel avec Start, Next.js, Vinext et Vite. Côté serveur, React continue de gérer le SSR et les Server Components. Le compromis se situe dans le rendu : Redact travaille de façon synchrone, sans le time slicing de React. Comme le reconnaît le billet, un rendu lourd peut encore retarder les interactions. Le gain de légèreté s’accompagne donc d’une limite à prendre en compte pour les interfaces exigeantes en réactivité.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/NfJa-Z3e60CZByow_image-0.png?auto=format,compress&quot; alt=&quot;Aperçu GitHub du dépôt shader-effects-inc/shaders, présenté comme une bibliothèque de composants WebGPU pour React, Vue, Svelte, Solid, JavaScript et Framer.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;L’expérience de projection React pilotée par l’IA de Tanner Linsley est devenue un projet TanStack utilisé en production. Redact propose un runtime plus léger, compatible avec React et déjà fonctionnel avec Start, Next.js, Vinext et Vite. Côté serveur, React continue de gérer le SSR et les Server Components.&lt;/p&gt;
&lt;p&gt;Le compromis se situe dans le rendu : Redact travaille de façon synchrone, sans le time slicing de React. Comme le reconnaît le billet, un rendu lourd peut encore retarder les interactions. Le gain de légèreté s’accompagne donc d’une limite à prendre en compte pour les interfaces exigeantes en réactivité.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/shader-effects-inc/shaders&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/NfJa-Z3e60CZByow_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Aperçu GitHub du dépôt shader-effects-inc/shaders, présenté comme une bibliothèque de composants WebGPU pour React, Vue, Svelte, Solid, JavaScript et Framer.</media:description><category>TanStack Redact</category><category>React</category><category>Web Performance</category><category>SSR</category></item><item><title>WebCheck : analyser les signaux publics d’un site web</title><link>https://sebastien.rigaux.be/veille/liens/webcheck-analyser-les-signaux-publics-dun-site-web</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/webcheck-analyser-les-signaux-publics-dun-site-web</guid><description>WebCheck rassemble dans une interface les informations qu’un domaine expose publiquement : DNS, certificats TLS, en-têtes HTTP, sous-domaines, technologies détectées et présence éventuelle sur des listes de menaces. L’outil propose 44 vérifications et peut aussi servir à examiner les redirections, les trackers ou la configuration e-mail. L’analyse donne un point de départ pratique pour un contrôle de surface, sans remplacer un audit approfondi : certaines données, comme les vulnérabilités associées par Shodan, reposent sur des sources externes. Le projet est open source, peut être auto-hébergé et expose une API.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/R77N_VHqf9Zrt_l7_image-0.png?auto=format,compress&quot; alt=&quot;Bannière WebCheck avec le nom du projet en vert, la mention « On-demand OSINT tool for exploring website data » et une icône de globe protégée par un bouclier.&quot; width=&quot;1280&quot; height=&quot;640&quot; /&gt;&lt;/p&gt;&lt;p&gt;WebCheck rassemble dans une interface les informations qu’un domaine expose publiquement : DNS, certificats TLS, en-têtes HTTP, sous-domaines, technologies détectées et présence éventuelle sur des listes de menaces. L’outil propose &lt;strong&gt;44 vérifications&lt;/strong&gt; et peut aussi servir à examiner les redirections, les trackers ou la configuration e-mail.&lt;/p&gt;
&lt;p&gt;L’analyse donne un point de départ pratique pour un contrôle de surface, sans remplacer un audit approfondi : certaines données, comme les vulnérabilités associées par Shodan, reposent sur des sources externes. Le projet est open source, peut être auto-hébergé et expose une API.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://web-check.xyz/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/R77N_VHqf9Zrt_l7_image-0.png?auto=format,compress" width="1280" height="640"/><media:description>Bannière WebCheck avec le nom du projet en vert, la mention « On-demand OSINT tool for exploring website data » et une icône de globe protégée par un bouclier.</media:description><category>Security</category><category>Self-hosting</category><category>Open Source</category></item><item><title>RAG-Anything : traiter graphiques et documents multimodaux</title><link>https://sebastien.rigaux.be/veille/liens/rag-anything-traiter-graphiques-et-documents-multimodaux</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/rag-anything-traiter-graphiques-et-documents-multimodaux</guid><description>RAG-Anything est un framework construit sur LightRAG pour indexer et interroger des documents mêlant texte, images, tableaux, équations ou graphiques. Il orchestre leur parsing, leur analyse et leur recherche dans un même pipeline multimodal. Le projet combine similarité vectorielle et graphe de connaissances, avec des processeurs dédiés aux différents contenus et des requêtes pouvant transmettre les images retrouvées à un modèle de vision. Une évolution récente route aussi les graphiques rendus vers le pipeline d’images, tout en conservant leurs légendes et le texte extrait. Pour mettre à jour un document déjà indexé, le retraitement multimodal doit être activé explicitement avec force_multimodal_reprocess=True.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Yb0opRRi9ZimdNWl_image-0.png?auto=format,compress&quot; alt=&quot;Aperçu du dépôt GitHub HKUDS/RAG-Anything, avec le logo Open DataScience et les compteurs de contributeurs, issues, discussions, étoiles et forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;RAG-Anything est un framework construit sur LightRAG pour indexer et interroger des documents mêlant texte, images, tableaux, équations ou graphiques. Il orchestre leur parsing, leur analyse et leur recherche dans un même pipeline multimodal.&lt;/p&gt;
&lt;p&gt;Le projet combine similarité vectorielle et graphe de connaissances, avec des processeurs dédiés aux différents contenus et des requêtes pouvant transmettre les images retrouvées à un modèle de vision. Une évolution récente route aussi les graphiques rendus vers le pipeline d’images, tout en conservant leurs légendes et le texte extrait. Pour mettre à jour un document déjà indexé, le retraitement multimodal doit être activé explicitement avec &lt;code&gt;force_multimodal_reprocess=True&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/HKUDS/RAG-Anything&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Yb0opRRi9ZimdNWl_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Aperçu du dépôt GitHub HKUDS/RAG-Anything, avec le logo Open DataScience et les compteurs de contributeurs, issues, discussions, étoiles et forks.</media:description><category>RAG</category><category>Vector search</category><category>Knowledge graphs</category><category>Document management</category></item><item><title>MicroKit : 54 micro-interactions React, CSS et Tailwind à copier</title><link>https://sebastien.rigaux.be/veille/liens/microkit-54-micro-interactions-react-css-et-tailwind-a-copier</link><guid isPermaLink="true">https://sebastien.rigaux.be/veille/liens/microkit-54-micro-interactions-react-css-et-tailwind-a-copier</guid><description>MicroKit rassemble des interactions prêtes à copier — boutons animés, onglets, champs et effets au survol — avec des versions React ou CSS et Tailwind. Chaque composant se récupère séparément en JavaScript ou TypeScript, sans installer de package ; 26 des 54 n’ont aucune dépendance, tandis que 28 utilisent lucide-react. Le code est sous licence MIT et les variantes Tailwind sont prévues pour les versions 3 et 4. Côté Next.js App Router, la plupart des composants restent compatibles avec les server components ; ceux qui utilisent état, ref ou gestionnaire d’événement nécessitent « use client ».</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/mMYhzXU28q2z9KG7_image-0.png?auto=format,compress&quot; alt=&quot;Visuel MicroKit UI sur fond noir, avec le texte « Microinteractions worth copying » et des carrés concentriques orange.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;MicroKit rassemble des interactions prêtes à copier — boutons animés, onglets, champs et effets au survol — avec des versions React ou CSS et Tailwind. Chaque composant se récupère séparément en JavaScript ou TypeScript, sans installer de package ; 26 des 54 n’ont aucune dépendance, tandis que 28 utilisent lucide-react.&lt;/p&gt;
&lt;p&gt;Le code est sous licence MIT et les variantes Tailwind sont prévues pour les versions 3 et 4. Côté Next.js App Router, la plupart des composants restent compatibles avec les server components ; ceux qui utilisent état, ref ou gestionnaire d’événement nécessitent « use client ».&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://microkit.co/&quot;&gt;Ouvrir le lien original&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/mMYhzXU28q2z9KG7_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Visuel MicroKit UI sur fond noir, avec le texte « Microinteractions worth copying » et des carrés concentriques orange.</media:description><category>Animation</category><category>React</category><category>CSS</category><category>Tailwind CSS</category><category>UI/UX</category></item></channel></rss>