[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-it-perche-electron-pesa-tauri-react-native-alternative":3},{"id":4,"title":5,"author":6,"body":7,"cover":406,"description":407,"draft":408,"extension":409,"locale":410,"meta":411,"navigation":412,"path":413,"publishedAt":414,"seo":415,"seoTitle":416,"slug":417,"stem":418,"tags":419,"__hash__":423},"blog\u002Fit\u002Fblog\u002Fperche-electron-pesa-tauri-react-native-alternative.md","Perché Electron pesa: Tauri, React Native e le alternative","Manuel Tardivo",{"type":8,"value":9,"toc":373},"minimark",[10,14,19,22,25,28,41,45,48,51,55,58,63,90,94,115,119,141,152,156,159,163,166,180,184,187,190,193,197,200,204,213,217,220,224,227,231,234,238,241,245,248,252,255,259,262,266,298,302,326,330,333,340,344,347,351,354,357,360,363,367,370],[11,12,13],"p",{},"Tutto parte da un fastidio di tutti i giorni: Chrome, Arc e gli altri browser basati su Chromium mi mangiano RAM e CPU, al punto da rallentare i processi con cui lavoro davvero. Safari è molto più leggero, ma per sviluppare non basta, perché gli mancano strumenti di DevTools che oggi sono indispensabili.",[15,16,18],"h2",{"id":17},"da-dove-nasce-lidea","Da dove nasce l’idea",[11,20,21],{},"La prima idea era un browser nativo per macOS, leggero come Safari ma compatibile al 100% con Chromium.",[11,23,24],{},"Poi ho scavato, ed è venuto fuori che il peso non sta nell’interfaccia ma nel motore, Blink e V8. Google lo ottimizza un sacco, ma per la velocità e la sicurezza, non per la RAM.",[11,26,27],{},"E lì il discorso si è allargato. Anche le app desktop che usiamo tutti i giorni, Slack, Notion, la stessa app di Claude, sono costruite su Electron, e ognuna si porta dietro un Chromium intero. Da qui tre domande:",[29,30,31,35,38],"ul",{},[32,33,34],"li",{},"perché Electron pesa così tanto;",[32,36,37],{},"perché Tauri e React Native vanno meglio;",[32,39,40],{},"cosa si potrebbe costruire per cambiare le cose.",[15,42,44],{"id":43},"electron-è-un-runtime-non-un-compilatore","Electron è un runtime, non un compilatore",[11,46,47],{},"Electron non lo puoi «compilare meglio». Ogni app si porta dietro un Chromium intero più Node.js, e il codice dell’app resta JavaScript, HTML e CSS: per girare ha bisogno di un motore web.",[11,49,50],{},"Nessun compilatore può togliere Chromium se il codice si aspetta Chromium. Il peso non sta in come è costruita l’app, sta nel motore che le alleghi.",[15,52,54],{"id":53},"tauri-e-react-native-sembrano-la-stessa-cosa-ma-non-lo-sono","Tauri e React Native: sembrano la stessa cosa, ma non lo sono",[11,56,57],{},"Sono due strade diverse: Tauri usa il motore web che c’è già nel sistema, React Native un motore web non lo usa proprio.",[59,60,62],"h3",{"id":61},"electron","Electron",[29,64,65,72,78,84],{},[32,66,67,71],{},[68,69,70],"strong",{},"Motore:"," Chromium + Node.js dentro l’app.",[32,73,74,77],{},[68,75,76],{},"Codice:"," web.",[32,79,80,83],{},[68,81,82],{},"Peso:"," pesante, circa 200 MB per app.",[32,85,86,89],{},[68,87,88],{},"Il prezzo da pagare:"," ogni app carica il suo Chromium.",[59,91,93],{"id":92},"tauri","Tauri",[29,95,96,101,105,110],{},[32,97,98,100],{},[68,99,70],{}," WebView di sistema (WKWebView su Mac), backend in Rust.",[32,102,103,77],{},[68,104,76],{},[32,106,107,109],{},[68,108,82],{}," leggero, 5-10 MB per app.",[32,111,112,114],{},[68,113,88],{}," il rendering cambia da un sistema all’altro, e su Mac erediti le stranezze di Safari.",[59,116,118],{"id":117},"react-native","React Native",[29,120,121,126,131,136],{},[32,122,123,125],{},[68,124,70],{}," nessun browser, componenti nativi AppKit\u002FUIKit e JavaScript su Hermes.",[32,127,128,130],{},[68,129,76],{}," da riscrivere con i componenti di React Native.",[32,132,133,135],{},[68,134,82],{}," leggero.",[32,137,138,140],{},[68,139,88],{}," niente DOM né CSS vero, l’interfaccia web non si riusa.",[11,142,143,144,151],{},"Su Mac WebKit è già nel sistema e già in memoria, ed è per questo che Tauri parte così leggero. E non è roba da hobbisti: Microsoft usa React Native su Mac per parti di Office, con ",[145,146,150],"a",{"href":147,"rel":148},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Freact-native-macos",[149],"nofollow","react-native-macos",".",[15,153,155],{"id":154},"cosa-si-potrebbe-fare-davvero","Cosa si potrebbe fare davvero",[11,157,158],{},"Il compilatore magico non esiste, ma due idee concrete sì, e la prima è la più promettente.",[59,160,162],{"id":161},"_1-un-traduttore-da-electron-alla-webview-di-sistema","1. Un traduttore da Electron alla webview di sistema",[11,164,165],{},"Prende un’app Electron e al posto di Chromium ci mette WKWebView.",[29,167,168,171,174,177],{},[32,169,170],{},"Mappa le API di Electron (finestre, IPC, menu, tray) su quelle native, e Node su un backend leggero.",[32,172,173],{},"Il frontend spesso funziona già in Safari: molte app Electron hanno una versione web che lì gira bene.",[32,175,176],{},"Le parti difficili sono le API di Node e i moduli nativi.",[32,178,179],{},"Uno strumento di conversione automatica rilasciato non l’ho trovato: c’è solo un tentativo annunciato in una issue di VS Code (lo trovi più sotto).",[59,181,183],{"id":182},"_2-un-chromium-condiviso","2. Un Chromium condiviso",[11,185,186],{},"Oggi cinque app Electron caricano cinque Chromium diversi. Con un runtime comune, come la JRE per Java, il peso si dividerebbe.",[11,188,189],{},"Se n’è parlato più volte, ma non si è mai fatto, perché ogni app vuole la sua versione esatta di Chromium.",[11,191,192],{},"Tra le due vince il traduttore: ha un problema chiaro, un pubblico che lo sente (gli sviluppatori che odiano Electron, cioè un sacco di gente) e chiede meno lavoro di un browser.",[15,194,196],{"id":195},"chi-ci-ha-già-provato","Chi ci ha già provato",[11,198,199],{},"Di framework leggeri ce ne sono già tanti, ma sono tutti per app nuove. Un traduttore automatico da Electron rilasciato, ad oggi, non risulta.",[59,201,203],{"id":202},"electrobun","Electrobun",[11,205,206,207,212],{},"WebView di sistema, main process in TypeScript su Bun, ponte nativo in Zig. Versione 1.0 a febbraio 2026, oltre 11.000 stelle su GitHub. È un framework per app nuove: un’app React semplice pesa circa 64 MB contro circa 271 MB con Electron (",[145,208,211],{"href":209,"rel":210},"https:\u002F\u002Fbetterstack.com\u002Fcommunity\u002Fguides\u002Fscaling-nodejs\u002Felectrobun-desktop-apps-typescript\u002F",[149],"fonte",").",[59,214,216],{"id":215},"zero-native","Zero-Native",[11,218,219],{},"Shell minima in Zig sopra WKWebView, CEF opzionale. In fase iniziale. Framework per app nuove, binari di pochi MB.",[59,221,223],{"id":222},"deno-desktop","deno desktop",[11,225,226],{},"Runtime Deno con CEF incluso oppure WebView di sistema. Disponibile, e ha in programma un runtime CEF condiviso tra app.",[59,228,230],{"id":229},"traduttore-electron-tauri","Traduttore Electron → Tauri",[11,232,233],{},"Conversione in fase di build, senza configurazione. Solo annunciato in una issue di VS Code, nessun rilascio trovato. È la nostra idea 1: lo spazio è ancora vuoto.",[59,235,237],{"id":236},"webview2-windows","WebView2 (Windows)",[11,239,240],{},"Chromium di sistema, con runtime condiviso opzionale. Disponibile su Windows: il runtime condiviso esiste già, ma non su Mac.",[59,242,244],{"id":243},"runtime-electron-condiviso","Runtime Electron condiviso",[11,246,247],{},"Un solo Electron per tutte le app. Scartato dal creatore di Electron: chi sceglie Electron taglia i costi di sviluppo, non quelli di chi usa l’app, e Chrome Apps e Adobe AIR sono andati male.",[15,249,251],{"id":250},"come-lo-costruirei","Come lo costruirei",[11,253,254],{},"Ok, ma se domani mattina dovessi farlo davvero? Questo è uno studio a tavolino, non un progetto partito: serve a capire dove sono i muri prima di sbatterci contro.",[59,256,258],{"id":257},"il-principio","Il principio",[11,260,261],{},"Non riscrivere niente che esiste già. Il motore c’è (WKWebView), il guscio leggero c’è (Electrobun o Tauri), un runtime JavaScript leggero che parla quasi tutto Node c’è (Bun). Il traduttore è la colla tra l’app Electron e questi pezzi.",[59,263,265],{"id":264},"i-quattro-pezzi","I quattro pezzi",[267,268,269,275,286,292],"ol",{},[32,270,271,274],{},[68,272,273],{},"Il radiografo."," Apre il pacchetto dell’app (l’archivio asar), elenca ogni API di Electron usata, ogni modulo di Node e ogni modulo nativo compilato, e ti dice prima di cominciare cosa si traduce da solo, cosa va sistemato a mano e cosa non si può tradurre.",[32,276,277,280,281,285],{},[68,278,279],{},"Il finto Electron."," Una libreria che risponde a ",[282,283,284],"code",{},"require('electron')"," con la forma di sempre (BrowserWindow, ipcMain, Menu, Tray, dialog, shell, app), ma sotto chiama le API native del Mac attraverso il guscio leggero. L’app crede di parlare con Electron, e invece parla con il sistema.",[32,287,288,291],{},[68,289,290],{},"Il main process su Bun."," Il codice Node dell’app gira su Bun, che di Node copre gran parte delle API. I moduli nativi che Bun non digerisce finiscono in un piccolo processo Node a parte, acceso solo quando servono.",[32,293,294,297],{},[68,295,296],{},"Il ponte nella pagina."," Preload e contextBridge diventano script iniettati in WKWebView (WKUserScript), l’IPC passa da WKScriptMessageHandler e i protocolli personalizzati da WKURLSchemeHandler. Per il frontend non cambia niente.",[59,299,301],{"id":300},"dove-sbatti","Dove sbatti",[29,303,304,314,320],{},[32,305,306,309,310,313],{},[68,307,308],{},"Le API web che esistono solo in Chromium:"," WebUSB, WebHID, WebSerial, la cattura dello schermo di desktopCapturer, il tag ",[282,311,312],{},"\u003Cwebview>",". Qui serve una via d’uscita onesta: la finestra che ne ha bisogno si apre con un Chromium (CEF) solo per lei, e il resto dell’app resta leggero.",[32,315,316,319],{},[68,317,318],{},"Un bersaglio che si muove:"," Electron esce con una versione nuova ogni otto settimane, quindi il finto Electron deve correrle dietro. Si parte dalle API che usano davvero le app più diffuse, non da tutte.",[32,321,322,325],{},[68,323,324],{},"Le stranezze di Safari:"," per accorgersene serve un confronto automatico delle schermate, la stessa app in Chromium e in WebKit, prima di dire che la traduzione è riuscita.",[59,327,329],{"id":328},"come-lo-proverei","Come lo proverei",[11,331,332],{},"Una piattaforma sola, il Mac, e una sola app open source vera da tradurre. Si misura prima e dopo: RAM all’avvio, RAM dopo un’ora di uso, peso del pacchetto. Se i numeri non scendono di brutto, si butta tutto senza rimpianti.",[11,334,335,336,339],{},"Se scendono, il passo dopo è un comando unico che prende l’app e restituisce il ",[282,337,338],{},".app"," tradotto, e solo dopo si apre ad altre app e ad altri sistemi.",[59,341,343],{"id":342},"il-problema-vero-non-è-tecnico","Il problema vero non è tecnico",[11,345,346],{},"Chi sceglie Electron taglia i costi di sviluppo, non quelli di chi usa l’app, l’abbiamo visto nella tabella qui sopra. Quindi chi lo paga, il traduttore? Lo sviluppatore, che deve volerlo, o chi usa l’app e la vorrebbe leggera? Finché non rispondi a questa domanda hai un esperimento figo, non un prodotto.",[15,348,350],{"id":349},"facciamo-sempre-di-più-ottimizziamo-sempre-meno","Facciamo sempre di più, ottimizziamo sempre meno",[11,352,353],{},"Nel 1995 Niklaus Wirth, quello del Pascal, scrisse che il software rallenta più in fretta di quanto l’hardware diventi veloce. Trent’anni dopo ho un Mac che fa cose impensabili, e per tenere aperte cinque chat e due browser va in affanno.",[11,355,356],{},"Secondo me il motivo è semplice: una funzione nuova si vede, 150 MB di RAM in meno no. Nessuno sale sul palco per dire che la sua app adesso pesa meno. Anzi, uno l’ha fatto: Apple nel 2008 ha presentato Snow Leopard con una slide che diceva zero funzioni nuove, solo più veloce e più leggero, e la gente se lo ricorda ancora.",[11,358,359],{},"Con l’AI che scrive codice a ciclo continuo è ancora peggio, perché aggiungere costa quasi zero, mentre ottimizzare vuol dire capire cosa c’è già, e capire costa tempo.",[11,361,362],{},"Io la vedo così: mi viene molto più veloce ideare qualcosa di nuovo partendo da qualcosa che già esiste e funziona. Il traduttore è esattamente questo, non l’ennesimo framework nella lista, ma un modo per rendere leggero quello che usiamo già tutti i giorni.",[15,364,366],{"id":365},"quindi","Quindi?",[11,368,369],{},"Il traduttore resta l’idea più promettente, ma per avere senso deve dare più di una migrazione a mano verso Electrobun, che parla già TypeScript. Se no, chi odia Electron fa prima a riscriversi la shell da solo.",[11,371,372],{},"E nel frattempo Arc è ancora lì aperto, a mangiarsi la RAM come se niente fosse.",{"title":374,"searchDepth":375,"depth":375,"links":376},"",2,[377,378,379,385,389,397,404,405],{"id":17,"depth":375,"text":18},{"id":43,"depth":375,"text":44},{"id":53,"depth":375,"text":54,"children":380},[381,383,384],{"id":61,"depth":382,"text":62},3,{"id":92,"depth":382,"text":93},{"id":117,"depth":382,"text":118},{"id":154,"depth":375,"text":155,"children":386},[387,388],{"id":161,"depth":382,"text":162},{"id":182,"depth":382,"text":183},{"id":195,"depth":375,"text":196,"children":390},[391,392,393,394,395,396],{"id":202,"depth":382,"text":203},{"id":215,"depth":382,"text":216},{"id":222,"depth":382,"text":223},{"id":229,"depth":382,"text":230},{"id":236,"depth":382,"text":237},{"id":243,"depth":382,"text":244},{"id":250,"depth":375,"text":251,"children":398},[399,400,401,402,403],{"id":257,"depth":382,"text":258},{"id":264,"depth":382,"text":265},{"id":300,"depth":382,"text":301},{"id":328,"depth":382,"text":329},{"id":342,"depth":382,"text":343},{"id":349,"depth":375,"text":350},{"id":365,"depth":375,"text":366},"\u002Fblog\u002Fperche-electron-pesa-tauri-react-native-alternative-cover.webp","Chrome mi mangia la RAM, Slack e Notion pure. Perché Electron pesa così tanto, cosa fanno meglio Tauri e React Native, e l’idea che nessuno ha ancora rilasciato.",false,"md","it",{},true,"\u002Fit\u002Fblog\u002Fperche-electron-pesa-tauri-react-native-alternative","2026-10-17",{"title":5,"description":407},"Perché Electron pesa: Tauri, React Native e alternative","perche-electron-pesa-tauri-react-native-alternative","it\u002Fblog\u002Fperche-electron-pesa-tauri-react-native-alternative",[61,92,420,421,422],"react native","app desktop","prestazioni","tmdDx21WCTan8VyelIN65YZrIqtnZXNc5ZVabs-RDNY"]