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

@presentfast/cli

v1.2.0

Published

PresentFast command-line — publish HTML or Markdown presentations and view analytics from the terminal.

Readme

@presentfast/cli

Placeholder. The real CLI ships in Phase 3 (AI_FIRST_ROADMAP.md §3 A2). This directory exists so the @presentfast npm scope is reserved against the package name and so the future cli/ layout is locked in.

When Phase 3 lands, this package will be the pf (or presentfast) binary developers use to publish presentations from the terminal — also the audience needed by CI/CD pipelines and AI-agent fallback flows.

What will live here (Phase 3)

cli/
├── package.json
├── src/
│   ├── index.ts
│   ├── auth/                      # OAuth client (shared logic with mcp-server)
│   └── commands/
│       ├── login.ts               # browser OAuth + device flow fallback
│       ├── logout.ts
│       ├── publish.ts
│       ├── list.ts
│       ├── rename.ts
│       ├── delete.ts
│       └── analytics.ts
└── README.md  ← you are here

V1 commands (Phase 3)

pf login                 # OAuth flow: opens browser, captures token automatically
pf login --device        # RFC 8628 fallback for CI / SSH / headless
pf logout                # POSTs /oauth/revoke, deletes local token
pf publish ./deck.html   # upload + print share URL
pf publish ./deck.md     # markdown converted server-side
pf list                  # list owner's projects
pf rename <id> "New Title"
pf delete <id> --yes
pf analytics <id>        # print summary numbers

Share links & gates

Manage gated share links for your presentations — password protection, email capture, domain allowlists, expiry dates, and per-recipient tracking. Requires owner or editor access; run pf login first.

pf links create <projectId>       Create a share link (no gates by default)
pf links list <projectId>         List all share links and their gates
pf links update <projectId> <linkId>   Change gates on an existing link
pf links revoke <projectId> <linkId>   Turn off a share link (keeps history)
pf links leads <projectId> <linkId>    List email addresses captured by a link's email gate

pf links create flags

| Flag | Description | |------|-------------| | --password <pw> | Require this password to view | | --require-email | Ask the viewer for their email before viewing | | --allowed-domains <csv> | Only allow these email domains, comma-separated (implies --require-email) | | --expires <iso> | ISO 8601 date/time after which the link stops working | | --label <text> | Internal label for the link | | --recipient-email <email> | Personal link for this recipient (tracking) | | --recipient-name <name> | Recipient name | | --recipient-org <org> | Recipient organisation |

pf links update flags

Same as create, plus --no-password and --no-require-email to clear those gates. Pass an empty string to --allowed-domains "" or --expires "" to clear those fields.

Examples

# Create a password-protected, email-gated link
pf links create <projectId> --password hunter2 --require-email

# Restrict to a company domain (email gate auto-enabled)
pf links create <projectId> --allowed-domains acme.com --label "Acme Q3 deck"

# Create a personal link for a specific recipient
pf links create <projectId> --recipient-email [email protected] --recipient-name "Jane Smith"

# List all links for a project
pf links list <projectId>

# Remove the password from an existing link
pf links update <projectId> <linkId> --no-password

# View captured email leads
pf links leads <projectId> <linkId>

# Revoke a link
pf links revoke <projectId> <linkId>

Team & collaboration

Invite collaborators to your presentations, manage their roles, and accept or decline your own invitations. Owner access is required for invite/role-change/remove; run pf login first.

pf members — manage a presentation's team

pf members list <projectId>                      List all members and their roles
pf members invite <projectId> <email> [--role]   Invite someone by email (default role: viewer)
pf members set-role <projectId> <memberId> <role>  Change a member's role
pf members remove <projectId> <memberId>         Remove a collaborator

Available roles: editor, viewer, analyst.

pf invites — view and act on your own pending invitations

pf invites list            List your pending invitations (shows token, role, project)
pf invites accept <token>  Accept an invitation (grants you access)
pf invites decline <token> Decline an invitation

Examples

# Invite a colleague as an editor
pf members invite <projectId> [email protected] --role editor

# List members to find their member IDs
pf members list <projectId>

# Change a member's role to viewer
pf members set-role <projectId> <memberId> viewer

# Remove a member
pf members remove <projectId> <memberId>

# See your own pending invitations
pf invites list

# Accept an invitation by its token
pf invites accept <token>

# Decline an invitation
pf invites decline <token>

Phase 1 status

Phase 1 (A1a OAuth foundation) is complete — the server-side endpoints the CLI will call are live:

  • POST /api/oauth/authorize — consent flow
  • POST /api/oauth/token — code + refresh grants
  • POST /api/oauth/revoke — RFC 7009 token revocation
  • GET /.well-known/oauth-authorization-server — RFC 8414 discovery

Until Phase 3

This README is the entire package. The auth-flow library will be duplicated between cli/src/auth/ and mcp-server/src/auth/ until the codebase outgrows that — at which point we'll extract to a shared internal package.