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

swagger-anonymizer

v1.0.4

Published

CLI tool to anonymize names and examples in OpenAPI (Swagger) YAML/JSON specs

Readme

swagger-anonymizer

CLI tool that anonymizes an OpenAPI (Swagger) spec in YAML or JSON: it replaces internal names, paths, tags, operation IDs, examples, and human-readable text with neutral, synthetic values so you can share or commit specs without leaking real API surface or product wording.

Output is deterministic for a given input (fixed random seeds).

Why use it

  • Strip identifiable schema/path/tag names before publishing fixtures or screenshots
  • Reduce accidental leaks when pasting specs into issues or chats
  • Produce stable “fake” specs for demos or codegen tests

Requirements

  • Node.js 18+

Install

From npm (after publish):

npx swagger-anonymizer path/to/openapi.yaml

From a clone: pnpm install && pnpm run build, then:

pnpm exec swagger-anonymizer path/to/openapi.yaml
# or: node dist/index.js path/to/openapi.yaml

Usage

swagger-anonymizer <entry-openapi.yaml|yml|json> [options]

The entry file and all reachable YAML/JSON fragments via $ref are read, transformed, and overwritten in place. Make a backup if you need the original.

swagger-anonymizer ./api/openapi.yaml
swagger-anonymizer ./api/swagger.json --anonymize-servers

Options:

| Option | Description | |--------|-------------| | --root <dir> | Root directory for resolving relative $ref (default: entry file directory) | | --preserve-openapi-refs | Keep the entry filename in ../openapi.yaml#/components/… refs (default) | | --no-preserve-openapi-refs | Disable --preserve-openapi-refs | | --anonymize-servers | Mask non-localhost servers[].url values (e.g. to https://api.example.invalid/...) | | --no-anonymize-local-schema-files | Keep local schema definition filenames (default: rename reachable local schema files) |

Help:

swagger-anonymizer --help

Split / multi-file specs

Typical layout:

openapi.yaml
  components.schemas.*  →  $ref: ./definitions/Foo.yaml
  paths.*               →  $ref: paths/bar.yaml#/fragment

definitions/*.yaml      →  $ref: ./Sibling.yaml  or  ../openapi.yaml#/components/schemas/Bar
paths/*.yaml            →  $ref: ../openapi.yaml#/components/schemas/…

The CLI bundles reachable files in memory, runs the same anonymization as single-file mode, then writes each file back:

  • Schema / path file paths in $ref (./definitions/Foo.yaml, paths/bar.yaml#/key) are preserved for path fragments; local schema definition files on disk are renamed and all sibling $ref strings updated (remote https:// / file://host/… refs are not renamed).
  • OpenAPI-root refs (../openapi.yaml#/components/schemas/X) keep the real entry filename; only component names inside the fragment are anonymized.
  • Sibling definition refs (./NovaEntity.yaml) stay relative sibling paths.
  • Inline path placeholders (/audit: {}) are not renamed to /r/N.
  • Orphan definition files (referenced but not listed under components.schemas) are discovered and anonymized too.

Programmatic API for split specs:

import { anonymizeSplitOpenApi } from 'swagger-anonymizer';

const { filesWritten, schemaMap, parameterMap, schemaFileMap } = anonymizeSplitOpenApi({
  entryPath: './openapi.yaml',
  anonymizeServerUrls: true,
});

Programmatic API

After pnpm run build:

import {
  anonymizeOpenApiInPlace,
  anonymizeSplitOpenApi,
} from 'swagger-anonymizer';

anonymizeOpenApiInPlace(myParsedSpec); // mutates a single parsed document in place

anonymizeSplitOpenApi({ entryPath: './openapi.yaml' }); // multi-file bundle → unbundle

Deep import (same surface as ./anonymize export):

import {
  anonymizeOpenApiInPlace,
  anonymizeSplitOpenApi,
} from 'swagger-anonymizer/anonymize';

License

ISC