[{"data":1,"prerenderedAt":1233},["ShallowReactive",2],{"authors":3,"article-2026-08-05-mixit-2026-retour-de-conference":343},[4,23,35,47,60,73,85,97,110,123,136,148,160,173,185,197,209,221,233,245,257,270,282,294,307,319,331],{"id":5,"title":6,"body":7,"description":11,"extension":14,"meta":15,"name":16,"navigation":17,"path":18,"readingTime":19,"seo":20,"stem":21,"__hash__":22},"authors\u002Fauthors\u002Falexandre-guillon.md","Software Engineer",{"type":8,"value":9,"toc":10},"minimark",[],{"title":11,"searchDepth":12,"depth":12,"links":13},"",2,[],"md",{},"Alexandre Guillon",true,"\u002Fauthors\u002Falexandre-guillon",1,{"title":6,"description":11},"authors\u002Falexandre-guillon","4tf48mjyjFNqItOHaulICbrjeCyMag1o6801uHeTz98",{"id":24,"title":6,"body":25,"description":11,"extension":14,"meta":29,"name":30,"navigation":17,"path":31,"readingTime":19,"seo":32,"stem":33,"__hash__":34},"authors\u002Fauthors\u002Falexis-ablain.md",{"type":8,"value":26,"toc":27},[],{"title":11,"searchDepth":12,"depth":12,"links":28},[],{},"Alexis Ablain","\u002Fauthors\u002Falexis-ablain",{"title":6,"description":11},"authors\u002Falexis-ablain","_SIAtB7f-39e5t3GiJof81NP47s6MGo2n4gaHkTy1uQ",{"id":36,"title":6,"body":37,"description":11,"extension":14,"meta":41,"name":42,"navigation":17,"path":43,"readingTime":19,"seo":44,"stem":45,"__hash__":46},"authors\u002Fauthors\u002Farnaud-tilbian.md",{"type":8,"value":38,"toc":39},[],{"title":11,"searchDepth":12,"depth":12,"links":40},[],{},"Arnaud Tilbian","\u002Fauthors\u002Farnaud-tilbian",{"title":6,"description":11},"authors\u002Farnaud-tilbian","40NjYqs4fPRKn5m3wGjEe2xFuo-2d_gj_u_19o-7jT4",{"id":48,"title":49,"body":50,"description":11,"extension":14,"meta":54,"name":55,"navigation":17,"path":56,"readingTime":19,"seo":57,"stem":58,"__hash__":59},"authors\u002Fauthors\u002Faxel-shaita.md","Engineering Manager",{"type":8,"value":51,"toc":52},[],{"title":11,"searchDepth":12,"depth":12,"links":53},[],{},"Axel Shaïta","\u002Fauthors\u002Faxel-shaita",{"title":49,"description":11},"authors\u002Faxel-shaita","fK0argUhsBkWLjpTAhY13oYLVzQthcEYkCEdtHWmIgE",{"id":61,"title":62,"body":63,"description":11,"extension":14,"meta":67,"name":68,"navigation":17,"path":69,"readingTime":19,"seo":70,"stem":71,"__hash__":72},"authors\u002Fauthors\u002Fbaptiste-faure.md","Head of Talent Acquisition",{"type":8,"value":64,"toc":65},[],{"title":11,"searchDepth":12,"depth":12,"links":66},[],{},"Baptiste Faure","\u002Fauthors\u002Fbaptiste-faure",{"title":62,"description":11},"authors\u002Fbaptiste-faure","ELisToYtcgHmgdVWZkCclTPV6exZtfyXqhpx1jjbJHs",{"id":74,"title":6,"body":75,"description":11,"extension":14,"meta":79,"name":80,"navigation":17,"path":81,"readingTime":19,"seo":82,"stem":83,"__hash__":84},"authors\u002Fauthors\u002Fbenjamin-bouillot.md",{"type":8,"value":76,"toc":77},[],{"title":11,"searchDepth":12,"depth":12,"links":78},[],{},"Benjamin Bouillot","\u002Fauthors\u002Fbenjamin-bouillot",{"title":6,"description":11},"authors\u002Fbenjamin-bouillot","tbhCFZyfTt7ZM5b5YgqQ2nhgnSTl8BweaQQryc87fHo",{"id":86,"title":49,"body":87,"description":11,"extension":14,"meta":91,"name":92,"navigation":17,"path":93,"readingTime":19,"seo":94,"stem":95,"__hash__":96},"authors\u002Fauthors\u002Fcedric-nicoloso.md",{"type":8,"value":88,"toc":89},[],{"title":11,"searchDepth":12,"depth":12,"links":90},[],{},"Cédric Nicoloso","\u002Fauthors\u002Fcedric-nicoloso",{"title":49,"description":11},"authors\u002Fcedric-nicoloso","ibSoh4VZYiWYTuLOnZTedaAfcnvet1Q9H7ogW0LgorY",{"id":98,"title":99,"body":100,"description":11,"extension":14,"meta":104,"name":105,"navigation":17,"path":106,"readingTime":19,"seo":107,"stem":108,"__hash__":109},"authors\u002Fauthors\u002Fdavid-touzet.md","Staff Engineer",{"type":8,"value":101,"toc":102},[],{"title":11,"searchDepth":12,"depth":12,"links":103},[],{},"David Touzet","\u002Fauthors\u002Fdavid-touzet",{"title":99,"description":11},"authors\u002Fdavid-touzet","dHWwnQxb1Ubt-WwXWEODGEo9AFoq1cJUhfg3kdnYSBM",{"id":111,"title":112,"body":113,"description":11,"extension":14,"meta":117,"name":118,"navigation":17,"path":119,"readingTime":19,"seo":120,"stem":121,"__hash__":122},"authors\u002Fauthors\u002Feloise-chizat.md","Data Engineer",{"type":8,"value":114,"toc":115},[],{"title":11,"searchDepth":12,"depth":12,"links":116},[],{},"Eloïse Chizat","\u002Fauthors\u002Feloise-chizat",{"title":112,"description":11},"authors\u002Feloise-chizat","Utd72Vm9qT4hh2ZbFi6a2_nXw5Wb494Ed_HL1ra5yw8",{"id":124,"title":125,"body":126,"description":11,"extension":14,"meta":130,"name":131,"navigation":17,"path":132,"readingTime":19,"seo":133,"stem":134,"__hash__":135},"authors\u002Fauthors\u002Femmanuel-auclair.md","Staff engineer",{"type":8,"value":127,"toc":128},[],{"title":11,"searchDepth":12,"depth":12,"links":129},[],{},"Emmanuel Auclair","\u002Fauthors\u002Femmanuel-auclair",{"title":125,"description":11},"authors\u002Femmanuel-auclair","MtsA8THNLEn0dTtYEIQaGwDuf7MjQL55IOeei5gugEg",{"id":137,"title":6,"body":138,"description":11,"extension":14,"meta":142,"name":143,"navigation":17,"path":144,"readingTime":19,"seo":145,"stem":146,"__hash__":147},"authors\u002Fauthors\u002Fhoreb-parraud.md",{"type":8,"value":139,"toc":140},[],{"title":11,"searchDepth":12,"depth":12,"links":141},[],{},"Horeb Parraud","\u002Fauthors\u002Fhoreb-parraud",{"title":6,"description":11},"authors\u002Fhoreb-parraud","ajjsnUX4ohZI-ghMdbb92q_taWDkKXVZSLZXoAeLQtg",{"id":149,"title":49,"body":150,"description":11,"extension":14,"meta":154,"name":155,"navigation":17,"path":156,"readingTime":19,"seo":157,"stem":158,"__hash__":159},"authors\u002Fauthors\u002Fhugo-contreras.md",{"type":8,"value":151,"toc":152},[],{"title":11,"searchDepth":12,"depth":12,"links":153},[],{},"Hugo Contreras","\u002Fauthors\u002Fhugo-contreras",{"title":49,"description":11},"authors\u002Fhugo-contreras","2nc3VMu9ASq9Z6Pwx2-7-Ye991Pww4p-UEDBQFfjF-Q",{"id":161,"title":162,"body":163,"description":11,"extension":14,"meta":167,"name":168,"navigation":17,"path":169,"readingTime":19,"seo":170,"stem":171,"__hash__":172},"authors\u002Fauthors\u002Fjulien-tassin.md","Head of Engineering",{"type":8,"value":164,"toc":165},[],{"title":11,"searchDepth":12,"depth":12,"links":166},[],{},"Julien Tassin","\u002Fauthors\u002Fjulien-tassin",{"title":162,"description":11},"authors\u002Fjulien-tassin","iUIHI7SITje38Jh9X9uvYs4-VsHx4eCdt6hAlyLFG_o",{"id":174,"title":6,"body":175,"description":11,"extension":14,"meta":179,"name":180,"navigation":17,"path":181,"readingTime":19,"seo":182,"stem":183,"__hash__":184},"authors\u002Fauthors\u002Flaurent-renard.md",{"type":8,"value":176,"toc":177},[],{"title":11,"searchDepth":12,"depth":12,"links":178},[],{},"Laurent Renard","\u002Fauthors\u002Flaurent-renard",{"title":6,"description":11},"authors\u002Flaurent-renard","5BP7Ed-pt1SQHjh0UJ1XUrlLTcdlFaDoKBCP4deHq8A",{"id":186,"title":6,"body":187,"description":11,"extension":14,"meta":191,"name":192,"navigation":17,"path":193,"readingTime":19,"seo":194,"stem":195,"__hash__":196},"authors\u002Fauthors\u002Fleo-martin.md",{"type":8,"value":188,"toc":189},[],{"title":11,"searchDepth":12,"depth":12,"links":190},[],{},"Léo Martin","\u002Fauthors\u002Fleo-martin",{"title":6,"description":11},"authors\u002Fleo-martin","eYxCHkRgbGDV7shKdTA9s7Tu0zGV4yDGFoKR5MHQntY",{"id":198,"title":6,"body":199,"description":11,"extension":14,"meta":203,"name":204,"navigation":17,"path":205,"readingTime":19,"seo":206,"stem":207,"__hash__":208},"authors\u002Fauthors\u002Floic-bousquet.md",{"type":8,"value":200,"toc":201},[],{"title":11,"searchDepth":12,"depth":12,"links":202},[],{},"Loïc Bousquet","\u002Fauthors\u002Floic-bousquet",{"title":6,"description":11},"authors\u002Floic-bousquet","ko12qZwiGL8XNjAoy9oWypPkIjr29Pbq7vhdtgldqeQ",{"id":210,"title":6,"body":211,"description":11,"extension":14,"meta":215,"name":216,"navigation":17,"path":217,"readingTime":19,"seo":218,"stem":219,"__hash__":220},"authors\u002Fauthors\u002Floic-poullain.md",{"type":8,"value":212,"toc":213},[],{"title":11,"searchDepth":12,"depth":12,"links":214},[],{},"Loïc Poullain","\u002Fauthors\u002Floic-poullain",{"title":6,"description":11},"authors\u002Floic-poullain","oRIyJhFRTqxy5dLCYQ2OnYZ1DB-gLDUM-85vTSYuTF0",{"id":222,"title":112,"body":223,"description":11,"extension":14,"meta":227,"name":228,"navigation":17,"path":229,"readingTime":19,"seo":230,"stem":231,"__hash__":232},"authors\u002Fauthors\u002Fmaud-lelu.md",{"type":8,"value":224,"toc":225},[],{"title":11,"searchDepth":12,"depth":12,"links":226},[],{},"Maud Lélu","\u002Fauthors\u002Fmaud-lelu",{"title":112,"description":11},"authors\u002Fmaud-lelu","MMbsCKuE41OMHusrl12FIEsI-Trx7l8Nn_ANhvj2_y4",{"id":234,"title":49,"body":235,"description":11,"extension":14,"meta":239,"name":240,"navigation":17,"path":241,"readingTime":19,"seo":242,"stem":243,"__hash__":244},"authors\u002Fauthors\u002Fnicolas-poirier.md",{"type":8,"value":236,"toc":237},[],{"title":11,"searchDepth":12,"depth":12,"links":238},[],{},"Nicolas Poirier","\u002Fauthors\u002Fnicolas-poirier",{"title":49,"description":11},"authors\u002Fnicolas-poirier","dXrJkYo8az4SN_D23aYc3fQ7z8s1dR2a0lt1ogjAjJs",{"id":246,"title":49,"body":247,"description":11,"extension":14,"meta":251,"name":252,"navigation":17,"path":253,"readingTime":19,"seo":254,"stem":255,"__hash__":256},"authors\u002Fauthors\u002Fraphael-sauget.md",{"type":8,"value":248,"toc":249},[],{"title":11,"searchDepth":12,"depth":12,"links":250},[],{},"Raphaël Sauget","\u002Fauthors\u002Fraphael-sauget",{"title":49,"description":11},"authors\u002Fraphael-sauget","Uri9bcq0QDuxRA0PbBoNtu7p_5L3dALu4kzcXVW0xyM",{"id":258,"title":259,"body":260,"description":11,"extension":14,"meta":264,"name":265,"navigation":17,"path":266,"readingTime":19,"seo":267,"stem":268,"__hash__":269},"authors\u002Fauthors\u002Fromain-koenig.md","Co-funder & Head of innovation",{"type":8,"value":261,"toc":262},[],{"title":11,"searchDepth":12,"depth":12,"links":263},[],{},"Romain Koenig","\u002Fauthors\u002Fromain-koenig",{"title":259,"description":11},"authors\u002Fromain-koenig","uyS8--eG2_ezyqRABcJnMJmQKKuSArhPWd14aUvFeEw",{"id":271,"title":49,"body":272,"description":11,"extension":14,"meta":276,"name":277,"navigation":17,"path":278,"readingTime":19,"seo":279,"stem":280,"__hash__":281},"authors\u002Fauthors\u002Fromaric-juniet.md",{"type":8,"value":273,"toc":274},[],{"title":11,"searchDepth":12,"depth":12,"links":275},[],{},"Romaric Juniet","\u002Fauthors\u002Fromaric-juniet",{"title":49,"description":11},"authors\u002Fromaric-juniet","4Zb2artgT-eo-PHLXi3xi4d5t7s6PfhUxeSfXIikSUY",{"id":283,"title":6,"body":284,"description":11,"extension":14,"meta":288,"name":289,"navigation":17,"path":290,"readingTime":19,"seo":291,"stem":292,"__hash__":293},"authors\u002Fauthors\u002Fstanyslas-bres.md",{"type":8,"value":285,"toc":286},[],{"title":11,"searchDepth":12,"depth":12,"links":287},[],{},"Stanyslas Bres","\u002Fauthors\u002Fstanyslas-bres",{"title":6,"description":11},"authors\u002Fstanyslas-bres","Xa0SahETuiN4q1jrmR2ych3moAqcZ2LbU7vSfEt2RuU",{"id":295,"title":296,"body":297,"description":11,"extension":14,"meta":301,"name":302,"navigation":17,"path":303,"readingTime":19,"seo":304,"stem":305,"__hash__":306},"authors\u002Fauthors\u002Ftalent-acquisition.md","Talent Acquisition",{"type":8,"value":298,"toc":299},[],{"title":11,"searchDepth":12,"depth":12,"links":300},[],{},"Équipe Talent Acquisition","\u002Fauthors\u002Ftalent-acquisition",{"description":11},"authors\u002Ftalent-acquisition","doDfE76txftQ4wIiKjJoDmSpyzSKk0tzlgVAp6-opAY",{"id":308,"title":6,"body":309,"description":11,"extension":14,"meta":313,"name":314,"navigation":17,"path":315,"readingTime":19,"seo":316,"stem":317,"__hash__":318},"authors\u002Fauthors\u002Fvictor-borg.md",{"type":8,"value":310,"toc":311},[],{"title":11,"searchDepth":12,"depth":12,"links":312},[],{},"Victor Borg","\u002Fauthors\u002Fvictor-borg",{"title":6,"description":11},"authors\u002Fvictor-borg","-Za-JweoiP6hyclue_WkxMXdRUDTczPGlJf6AZckjUc",{"id":320,"title":6,"body":321,"description":11,"extension":14,"meta":325,"name":326,"navigation":17,"path":327,"readingTime":19,"seo":328,"stem":329,"__hash__":330},"authors\u002Fauthors\u002Fvirgil-roger.md",{"type":8,"value":322,"toc":323},[],{"title":11,"searchDepth":12,"depth":12,"links":324},[],{},"Virgil Roger","\u002Fauthors\u002Fvirgil-roger",{"title":6,"description":11},"authors\u002Fvirgil-roger","DfVFe5j0bCgXeEr381ZYOM5DP4m-pWb93J9-m_muKJ0",{"id":332,"title":6,"body":333,"description":11,"extension":14,"meta":337,"name":338,"navigation":17,"path":339,"readingTime":19,"seo":340,"stem":341,"__hash__":342},"authors\u002Fauthors\u002Fyukan-zhao.md",{"type":8,"value":334,"toc":335},[],{"title":11,"searchDepth":12,"depth":12,"links":336},[],{},"Yukan Zhao","\u002Fauthors\u002Fyukan-zhao",{"title":6,"description":11},"authors\u002Fyukan-zhao","LRPHugtAJnWHsmHxy9_SR5Zas_C5p-GR_uHEs1Fhk_E",{"id":344,"title":345,"author":346,"body":347,"date":1222,"description":1223,"extension":14,"lang":1224,"meta":1225,"navigation":17,"path":1226,"published":17,"readingTime":524,"seo":1227,"stem":1228,"tags":1229,"__hash__":1232},"articles\u002Farticles\u002F2026-08-05-mixit-2026-retour-de-conference.md","MiXiT 2026 : La conférence qui allie Tech et Crêpes","arnaud-tilbian",{"type":8,"value":348,"toc":1213},[349,357,362,370,373,377,383,386,389,650,661,664,669,673,678,681,684,697,700,709,713,717,722,725,739,742,774,777,780,795,799,803,808,816,819,826,1085,1091,1114,1121,1125,1129,1132,1158,1162,1165,1168,1171,1177,1180,1186,1209],[350,351,352],"p",{},[353,354],"img",{"alt":355,"src":356},"L'amphithéâtre de MiXiT 2026, pendant une session plénière","\u002Fimages\u002Fmixit-2026-amphi.png",[358,359,361],"h2",{"id":360},"indy-et-les-conférences","Indy et les conférences",[350,363,364,365,369],{},"En tant que développeurs chez Indy, on a la possibilité de participer pendant notre temps de travail\nà des conférences tout au long de l'année et partout en France. À l'issue, il est de coutume de\npartager avec le reste de l'équipe ce qu'on a apprécié ou appris lors du ",[366,367,368],"strong",{},"Goûter du code",", rituel\nde partage et de discussion des équipes Tech organisé tous les vendredis après-midi.",[350,371,372],{},"Après quelques mois d'accalmie, nous avons décidé de relancer l'activité du blog. C'est donc une\nbonne occasion pour nous de tenter une nouvelle expérience ici en vous partageant notre retour\nd'expérience de la conférence sous la forme de cet article.",[358,374,376],{"id":375},"au-cœur-dune-pipeline-démystifions-vite-et-ses-plugins","Au cœur d'une pipeline : démystifions Vite et ses plugins",[350,378,379,382],{},[366,380,381],{},"Speaker :"," Estéban Soubiran",[350,384,385],{},"Vite a discrètement détrôné Webpack en téléchargements mi-2025 et s'est imposé comme socle commun du\nfrontend moderne. Estéban Soubiran nous a proposé une session participative pour explorer la\nmécanique des plugins, qui sont le seul moyen d'étendre Vite, et dont relèvent même ses\nfonctionnalités natives.",[350,387,388],{},"Un plugin Vite, c'est une fonction qui retourne un objet exposant quelques hooks principaux :",[390,391,395],"pre",{"className":392,"code":393,"language":394,"meta":11,"style":11},"language-typescript shiki shiki-themes github-light github-dark","export default function myPlugin() {\n  return {\n    name: \"my-plugin\",\n    \u002F\u002F 1. Résout un identifiant de module (ex: 'virtual:config' → un id interne)\n    resolveId(id) {\n      if (id === \"virtual:config\") return \"\\0virtual:config\";\n    },\n    \u002F\u002F 2. Charge le contenu d'un module à partir de son id\n    load(id) {\n      if (id === \"\\0virtual:config\") return `export const env = \"prod\"`;\n    },\n    \u002F\u002F 3. Transforme le code source d'un fichier\n    transform(code, id) {\n      if (id.endsWith(\".js\")) {\n        return code.replace(\u002F__VERSION__\u002Fg, '\"1.0.0\"');\n      }\n    },\n  };\n}\n","typescript",[396,397,398,420,428,441,448,464,498,504,510,522,546,551,557,574,593,627,633,638,644],"code",{"__ignoreMap":11},[399,400,402,406,409,412,416],"span",{"class":401,"line":19},"line",[399,403,405],{"class":404},"szBVR","export",[399,407,408],{"class":404}," default",[399,410,411],{"class":404}," function",[399,413,415],{"class":414},"sScJk"," myPlugin",[399,417,419],{"class":418},"sVt8B","() {\n",[399,421,422,425],{"class":401,"line":12},[399,423,424],{"class":404},"  return",[399,426,427],{"class":418}," {\n",[399,429,431,434,438],{"class":401,"line":430},3,[399,432,433],{"class":418},"    name: ",[399,435,437],{"class":436},"sZZnC","\"my-plugin\"",[399,439,440],{"class":418},",\n",[399,442,444],{"class":401,"line":443},4,[399,445,447],{"class":446},"sJ8bj","    \u002F\u002F 1. Résout un identifiant de module (ex: 'virtual:config' → un id interne)\n",[399,449,451,454,457,461],{"class":401,"line":450},5,[399,452,453],{"class":414},"    resolveId",[399,455,456],{"class":418},"(",[399,458,460],{"class":459},"s4XuR","id",[399,462,463],{"class":418},") {\n",[399,465,467,470,473,476,479,482,485,488,492,495],{"class":401,"line":466},6,[399,468,469],{"class":404},"      if",[399,471,472],{"class":418}," (id ",[399,474,475],{"class":404},"===",[399,477,478],{"class":436}," \"virtual:config\"",[399,480,481],{"class":418},") ",[399,483,484],{"class":404},"return",[399,486,487],{"class":436}," \"",[399,489,491],{"class":490},"sj4cs","\\0",[399,493,494],{"class":436},"virtual:config\"",[399,496,497],{"class":418},";\n",[399,499,501],{"class":401,"line":500},7,[399,502,503],{"class":418},"    },\n",[399,505,507],{"class":401,"line":506},8,[399,508,509],{"class":446},"    \u002F\u002F 2. Charge le contenu d'un module à partir de son id\n",[399,511,513,516,518,520],{"class":401,"line":512},9,[399,514,515],{"class":414},"    load",[399,517,456],{"class":418},[399,519,460],{"class":459},[399,521,463],{"class":418},[399,523,525,527,529,531,533,535,537,539,541,544],{"class":401,"line":524},10,[399,526,469],{"class":404},[399,528,472],{"class":418},[399,530,475],{"class":404},[399,532,487],{"class":436},[399,534,491],{"class":490},[399,536,494],{"class":436},[399,538,481],{"class":418},[399,540,484],{"class":404},[399,542,543],{"class":436}," `export const env = \"prod\"`",[399,545,497],{"class":418},[399,547,549],{"class":401,"line":548},11,[399,550,503],{"class":418},[399,552,554],{"class":401,"line":553},12,[399,555,556],{"class":446},"    \u002F\u002F 3. Transforme le code source d'un fichier\n",[399,558,560,563,565,567,570,572],{"class":401,"line":559},13,[399,561,562],{"class":414},"    transform",[399,564,456],{"class":418},[399,566,396],{"class":459},[399,568,569],{"class":418},", ",[399,571,460],{"class":459},[399,573,463],{"class":418},[399,575,577,579,582,585,587,590],{"class":401,"line":576},14,[399,578,469],{"class":404},[399,580,581],{"class":418}," (id.",[399,583,584],{"class":414},"endsWith",[399,586,456],{"class":418},[399,588,589],{"class":436},"\".js\"",[399,591,592],{"class":418},")) {\n",[399,594,596,599,602,605,607,610,614,616,619,621,624],{"class":401,"line":595},15,[399,597,598],{"class":404},"        return",[399,600,601],{"class":418}," code.",[399,603,604],{"class":414},"replace",[399,606,456],{"class":418},[399,608,609],{"class":436},"\u002F",[399,611,613],{"class":612},"sA_wV","__VERSION__",[399,615,609],{"class":436},[399,617,618],{"class":404},"g",[399,620,569],{"class":418},[399,622,623],{"class":436},"'\"1.0.0\"'",[399,625,626],{"class":418},");\n",[399,628,630],{"class":401,"line":629},16,[399,631,632],{"class":418},"      }\n",[399,634,636],{"class":401,"line":635},17,[399,637,503],{"class":418},[399,639,641],{"class":401,"line":640},18,[399,642,643],{"class":418},"  };\n",[399,645,647],{"class":401,"line":646},19,[399,648,649],{"class":418},"}\n",[350,651,652,653,660],{},"On a construit ensemble un petit transform plugin et découvert\n",[654,655,659],"a",{"href":656,"rel":657},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Fvite-plugin-inspect",[658],"nofollow","vite-plugin-inspect"," qui permet de visualiser\nl'avant\u002Faprès de chaque plugin dans la pipeline. Estéban a aussi montré les modules virtuels\n(générer du code à la volée, exposer des données externes comme un module classique) et rappelé que\nVite va bien au-delà du bundling : rechargement à chaud des modules (HMR) via WebSocket, des\nmiddlewares, des macros, et même potentiellement un framework serveur…",[350,662,663],{},"Cette chouette conférence donnait les clés pour mieux comprendre l'écosystème Vite et pour créer son\npremier plugin, avec un bon compromis entre théorie et exemples pratiques basés sur de vrais modules\n(dont le choix était laissé aux participants) qu'on décortiquait ensemble.",[665,666],"conference-video",{"id":667,"title":668},"LiA9zksePho","Au cœur d'une pipeline : démystifions Vite et ses plugins (Estéban Soubiran)",[358,670,672],{"id":671},"wikipédia-à-25-ans-de-lutopie-numérique-au-pilier-du-savoir-commun","Wikipédia à 25 ans : de l'utopie numérique au pilier du savoir commun",[350,674,675,677],{},[366,676,381],{}," Rémy Gerbet",[350,679,680],{},"En quelques chiffres, Wikipédia c'est 200 millions de pages comptabilisées, plus de 24 milliards de\npages vues par mois et 40 millions de contributions par mois. En France, c'est le 10ᵉ site le plus\nvisité, et le seul du classement qui n'émane pas d'un géant de la tech.",[350,682,683],{},"Malgré ces chiffres impressionnants, Wikipédia fait face à un nouveau défi avec l'avènement récent\nde l'IA :",[685,686,687,691,694],"ul",{},[688,689,690],"li",{},"une baisse de fréquentation, à mesure que l'usage des LLM progresse.",[688,692,693],{},"une baisse des contributions et de la visibilité, et donc des dons.",[688,695,696],{},"de nombreux contenus générés par IA, souvent de mauvaise qualité, qui ajoutent du bruit à modérer.",[350,698,699],{},"Pourtant, ce site représente, grâce à sa transparence (tout le monde peut voir qui a modifié quoi)\net sa liberté (tout le monde peut contribuer, même s'il y a des mécanismes de protection sur\ncertaines pages sensibles), un refuge face à la fausse information, si essentiel en ces temps !",[350,701,702,703,708],{},"D'où l'importance de contribuer à notre tour à cette œuvre collective : on peut le faire directement\nsur les articles, mais aussi sur les outils. D'ailleurs, la fondation Wikimédia organise\nrégulièrement des hackatons pour les plus motivés :\n",[654,704,707],{"href":705,"rel":706},"https:\u002F\u002Fwww.mediawiki.org\u002Fwiki\u002FWikimedia_Hackathon_2026",[658],"Wikimedia Hackathon 2026",".",[665,710],{"id":711,"title":712},"iETDOUJworI","Wikipédia à 25 ans : De l'utopie numérique au pilier du savoir commun (Rémy Gerbet)",[358,714,716],{"id":715},"qui-décide-ce-quest-du-bon-code","Qui décide ce qu'est du bon code ?",[350,718,719,721],{},[366,720,381],{}," Romain Tellier",[350,723,724],{},"Romain a vécu le passage d'une équipe de 8 devs à 5 équipes et 30 devs : les décisions\nhistoriquement discutées et actées par l'ensemble de l'équipe étaient ensuite prises par un socle de\n4 personnes \"sachantes\". Cette situation entraînait plusieurs risques selon lui, comme notamment :",[685,726,727,730,733,736],{},[688,728,729],{},"des biais de préférence (untel préfère faire comme si ou comme ça).",[688,731,732],{},"des \"on a toujours fait comme ça\" hérités d'anciennes habitudes.",[688,734,735],{},"des règles implicites, actées et gardées dans la tête de chacun.",[688,737,738],{},"de moins en moins de décideurs au fur et à mesure que les gens quittent la boîte.",[350,740,741],{},"Sa question initiale de \"qui décide ce qu'est du bon code ?\" est devenue \"pourquoi en est-on arrivé\nà si peu de décideurs ?\" et il nous a proposé un top 3 de ses pratiques pour repartager la\nconnaissance plus largement et stimuler les interactions :",[743,744,745,757,768],"ol",{},[688,746,747,750,751,756],{},[366,748,749],{},"Limiter le name-dropping"," : inspiré\n",[654,752,755],{"href":753,"rel":754},"https:\u002F\u002Fmedium.com\u002F@Fabinout\u002Fbourdieu-et-les-coding-dojos-38c1213266be",[658],"d'un article"," sur\nBourdieu et les coding dojos, il proposait deux règles : ne pas parler d'un langage sans rapport\navec ce qu'on fait, et vulgariser tout concept mentionné plutôt que de balancer un lien Wikipédia\nou un nom de concept obscur.",[688,758,759,762,763,708],{},[366,760,761],{},"Réduire le gatekeeping"," en donnant du contexte, en explicitant les problèmes anticipés, et en\ndocumentant les décisions dans des ",[654,764,767],{"href":765,"rel":766},"https:\u002F\u002Fadr.github.io\u002F",[658],"Architecture Decision Records",[688,769,770,773],{},[366,771,772],{},"Faire du mob reviewing"," : ils allouaient 1 h par semaine à faire de la revue de code ensemble.\nL'effet principal : démystifier ce qui se joue au moment des décisions et que chacun ose donner\nson avis.",[350,775,776],{},"Sa conclusion : le code est avant tout un système de communication entre personnes, et comme tout\nsystème de communication, il est traversé par des schémas de domination. L'exemple junior\u002Fsenior, le\nprocessus de recrutement, la revue de code.",[350,778,779],{},"En bref, c'était une super conférence qui reliait des concepts sociologiques avec le quotidien dans\nles équipes de devs.",[350,781,782,783,788,789,794],{},"Ça résonne beaucoup avec nos pratiques chez Indy : les ADR documentent les décisions techniques et\npermettent le débat, les ",[654,784,787],{"href":785,"rel":786},"https:\u002F\u002Ftech.indy.fr\u002F2022\u002F03\u002F03\u002Fles-guildes\u002F",[658],"guildes"," rassemblent les\nvolontaires sur des sujets transverses, l'utilisation des\n",[654,790,793],{"href":791,"rel":792},"https:\u002F\u002Ftech.indy.fr\u002F2026\u002F03\u002F06\u002Fcomment-conventional-comments-a-transforme-nos-code-reviews\u002F",[658],"Conventional Comments","\nclarifie les retours en review, et le Goûter du code ainsi que le blog permettent de repartager le\nsavoir.",[665,796],{"id":797,"title":798},"4ML61iZZj4M","Qui décide ce qu'est du bon code ? (Romain Tellier)",[358,800,802],{"id":801},"javascript-fait-du-bruit-mais-en-rythme","JavaScript fait du bruit… mais en rythme !",[350,804,805,807],{},[366,806,381],{}," Baptiste Lyet",[350,809,810,811,708],{},"Baptiste, développeur et musicien, avait besoin de générer des rythmes de batterie pour pouvoir\ns'entraîner. Plutôt que d'utiliser les outils existants, compliqués et peu accessibles, il s'est\nlancé le défi de construire une boîte à rythme avec des presets de différents genres musicaux :\nc'est comme ça qu'est né ",[654,812,815],{"href":813,"rel":814},"https:\u002F\u002Fwww.drumbeatrepo.com\u002F",[658],"DrumBeatRepo",[350,817,818],{},"Après un bref retour sur les définitions de la musique et du rythme, et quelques démos de rythmiques\ntypiquement lyonnaises qui ont ambiancé notre amphi (apparemment on serait la capitale de la trap\n!), il nous a expliqué ce qu'il avait appris à travers ce projet.",[350,820,821,822,825],{},"Sa première version, naïve, reposait sur un simple ",[396,823,824],{},"setTimeout"," récursif :",[390,827,829],{"className":392,"code":828,"language":394,"meta":11,"style":11},"const pattern = [\"X\", \"\", \"\", \"\", \"X\", \"\", \"\", \"\", \"X\", \"\", \"\", \"\", \"X\", \"\", \"\", \"\"];\nconst audioSample = new Audio(\"sounds\u002Fkick.wav\");\n\nlet index = 0;\n\nfunction scheduler(): void {\n  if (pattern[index] === \"X\") {\n    audioSample.currentTime = 0;\n    audioSample.play();\n    console.log(index);\n  }\n\n  index = (index + 1) % pattern.length;\n  setTimeout(scheduler, 85); \u002F\u002F 85 ms\n}\n",[396,830,831,912,934,939,955,959,978,993,1004,1015,1026,1031,1035,1064,1081],{"__ignoreMap":11},[399,832,833,836,839,842,845,848,850,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909],{"class":401,"line":19},[399,834,835],{"class":404},"const",[399,837,838],{"class":490}," pattern",[399,840,841],{"class":404}," =",[399,843,844],{"class":418}," [",[399,846,847],{"class":436},"\"X\"",[399,849,569],{"class":418},[399,851,852],{"class":436},"\"\"",[399,854,569],{"class":418},[399,856,852],{"class":436},[399,858,569],{"class":418},[399,860,852],{"class":436},[399,862,569],{"class":418},[399,864,847],{"class":436},[399,866,569],{"class":418},[399,868,852],{"class":436},[399,870,569],{"class":418},[399,872,852],{"class":436},[399,874,569],{"class":418},[399,876,852],{"class":436},[399,878,569],{"class":418},[399,880,847],{"class":436},[399,882,569],{"class":418},[399,884,852],{"class":436},[399,886,569],{"class":418},[399,888,852],{"class":436},[399,890,569],{"class":418},[399,892,852],{"class":436},[399,894,569],{"class":418},[399,896,847],{"class":436},[399,898,569],{"class":418},[399,900,852],{"class":436},[399,902,569],{"class":418},[399,904,852],{"class":436},[399,906,569],{"class":418},[399,908,852],{"class":436},[399,910,911],{"class":418},"];\n",[399,913,914,916,919,921,924,927,929,932],{"class":401,"line":12},[399,915,835],{"class":404},[399,917,918],{"class":490}," audioSample",[399,920,841],{"class":404},[399,922,923],{"class":404}," new",[399,925,926],{"class":414}," Audio",[399,928,456],{"class":418},[399,930,931],{"class":436},"\"sounds\u002Fkick.wav\"",[399,933,626],{"class":418},[399,935,936],{"class":401,"line":430},[399,937,938],{"emptyLinePlaceholder":17},"\n",[399,940,941,944,947,950,953],{"class":401,"line":443},[399,942,943],{"class":404},"let",[399,945,946],{"class":418}," index ",[399,948,949],{"class":404},"=",[399,951,952],{"class":490}," 0",[399,954,497],{"class":418},[399,956,957],{"class":401,"line":450},[399,958,938],{"emptyLinePlaceholder":17},[399,960,961,964,967,970,973,976],{"class":401,"line":466},[399,962,963],{"class":404},"function",[399,965,966],{"class":414}," scheduler",[399,968,969],{"class":418},"()",[399,971,972],{"class":404},":",[399,974,975],{"class":490}," void",[399,977,427],{"class":418},[399,979,980,983,986,988,991],{"class":401,"line":500},[399,981,982],{"class":404},"  if",[399,984,985],{"class":418}," (pattern[index] ",[399,987,475],{"class":404},[399,989,990],{"class":436}," \"X\"",[399,992,463],{"class":418},[399,994,995,998,1000,1002],{"class":401,"line":506},[399,996,997],{"class":418},"    audioSample.currentTime ",[399,999,949],{"class":404},[399,1001,952],{"class":490},[399,1003,497],{"class":418},[399,1005,1006,1009,1012],{"class":401,"line":512},[399,1007,1008],{"class":418},"    audioSample.",[399,1010,1011],{"class":414},"play",[399,1013,1014],{"class":418},"();\n",[399,1016,1017,1020,1023],{"class":401,"line":524},[399,1018,1019],{"class":418},"    console.",[399,1021,1022],{"class":414},"log",[399,1024,1025],{"class":418},"(index);\n",[399,1027,1028],{"class":401,"line":548},[399,1029,1030],{"class":418},"  }\n",[399,1032,1033],{"class":401,"line":553},[399,1034,938],{"emptyLinePlaceholder":17},[399,1036,1037,1040,1042,1045,1048,1051,1053,1056,1059,1062],{"class":401,"line":559},[399,1038,1039],{"class":418},"  index ",[399,1041,949],{"class":404},[399,1043,1044],{"class":418}," (index ",[399,1046,1047],{"class":404},"+",[399,1049,1050],{"class":490}," 1",[399,1052,481],{"class":418},[399,1054,1055],{"class":404},"%",[399,1057,1058],{"class":418}," pattern.",[399,1060,1061],{"class":490},"length",[399,1063,497],{"class":418},[399,1065,1066,1069,1072,1075,1078],{"class":401,"line":576},[399,1067,1068],{"class":414},"  setTimeout",[399,1070,1071],{"class":418},"(scheduler, ",[399,1073,1074],{"class":490},"85",[399,1076,1077],{"class":418},"); ",[399,1079,1080],{"class":446},"\u002F\u002F 85 ms\n",[399,1082,1083],{"class":401,"line":595},[399,1084,649],{"class":418},[350,1086,1087,1088,1090],{},"Mais le résultat était peu concluant : le délai d'un ",[396,1089,824],{}," n'est jamais garanti (le thread\nprincipal est occupé par le rendu, le nettoyage de la mémoire, le reste de la page…), et au final\nles déclenchements dérivaient peu à peu de l'horloge, et devenaient irréguliers, c'est pas ouf pour\nune boîte à rythme.",[350,1092,1093,1094,1099,1100,1103,1104,1107,1108,1113],{},"Après s'être creusé les méninges et lu l'article\n",[654,1095,1098],{"href":1096,"rel":1097},"https:\u002F\u002Fweb.dev\u002Farticles\u002Faudio-scheduling",[658],"Le récit de deux horloges"," de Chris Wilson, il a trouvé\nune approche plus fiable (avec un nom un peu barbare) : le ",[366,1101,1102],{},"lookahead scheduler",". Au lieu de\ncompter sur l'horloge JavaScript pour jouer le son au bon moment, on l'utilise seulement pour se\nréveiller régulièrement et ",[366,1105,1106],{},"planifier à l'avance"," les samples à jouer dans une fenêtre temporelle\nproche, en se basant sur\nl'",[654,1109,1112],{"href":1110,"rel":1111},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FBaseAudioContext\u002FcurrentTime",[658],"horloge contenue dans la Web Audio API","\nqui elle a l'avantage de s'exécuter sur un thread distinct et est en prime (de l'ordre de 40.000x)\nplus précise. Les sons sont maintenant joués de manière déterministe !",[350,1115,1116,1117,708],{},"Une chouette conférence qui a été l'occasion pour nous de découvrir un aspect de JavaScript que nous\nn'avions jamais eu l'occasion de creuser jusque-là. Pour vous amuser avec DrumBeatRepo, c'est\n",[654,1118,1120],{"href":813,"rel":1119},[658],"ici",[665,1122],{"id":1123,"title":1124},"f0q1ADKfbGs","JavaScript fait du bruit… mais en rythme ! (Baptiste Lyet)",[358,1126,1128],{"id":1127},"quelques-autres-sujets-que-nous-avons-appréciés","Quelques autres sujets que nous avons appréciés",[350,1130,1131],{},"Il y avait tout un tas d'autres conférences intéressantes, on ne va pas les détailler ici mais voici\nquand même quelques recommandations de visionnage.",[685,1133,1134,1142,1150],{},[688,1135,1136,1141],{},[654,1137,1140],{"href":1138,"rel":1139},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wDeAwC792dw",[658],"L'indépendance des médias... indés (David Dufresne)","\n: Une plongée dans les coulisses des médias indépendants et les batailles qu'ils mènent pour\nrester libres face aux pressions économiques et politiques.",[688,1143,1144,1149],{},[654,1145,1148],{"href":1146,"rel":1147},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wL8EbLLGaVo",[658],"Le futur du développeur : IA, compétences et obsolescence (Julie Mouveroux & Estéban Soubiran)","\n: Une réflexion sur la manière dont l'IA redéfinit notre métier et sur les compétences à cultiver.",[688,1151,1152,1157],{},[654,1153,1156],{"href":1154,"rel":1155},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1JA3wPw7dsw",[658],"Pourquoi la Tech tient plus de la pop culture que de l'ingénierie ? (Julien Topçu)","\n: Un talk qui montre à quel point nos choix techniques suivent souvent les modes et les tendances\nplutôt qu'une véritable démarche d'ingénierie.",[358,1159,1161],{"id":1160},"à-lannée-prochaine-mixit","À l'année prochaine, MiXiT ?",[350,1163,1164],{},"Même si tous les talks sont enregistrés et visionnables en ligne, aller à la rencontre de nouveaux\nsujets et de nouvelles personnes, sortir de son quotidien pour assister à ce genre d'événements est\nun super moyen de nourrir notre curiosité (et de manger les fameuses \"crêpes de Raph\").",[350,1166,1167],{},"En plus, MiXiT est une conférence à taille humaine fidèle à son nom depuis 15 ans avec sa grande\ndiversité de sujets, de la tech, mais pas que, et son ambiance bienveillante.",[350,1169,1170],{},"Bref, c'était top. Merci à celles et ceux qui font MiXiT !",[350,1172,1173],{},[353,1174],{"alt":1175,"src":1176},"Les crêpes de MiXiT, préparées sur place tout au long de l'événement","\u002Fimages\u002Fmixit-2026-crepes.png",[1178,1179],"hr",{},[350,1181,1182],{},[1183,1184,1185],"em",{},"Ressources utiles :",[685,1187,1188,1195,1202],{},[688,1189,1190],{},[654,1191,1194],{"href":1192,"rel":1193},"https:\u002F\u002Fmixitconf.org\u002Ffr\u002F",[658],"Site officiel MiXiT 2026",[688,1196,1197],{},[654,1198,1201],{"href":1199,"rel":1200},"https:\u002F\u002Fwww.youtube.com\u002F@mixitconf",[658],"Chaîne youtube pour revoir les talks",[688,1203,1204],{},[654,1205,1208],{"href":1206,"rel":1207},"https:\u002F\u002Fmixitconf.org\u002Fschedule",[658],"Programme complet",[1210,1211,1212],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":11,"searchDepth":12,"depth":12,"links":1214},[1215,1216,1217,1218,1219,1220,1221],{"id":360,"depth":12,"text":361},{"id":375,"depth":12,"text":376},{"id":671,"depth":12,"text":672},{"id":715,"depth":12,"text":716},{"id":801,"depth":12,"text":802},{"id":1127,"depth":12,"text":1128},{"id":1160,"depth":12,"text":1161},"2026-08-05","Deux jours de talks à Lyon, de la boîte à rythme en JavaScript aux plugins Vite en passant par Wikipédia : notre retour sur une conférence qui mélange tech, crêpes et éthique","fr",{},"\u002Farticles\u002F2026-08-05-mixit-2026-retour-de-conference",{"title":345,"description":1223},"articles\u002F2026-08-05-mixit-2026-retour-de-conference",[1230,1231],"Tech","Organisation","YYA21_Xzkt5QJu6sgE8txgolVbHnpigyPCoPJhjixpc",1785922112628]