PGlite (Postgres in WASM) è un'implementazione di Postgres basata sullo standard WebAssembly. Si tratta di una soluzione pacchettizzata all'interno di libreria client scritta in TypeScript che consente di inviare query al DBMS direttamente da browser Web. Per far questo non sono necessarie dipendenze addizionali e il suo ambito privilegiato è quello dello sviluppo di applicazioni local-first. Con questa definizione identifichiamo tutti i progetti destinati ad interagire con un database embedded in locale, non con un servizio in Cloud.
PGlite e persistenza dei dati
In teoria, prima del rilascio di PGlite era già possibile eseguire Postgres su browser ma per ottenere tale risultato era necessario il supporto di una macchina virtuale Linux. A questo proposito è possibile citare alcune sperimentazioni basate su VM v86 in ambiente Alpine Linux mirate a garantire la compatibilità con CPU x86 tramite la traslazione a runtime di codice macchina in WebAssembly.
Fin qui tutto bene se non fosse per un problema: i dati elaborati non sono persistenti e ogni volta che si inizia una nuova sessione si parte praticamente da zero.
Per operare con PGlite è invece sufficiente lavorare in un ambiente basato su JavaScript e si può avere persistenza dei dati sia da browser, tramite indexedDB, che a livello di file system, ad esempio con Node.JS.
Il paradigma local-first
L'approccio local-first non si riferisce alla destinazione delle applicazioni ma al loro funzionamento. Rispetto al Cloud-first esso garantisce tempi di latenza inferiori (pochi ms) e permette di realizzare progetti di qualsiasi tipo: applicazioni Web così come App per il mobile che siano reattive e permettano di eseguire interazioni in tempo reale con i database. Non a caso PGlite è legato ElectricSQL, un layer di sincronizzazione Open Source incentrato su Postgres.
Tra i vantaggi di PGlite troviamo il supporto per le query parametrizzate, la disponibilità di un'API interattiva per le transazioni e la possibilità di eseguire Web Worker. Il tutto in un package che in formato compresso pesa poco più di 2.5 Mb.