Back to Home11/19/2025, 2:17:16 PM

Show HN: Ominipg – Local-First Postgres for Deno

1 points
0 comments

Mood

calm

Sentiment

positive

Category

tech

Key topics

Deno

Postgres

local-first development

I built Ominipg, a PostgreSQL toolkit for Deno that lets you:

1. Start with an in-memory database for quick prototyping/tests

2. Switch to a local on-disk PGlite DB

3. Move to a real remote PostgreSQL instance

…all using the same API and code, with an optional local↔remote sync mode for offline-first apps.

Why?

Most apps go through these stages:

1. Prototyping/Testing – you just want a fast, zero-setup in-memory DB.

2. Local-first – you want offline capability but still sync to the cloud.

3. Production – you want a full PostgreSQL instance, without rewriting your data layer.

Ominipg is my attempt to make that path smoother.

Modes

- url: ":memory:" – PGlite in WASM, in-memory. Great for tests, demos, or quick spikes. No Postgres install required. - url: "path/to/db" – PGlite with disk storage. Nice for desktop apps, CLIs, or local development. - url: "postgresql://..." – Direct connection to your remote/production Postgres.

Local + Remote sync (both URLs) – Use a local PGlite DB that automatically syncs with remote Postgres, so you can build offline-first apps or just get faster reads while still persisting everything remotely.

Under the hood, PGlite runs in a Web Worker automatically (when available), so heavy queries don’t block your main thread – you don’t have to think about workers yourself.

Typed CRUD with Mongo-style queries

Instead of writing SQL, you can use MongoDB-style queries with TypeScript types inferred from JSON Schema definitions:

const adults = await db.crud.users.find({ age: { $gte: 18 }, status: { $in: ["active", "premium"] }, }); // `adults` is fully typed based on your `users` schema

If you prefer, you can also use Drizzle ORM on top, or drop down to raw SQL. Ominipg doesn’t force you into one style.

Example

import { Ominipg, defineSchema } from "jsr:@oxian/ominipg";

const schemas = defineSchema({ users: { schema: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, }, required: ["id", "name"], }, keys: [{ property: "id" }], }, });

// Start in-memory, later point this to postgresql://... or ./local.db const db = await Ominipg.connect({ url: ":memory:", schemas, });

await db.crud.users.insertOne({ id: "1", name: "Alice", });

const activeUsers = await db.crud.users.find({ name: { $in: ["Alice"] }, });

Links:

- JSR: https://jsr.io/@oxian/ominipg

- GitHub: https://github.com/AxionCompany/ominipg

• A bit about me / what I’m looking for

I’m a co-founder of a software development agency in Brazil. We’ve shipped 500+ projects (many enterprise), and a lot of our success has come from investing in developer productivity and internal tooling, including early bets on the Deno ecosystem. We recently decided to open-source some of these tools. Ominipg is the first of several, I’d love to get feedback from the JS (specially Deno) ecosystem.

In particular, I’d appreciate thoughts on: - The API design (especially the CRUD + schema approach) - The local + remote sync model - Rough edges you hit trying it in a small demo or side project

The author is sharing a new project, Ominipg, a local-first Postgres implementation for Deno, but there is no discussion or feedback yet.

Snapshot generated from the HN discussion

Discussion Activity

No activity data yet

We're still syncing comments from Hacker News.

Generating AI Summary...

Analyzing up to 500 comments to identify key contributors and discussion patterns

Discussion (0 comments)

Discussion hasn't started yet.

ID: 45979763Type: storyLast synced: 11/19/2025, 3:39:01 PM

Want the full context?

Jump to the original sources

Read the primary article or dive into the live Hacker News thread when you're ready.