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

saveitnow

v1.0.0

Published

Official SaveIt.now SDK and CLI for managing bookmarks, tags, and more.

Readme

saveitnow

Official SDK + CLI for the SaveIt.now API. One npm package, two ways to use it:

# Use it as a CLI
npx saveitnow auth set <your-api-key>
npx saveitnow bookmarks list --tags dev,ai --limit 10

# Or import it as an SDK
import { Saveit } from "saveitnow";
const saveit = new Saveit({ apiKey: process.env.SAVEIT_API_KEY });
const { bookmarks } = await saveit.bookmarks.list({ tags: ["dev"] });

Install

npm install saveitnow       # for SDK use
# or
npx saveitnow --help        # for one-off CLI use, no install needed

Get an API key

  1. Go to saveit.now/account/keys
  2. Click Create API Key, name it, copy the value (you won't see it again)
  3. Either set the env var SAVEIT_API_KEY=... or run npx saveitnow auth set <token>

API keys require a paid plan. Free plans get an 403 Pro plan required response.

SDK

import { Saveit } from "saveitnow";

const saveit = new Saveit({
  apiKey: process.env.SAVEIT_API_KEY,
  // baseUrl: "https://saveit.now/api/v1",  // optional override
  // timeoutMs: 30_000,
  // maxRetries: 3,
});

// List + search bookmarks
const { bookmarks, hasMore, nextCursor } = await saveit.bookmarks.list({
  query: "next.js",
  tags: ["frontend"],
  types: ["ARTICLE", "YOUTUBE"],
  special: "UNREAD",
  limit: 20,
});

// Create
const bookmark = await saveit.bookmarks.create({
  url: "https://example.com",
});

// Random unopened bookmark - returns `{ bookmark: null, exhausted: true }`
// once the user has opened every available bookmark.
const random = await saveit.bookmarks.random();

// Delete
await saveit.bookmarks.delete(bookmark.id);

// Tags
const { tags } = await saveit.tags.list({ limit: 50 });

Bookmark types: VIDEO, ARTICLE, PAGE, IMAGE, YOUTUBE, TWEET, PDF, PRODUCT. Bookmark statuses: PENDING, PROCESSING, READY, ERROR.

The SDK throws SaveitApiError on non-2xx responses (with .status, .code, .response) and SaveitConfigError for missing API keys.

import { SaveitApiError } from "saveitnow";

try {
  await saveit.bookmarks.create({ url: "not a url" });
} catch (err) {
  if (err instanceof SaveitApiError && err.status === 400) {
    console.error("Invalid URL:", err.message);
  }
}

CLI

saveitnow auth set <token>          # save the API key (chmod 600)
saveitnow auth show [--raw]         # masked / full
saveitnow auth test                 # verify against the API
saveitnow auth remove

saveitnow bookmarks list [--query <q>] [--tags a,b] [--types ARTICLE,VIDEO] [--special UNREAD] [--limit 20] [--cursor <c>]
saveitnow bookmarks create --url <url> [--transcript <text>] [--metadata '{"k":"v"}']
saveitnow bookmarks delete <id>
saveitnow bookmarks random

saveitnow tags list [--limit 50] [--cursor <c>]

Global flags

| Flag | Description | | ----------------------------- | --------------------------------- | | --json | Output as JSON | | --format <text\|json\|csv\|yaml> | Output format (default: text) | | --verbose | Enable debug logging | | --no-color | Disable colored output | | --no-header | Omit table/csv headers (for pipes)|

Env vars

| Var | Purpose | | ----------------- | --------------------------------------------------------------- | | SAVEIT_API_KEY | Used by both SDK and CLI; takes precedence over the saved file. | | SAVEIT_BASE_URL | Override the API base URL (defaults to https://saveit.now/api/v1). |

Resources

License

MIT