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

@indiekitai/pg-diff

v0.1.0

Published

PostgreSQL schema diff - generates migration SQL by comparing two databases

Downloads

112

Readme

@indiekit/pg-diff

npm license

PostgreSQL schema diff — compares two databases and generates migration SQL.

A pure-TypeScript alternative to Python's migra.

Features

Supported object types:

  • Tables — columns, types, defaults, NOT NULL, generated columns, partitioned tables, unlogged tables
  • Views — regular and materialized
  • Indexes — including partial indexes and INCLUDE columns
  • Constraints — PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY, EXCLUDE
  • Enums — create, drop, and safe in-place modification
  • Functions & Procedures — full definition comparison
  • Triggers — create, drop, modify
  • Sequences — with ownership tracking
  • Schemas — create/drop
  • Extensions — with optional version ignoring
  • RLS Policies — row-level security policies
  • Privileges — GRANT/REVOKE tracking

Install

npm install @indiekit/pg-diff

Quick Start

# Generate migration SQL
pg-diff postgresql://localhost/db_old postgresql://localhost/db_new

# Apply directly
pg-diff postgres://localhost/old postgres://localhost/new | psql postgres://localhost/old

CLI Usage

pg-diff <from_url> <to_url> [options]

Options

| Flag | Description | |------|-------------| | --json | Output as JSON (machine-readable) | | --safe | Omit all DROP statements | | --ignore-extension-versions | Ignore extension version differences | | --mcp | Start as MCP server (stdio) | | --help | Show help with examples |

Examples

# Plain SQL output (default)
pg-diff postgres://localhost/old postgres://localhost/new

# JSON output for scripting / agents
pg-diff --json postgres://localhost/old postgres://localhost/new

# Safe mode — no destructive changes
pg-diff --safe postgres://localhost/old postgres://localhost/new

Exit Codes

| Code | Meaning | |------|---------| | 0 | Success (or no differences) | | 1 | Error |

API

import { diff } from '@indiekit/pg-diff';

const result = await diff(
  'postgresql://localhost/db_old',
  'postgresql://localhost/db_new',
  { safe: true }
);

console.log(result.sql);           // Migration SQL string
console.log(result.statements);    // Individual SQL statements
console.log(result.summary);       // { added: [...], removed: [...], modified: [...] }

Lower-level API

import { inspectSchema, computeDiff } from '@indiekit/pg-diff';

const from = await inspectSchema('postgresql://localhost/db_old');
const to = await inspectSchema('postgresql://localhost/db_new');
const result = computeDiff(from, to, { safe: false });

Types

All types are exported:

import type { DiffResult, DiffOptions, SchemaObjects } from '@indiekit/pg-diff';

MCP Server

pg-diff exposes an MCP server for AI agent integration.

Start

pg-diff --mcp

Configuration

Add to your MCP client config (e.g. Claude Desktop):

{
  "mcpServers": {
    "pg-diff": {
      "command": "npx",
      "args": ["@indiekit/pg-diff", "--mcp"]
    }
  }
}

Tools

| Tool | Description | |------|-------------| | diff_schemas | Compare two databases, returns full JSON result (SQL + statements + summary) | | diff_summary | Compare two databases, returns human-readable summary |

Both tools accept fromUrl, toUrl, and optional safe parameter.

Safe Mode (--safe)

When --safe is enabled, all statements containing DROP are filtered out. This includes:

  • DROP TABLE, DROP VIEW, DROP INDEX
  • DROP COLUMN, DROP CONSTRAINT
  • DROP FUNCTION, DROP TRIGGER
  • Any other destructive operation

Use this for production migrations where you want to review destructive changes separately.

vs Python migra

| | pg-diff | migra | |---|---|---| | Language | TypeScript/Node.js | Python | | Install | npm install | pip install | | MCP Server | ✅ Built-in | ❌ | | JSON Output | ✅ --json | ❌ | | Safe Mode | ✅ --safe | ✅ --unsafe (inverted) | | API | ✅ ESM + CJS | ✅ Python | | Maintenance | Active | Unmaintained |

License

MIT