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

@drzl/generator-json-schema

v0.9.3

Published

Generate JSON Schema and OpenAPI schemas from a Drizzle schema

Readme

@drzl/generator-json-schema

CI npm

JSON Schema and OpenAPI schemas from your Drizzle analysis (insert / update / select).

No runtime dependency. The output is data.

💚 Sponsor DRZL

DRZL is crafted nights & weekends. Sponsorships keep the generators fast, tested, and free.

Sponsor DRZL

  • Every dollar speeds up CI hardware and offsets long test runs on my aging laptop.
  • Sponsors get roadmap input and priority responses in GitHub Issues.
  • Prefer a quick overview? The current goals and thank-yous are at https://use-drzl.github.io/drzl/sponsor.

Use

Add to drzl.config.ts:

generators: [{ kind: 'json-schema', path: 'src/validators/json-schema' }];

Output

  • Insert<Table>Schema, Update<Table>Schema, Select<Table>Schema, each a plain object declared as const
  • Optional index barrel

OpenAPI

generators: [{ kind: 'json-schema', target: 'openapi-3.1', components: true, document: true }];

components: true writes components.ts, ready to spread into a document's components.schemas. document: true writes openapi.ts (and openapi.json with document: { format: 'both' }): the whole document, with a collection and an item path per table, the verbs on each, the request and response body per verb, and the status codes, including the one a schema causes when it refuses a request.

The path parameter is the table's real primary key, every column of it, at its real type, so a uuid key is /sessions/{token} and a composite key is /org_members/{orgId}/{userId}. A table with no primary key keeps its collection paths and loses the by-id ones rather than gaining a fictional id. servers is absent unless you supply one, which the specification reads as a single server at /. See the OpenAPI document docs for the whole set.

Dialect

generators: [{ kind: 'json-schema', target: 'openapi-3.0' }];

draft-2020-12 (default), openapi-3.1, or openapi-3.0. The last is a different dialect rather than an older version: nullable is nullable: true rather than a type array, an exclusive bound is a boolean beside the bound rather than its own keyword, a pinned value is a one-value enum rather than const, and base64 bytes are format: 'byte' rather than contentEncoding. Since an unknown keyword is ignored rather than rejected in JSON Schema, emitting the wrong one produces a document that validates and then accepts what the constraint exists to reject; inside an OpenAPI 3.0 document it is worse than that, because 3.0's Schema Object is closed and one unknown keyword makes the whole document invalid.

See the full generator docs for what the format cannot express and how each column type survives JSON.stringify.

Custom names

affix renames the exported schemas and type aliases, and tableCase: 'pascal' upper-camels the Drizzle export name (users -> Users) instead of interpolating it verbatim. Omit it and the names above are unchanged.

generators: [
  {
    kind: 'json-schema',
    path: 'src/validators/json-schema',
    affix: {
      tableCase: 'pascal',
      schema: { suffix: 'Schema' },
      type: {
        prefix: { insert: 'Create', update: 'Edit', select: '' },
        suffix: { insert: 'Input', update: 'Input', select: '' },
      },
    },
  },
];

Emits InsertUsersSchema / UpdateUsersSchema / SelectUsersSchema plus CreateUsersInput, EditUsersInput and a bare Users. Every prefix and suffix takes a string or a per-mode object keyed by insert, update, select. The legacy schemaSuffix still works and is the default for affix.schema.suffix.