npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

neoorm

v0.3.1

Published

TypeScript-first PostgreSQL ORM with schema DSL, codegen, and typed relations

Readme

NeoOrm

PostgreSQL dialect ships today — MySQL, SQLite, and others are on the roadmap.

npm install neoorm pg

Requires Node.js 20+ (PostgreSQL driver ships now; more databases coming).


Why NeoOrm?

No any. No codegen runtime. No lock-in.

Most ORMs force you to learn their query language, fight their type system, or ship a heavy runtime. NeoOrm takes a different approach: you write a plain TypeScript schema, it generates a typed client, and you write real SQL — amplified by types, not abstracted away.

  • Schema as code — one source of truth for types and the database
  • Generated client — zero-cost abstractions, full autocomplete
  • Relations done right — nested reads, writes, and filters without N+1 footguns
  • PostgreSQL powered — arrays, JSONB, PostGIS, enums, full-text, extensions — no abstraction layer that gets in the way. MySQL, SQLite, and more are coming.
  • Migrations built-in — diff your schema, get SQL, deploy. Rollback supported.

Quick start

npx neoorm init               # scaffold schema, config, client
npx neoorm migrate deploy      # create tables
import { db } from "./neoorm/client.js";

// Create with nested relation write
const user = await db.users.create({
  data: {
    email: "[email protected]",
    profile: { create: { name: "Alice" } },
  },
});

// Fetch with typed includes, pagination, and filters
const posts = await db.posts.findMany({
  where: { published: true, tags: { some: { slug: "typescript" } } },
  orderBy: { createdAt: "desc" },
  take: 20,
  with: { author: true, _count: { comments: true } },
});

Features


Documentation

| Topic | | |-------|-| | Getting started | Setup, manual config, env vars, tenant schemas | | Schema DSL | Tables, columns, types, enums, indexes, many-to-many, naming strategy | | Queries | CRUD, where clauses, pagination, aggregates, distinct | | Relation writes | Nested connect/create/disconnect/set/delete | | Transactions | Interactive, batch, nested, isolation levels | | Migrations | Deploy, dev, status, rollback, reset | | CLI reference | All commands and flags | | Configuration | Config file options reference | | Plugins | PostGIS, citext, custom plugins |

See the blog example for a complete schema, and queries.example.ts for typed queries and mutations.


API surface

| Import | Purpose | |--------|---------| | neoorm | defineConfig, createNeoOrmClient, createNeoOrmClientFromPool, client types | | neoorm/schema | Schema DSL (defineSchema, table, column builders, fk, manyToMany, index, unique, primaryKey) | | neoorm/sql | Tagged SQL templates (sql), SQL fragment builder, fluent query builder | | neoorm/plugins | Plugin registry, NeoOrmPlugin, ColumnTypePlugin | | neoorm/plugins/postgis | PostGIS column types (geometry, geography, point) and spatial operators |


Philosophy

NeoOrm was built because existing TypeScript ORMs either sacrificed type safety for flexibility, or sacrificed flexibility for type safety. We think you shouldn't have to choose.

  • Schema is the source of truth — not decorators, not reflection, not a proprietary DSL. Your schema file is plain TypeScript.
  • Generated code is a compile-time artifact — no runtime dependency on the schema. Swap the schema, regenerate, everything still compiles.
  • SQL is not hidden — the client compiles to parameterized SQL that you can inspect. No magic, no surprises.
  • PostgreSQL first — we ship with a Postgres dialect and lean into its features. MySQL, SQLite, and other dialects are on the roadmap and will slot into the same architecture.

License

MIT