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

nodewriter

v0.1.0

Published

Generate n8n nodes from OpenAPI specs. Experimental.

Readme

nodewriter

Generate n8n nodes from OpenAPI specs. Experimental.

| OpenAPI spec | Output n8n node | Output n8n credentials | | --- | --- | --- | | asana.json | Asana.node.js | AsanaApi.credentials.js + AsanaOAuth2Api.credentials.js | | github.json | GitHub.node.js | - | | hacker-news.json | HackerNews.node.js | - | | hetzner.json | Hetzner.node.js | - | | lichess.json | Lichess.node.js | LichessOAuth2Api.credentials.js | | n8n.json | N8n.node.js | N8nApi.credentials.js | | openai.json | OpenAi.node.js | - | | wayback.json | Wayback.node.js | - |

Small MVP to play with AST transformers.

Installation

npm install -g nodewriter

Usage

nodewriter path/to/open-api-spec.json [options]

Options:

  • --service-name <name> to customize the service name to use in output files
  • --skip-formatting to skip formatting for output files - default: false
  • --output-dir <dir> to set output dir - default: ./nodewriter-output
  • --experimental-json to output JSON instead of JS - default: false

Example:

nodewriter my-specs/fff.json --service-name FridaysForFuture

Requirements:

  • The input OpenAPI spec must be JSON. If YAML, convert it first.
  • The input OpenAPI spec must be 3.0 or 3.1. If 2.0, convert it first.
  • The input OpenAPI spec must be compliant. To validate, lint it first.

Caveats:

  • This is an exploratory project, not meant for production use. API may change between 0.x versions until stable. As of March 2025, the JSON output is not a runnable n8n node - this is an experiment on the future direction of n8n nodes.
  • Many specs do not specify a security scheme even though the service requires auth, e.g. GitHub and OpenAI. Without a security scheme, we cannot generate n8n credentials. Either ask the spec owner to add a security scheme, or add it yourself.

Development

Setup

bun -v # >= 1.2
pnpm -v # >= 9.7

git clone https://github.com/ivov/nodewriter.git
cd nodewriter
pnpm install

bun src/cli.ts path/to/openapi-spec.json

Testing

The sample-outputs dir holds snapshots of valid outputs. Before committing, a git hook will regenerate all snapshots and check if anything has changed. If the changes are intended, then stage those changes as well. If any changes are unintended, then the commit contains a bug to fix.

Why not traditional snapshot testing? This flow makes diffs in multiple large files easy to inspect, preserves syntax highlighting, and separates outputs by file. toMatchSnapshot reports changes via CLI, which is unwiedly for diffs in multiple large files.

Performance

brew install hyperfine
npm install -g 0x

pnpm benchmark:js
pnpm profile:js

pnpm benchmark:json
pnpm profile:json

Release

To release a new version:

pnpm release 0.2.0

This will:

  • update package.json
  • commit, tag, push
  • create GitHub release
  • publish to npm