Ci sono progetti che nascono da una necessità pratica, altri da una sfida tecnica. CBrowser nasce da una scintilla: la voglia di capire fino a che punto si possa spingere JavaScript quando gli si chiede di fare qualcosa che, a prima vista, sembrerebbe appartenere a un mondo completamente diverso.

CBrowser è un ambiente di sviluppo C eseguito interamente nel browser. Non è un semplice editor con una console finta, non è un wrapper attorno a una toolchain esterna, non è un servizio remoto che compila da qualche parte e restituisce un file. È un progetto costruito per dimostrare che si può scrivere codice C, analizzarlo, interpretarlo, generare assembly x86-64 e produrre un file eseguibile Windows .exe restando dentro il perimetro del browser.

Caricamento immagineCBrowser

Da dove nasce l'idea

L'idea è nata guardando un video su YouTube di Leonardo Boselli:

https://www.youtube.com/watch?v=itKBDq4l-Jg

Nel video Leonardo mostra il suo progetto C playground, realizzato con l'aiuto di Claude. Mi ha colpito l'energia dell'esperimento: prendere un linguaggio storico come il C e portarlo dentro un ambiente moderno, immediato, accessibile dal browser.

Da lì è nata la domanda: e se provassi a costruire qualcosa partendo da zero?

CBrowser nasce così: non come copia, ma come risposta personale a quella suggestione. Un laboratorio indipendente, realizzato da zero con l'aiuto di GPT-5.5.

Non un trucco, ma una pipeline vera

La parte più affascinante di CBrowser è che ogni passaggio è esplicito.

Il codice C viene prima trasformato in token dal lexer, poi interpretato dal parser, quindi organizzato in un AST navigabile. Da lì entrano in gioco il controllo dei tipi, la generazione intermedia, il backend assembly e infine il writer PE32+.

La pipeline è questa:

Codice C
-> Lexer
-> Parser
-> AST
-> Type Checker
-> IR
-> Code Generator
-> Assembly x86-64
-> PE Writer
-> EXE finale

Ogni fase è visibile, ispezionabile e pensata per essere studiata. CBrowser non vuole solo eseguire codice: vuole mostrare cosa succede dietro le quinte.

Un IDE C nel browser

L'interfaccia è costruita con React e Monaco Editor, quindi scrivere codice in C dentro CBrowser ha il sapore di un piccolo IDE. Ci sono tab multiple, apertura e salvataggio dei file .c, console integrata, pannelli di debug e viewer dedicati.

Il pannello AST permette di esplorare l'albero sintattico con rami espandibili e comprimibili. Il pannello Assembly mostra il codice generato. Il pannello PE rende visibile la struttura dell'eseguibile. La memoria virtuale e l'output della console aiutano a capire come il programma viene eseguito nella VM JavaScript.

È uno strumento per provare, sbagliare, osservare e capire.

Interpretazione e compilazione

CBrowser lavora su due piani.

Da una parte c'è l'interprete: una VM JavaScript con stack, heap, memoria simulata, funzioni di libreria essenziali e supporto a chiamate come printf, puts, scanf, strlen, memset, memcpy, malloc e free.

Dall'altra c'è la compilazione: il progetto genera assembly x86-64 in sintassi Intel e produce un file PE32+ scaricabile. L'obiettivo non è nascondere la complessità, ma renderla tangibile. Vedere un programma C diventare un .exe attraverso codice JavaScript è una piccola meraviglia tecnica.

Nessun backend, nessun WebAssembly

Uno dei vincoli più importanti del progetto è anche uno dei più stimolanti:

  • niente backend
  • niente WebAssembly
  • niente Emscripten
  • niente Clang o GCC
  • niente MinGW
  • niente API cloud
  • niente dipendenze native

CBrowser deve funzionare nel browser, offline, solo con JavaScript, Typed Arrays, Blob API e un file system virtuale in memoria.

Questa scelta rende il progetto più difficile, ma anche più interessante. Ogni pezzo va scritto, capito e controllato manualmente. È un esercizio di ingegneria, ma anche un modo per riscoprire quanto siano concreti i concetti che spesso usiamo come scatole nere.

Perché è interessante

CBrowser non pretende di essere un compilatore C completo secondo lo standard ISO. È un progetto in evoluzione, con limiti dichiarati e una roadmap naturale.

Ma già oggi è interessante perché unisce mondi diversi:

  • la didattica dei compilatori
  • la programmazione C
  • l'architettura x86-64
  • il formato PE di Windows
  • la costruzione di una VM
  • l'esperienza utente di un IDE moderno
  • la libertà di un'applicazione completamente client-side

È uno strumento per chi ama capire come funzionano le cose. Per chi non si accontenta del pulsante "Run". Per chi vuole vedere il percorso che porta da una riga di C a un eseguibile.

Un progetto aperto alla crescita

Ogni nuova funzione di CBrowser apre un'altra porta: array, input interattivo, grafica Win32, funzioni matematiche, animazioni, viewer dell'AST, generazione ZIP con sorgente e README, strumenti di debug sempre più leggibili.

Il bello di un progetto così è che non finisce davvero. Può crescere in molte direzioni: supporto più ampio al C, ottimizzazioni, diagnostica migliore, librerie standard più ricche, generazione di codice più sofisticata, strumenti didattici ancora più chiari.

CBrowser è un esperimento, ma anche una dichiarazione: il browser può essere molto più di una finestra su contenuti remoti. Può diventare un laboratorio completo, autosufficiente, capace di ospitare strumenti complessi e profondamente tecnici.

E forse è proprio questo il suo fascino: prendere qualcosa di antico e potente come il C, qualcosa di moderno e ubiquo come JavaScript, e farli incontrare nello spazio più accessibile che abbiamo oggi, il browser.

CBrowser è nato da una scintilla vista su YouTube, è cresciuto partendo da zero con l'aiuto di GPT-5.5, e continua a evolversi come un piccolo laboratorio per esplorare compilatori, runtime ed eseguibili reali.

Un progetto per programmare, certo. Ma soprattutto per guardare dentro.

Versione online: Provalo online →

Caricamento immagineAnteprima dell'applicazione