electric-sql/pglite
electric-sql/pglite has 16,236 GitHub stars and 468 forks. GitHot measured +4 stars in 24 hours. Last checked 2026-11-04 12:06 UTC. Last push 2026-11-04.
Embeddable Postgres with real-time, reactive bindings.
Measured star growth
- in 24h
- +4
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
PGlite - the WASM build of Postgres from Electric.
Build reactive, realtime, local-first apps directly on Postgres.
PGlite - Postgres in WASM

PGlite is a WASM Postgres build packaged into a TypeScript client library that enables you to run Postgres in the browser, Node.js, Bun and Deno, with no need to install any other dependencies. It is only 3mb gzipped and has support for many Postgres extensions, including pgvector and PostGIS.
import { PGlite } from "@electric-sql/pglite";
const db = new PGlite();
await db.query("select 'Hello world' as message;");
// -> { rows: [ { message: "Hello world" } ] }
It can be used as an ephemeral in-memory database, or with persistence either to the file system (Node/Bun/Deno) or indexedDB (Browser).
Unlike previous "Postgres in the browser" projects, PGlite does not use a Linux virtual machine - it is simply Postgres in WASM.
For full documentation and user guides see pglite.dev.
Browser
It can be installed and imported using your usual package manager:
import { PGlite } from "@electric-sql/pglite";
or using a CDN such as JSDeliver:
import { PGlite } from "https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js";
Then for an in-memory Postgres:
const db = new PGlite()
await db.query("select 'Hello world' as message;")
// -> { rows: [ { message: "Hello world" } ] }
or to persist the database to indexedDB:
const db = new PGlite("idb://my-pgdata");
Node/Bun/Deno
Install into your project:
NodeJS
npm install @electric-sql/pglite
Bun
bun install @electric-sql/pglite
Deno
deno add npm:@electric-sql/pglite
To use the in-memory Postgres:
import { PGlite } from "@electric-sql/pglite";
const db = new PGlite();
await db.query("select 'Hello world' as message;");
// -> { rows: [ { message: "Hello world" } ] }
or to persist to the filesystem:
const db = new PGlite("./path/to/pgdata");
pg (node-postgres)
Since v0.5.13, PGlite exposes a connection object that you can directly pass to pg (node-postgres) modules (clients):
import { createPgConfig } from '@electric-sql/pglite/node-postgres'
import { Client, Pool } from 'pg'
import Cursor from 'pg-cursor'
// use with pg Client
const pgConfig1 = createPgConfig()
const client = new Client(pgConfig1)
await client.connect()
await client.query(`
CREATE TABLE IF NOT EXISTS test (
id SERIAL PRIMARY KEY,
name TEXT
);
`)
// or with Pool
const pgConfig2 = createPgConfig()
const pool = new Pool(pgConfig2)
const conn = await pool.connect()
await conn.query(`
CREATE TABLE IF NOT EXISTS test (
id SERIAL PRIMARY KEY,
name TEXT
);
`)
// or even with Cursor from pg-cursor
const cursor = client.query(new Cursor('SELECT * FROM items;'))
How it works
PostgreSQL typically operates using a process forking model; whenever a client initiates a connection, a new process is forked to manage that connection. However, programs compiled with Emscripten - a C to WebAssembly (WASM) compiler - cannot fork new processes, and operates strictly in a single-process mode. As a result, PostgreSQL cannot be directly compiled to WASM for conventional operation.
Fortunately, PostgreSQL includes a "single user mode" primarily intended for command-line usage during bootstrapping and recovery procedures. Building upon this capability, PGlite introduces an input/output pathway that facilitates interaction with PostgreSQL when it is compiled to WASM within a JavaScript environment.
Limitations
- PGlite is single user/connection.
How to build PGlite and contribute
The build process of PGlite is split into two parts:
- Building the Postgres WASM module.
- Building the PGlite client library and other TypeScript packages.
Docker is required to build the WASM module, along with Node (v20 or above) and pnpm for package management and building the TypeScript packages.
To start checkout the repository and install dependencies:
git clone --recurse-submodules https://github.com/electric-sql/pglite
cd pglite
pnpm install
To build everything, we have the convenient pnpm build:all command in the root of the repository. This command will:
- Use Docker to build the Postgres WASM module. The artifacts produced by this step are then copied to
/packages/pglite/release. - Build the PGlite client library and other TypeScript packages.
To only build the Postgres WASM module (i.e. point 1 above), run
pnpm wasm:build
If you don't want to build the WASM module and assorted WASM binaries from scratch, they are generated automatically on Github after each successful PR merge. You can download the latest binaries by going to the last successfully merged PR and clicking the link after the comment Interim build files:. Extract the files and place them under packages/pglite/release in your local repo copy.
To build all TypeScript packages (i.e. point 2 of the above), run:
pnpm ts:build
This will build all packages in the correct order based on their dependency relationships. You can now develop any individual package using the build and test scripts, as well as the stylecheck and typecheck scripts to ensure style and type validity.
Or alternatively to build a single package, move into the package directory and run:
cd packages/pglite
pnpm build
When ready to open a PR, run the following command at the root of the repository:
pnpm changeset
And follow the instructions to create an appropriate changeset. Please ensure any contributions that touch code are accompanied by a changeset.
Acknowledgments
PGlite builds on the work of Stas Kelvich of Neon in this Postgres fork.
Sponsors
Big shoutout to everybody supporting us!
Blacksmith
License
PGlite is dual-licensed under the terms of the Apache License 2.0 and the PostgreSQL License, you can choose which you prefer.
Changes to the Postgres source are licensed under the PostgreSQL License.
Explore related projects
Asabeneh/30-Days-Of-Python
The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,085 starsgrafana/grafana
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
77,699 starsredis/redis
For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.
77,173 starsapache/superset
Apache Superset is a Data Visualization and Data Exploration Platform
75,413 stars