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

@unmarkk/server

v1.0.5

Published

Local-first HTTP API for the unmark engine. Binds to loopback, keeps nothing, logs no content.

Readme

@unmarkk/server

A local HTTP API for the unmark engine, for when something other than a terminal needs to strip metadata.

npx @unmarkk/server
# unmark listening on http://127.0.0.1:8765

Open that URL and you get the browser app: drag a file in, read what it carries, download a cleaned copy. Nothing is uploaded — the page is delivered over loopback and then does all its work in the tab, under a connect-src 'none' policy that stops it calling anywhere, including back here.

curl -X POST localhost:8765/inspect \
  -H 'Content-Type: application/octet-stream' \
  -H 'X-Unmark-Filename: photo.jpg' \
  --data-binary @photo.jpg

Built on node:http with no framework. Five paths and two verbs is not worth a supply chain.

  • Binds to 127.0.0.1 by default, and warns loudly when it does not.
  • Request bodies live in memory for the duration of the request and are never written to disk.
  • Logs method, path, status and duration — never a filename, never any content.
  • Sends no CORS headers unless you explicitly allow an origin.

Endpoints

| | | | ------------------- | -------------------------------- | | GET /health | Liveness and version | | GET /capabilities | Which formats this build handles | | GET /openapi.json | Generated OpenAPI 3.1 document | | POST /inspect | Report what a file carries | | POST /clean | Return a cleaned copy |

Full details in docs/server.md.

Embedding

import { createServer } from '@unmarkk/server';

const server = createServer({ port: 8765, apiKey: process.env.TOKEN });
server.listen(8765, '127.0.0.1');

Returns a plain http.Server.

Before you expose it

Everything sent here is a document somebody did not intend to publish. If you make it reachable from a network, set --api-key, put it behind TLS, and read the threat model.

License

MIT © Dhirender Choudhary