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

@within-7/jetr

v0.9.3

Published

CLI for Jetr static site hosting

Readme

@within-7/jetr

Static site hosting CLI. Deploy files to Cloudflare R2 with one command. Incremental uploads, custom domains, password protection.

Install

npm i -g @within-7/jetr

Or use directly:

npx @within-7/jetr deploy my-site ./dist

Quick Start

# 1. Login
jetr login
# Username: lib
# Password: ****
# ✔ Logged in as lib

# 2. Deploy current directory
jetr
# Site name [my-blog]:
# ✔ Deployed!
#   URL:   https://my-blog.your-domain.com

# 3. Re-deploy (remembers site name)
jetr
# Using saved site: my-blog
# ✔ Deployed!

Commands

jetr login [user] [password]

Login with username and password. Credentials are verified against auth-gateway, and the JWT token is saved locally.

jetr login                    # interactive prompts
jetr login lib mypassword     # non-interactive
jetr login --token <jwt>      # direct token (for CI)

jetr create <name>

Create an empty site without deploying files.

jetr create my-blog
jetr create preview-site --password secret123
jetr create temp-demo --expires 86400    # expires in 24h

jetr [directory] [name]

Deploy a directory. This is the default command — just run jetr in your project.

jetr                           # deploy current dir, name from .jetrrc or prompt
jetr ./dist                    # deploy ./dist
jetr ./dist my-blog            # deploy ./dist as my-blog

Site is auto-created if it doesn't exist. Name is saved to .jetrrc for next time. Uses incremental upload (10x concurrent) — only changed files are uploaded.

jetr list

List your sites.

jetr list
jetr ls

jetr info <name>

Show site details including files and share tokens.

jetr info my-blog

jetr delete <name>

Delete a site and all its files.

jetr delete my-blog
jetr rm my-blog

jetr password <name> [password]

Set or remove site password.

jetr password my-blog secret123    # set password
jetr password my-blog              # remove password

jetr token create <site>

Create a share token for password-protected sites.

jetr token create my-blog --note "For QA team"
jetr token create my-blog --expires 3600    # 1 hour

jetr token revoke <site> <id>

Revoke a share token.

jetr token revoke my-blog KTEaMnomEOPHlZizIvDNL

jetr whoami

Show current config (API URL and token).

How It Works

  1. jetr deploy scans the directory and computes SHA-256 hashes for each file
  2. Sends the file manifest to the API, which diffs against the current state
  3. Only uploads files that changed (incremental deploy)
  4. Finalizes the deploy — old files are cleaned up, new files go live

This means re-deploying a large site with one changed file only uploads that one file.

Config

Config is stored at ~/.jetr/config.json:

{
  "apiUrl": "https://api.your-domain.com/jetr",
  "token": "eyJhbG..."
}

Override API URL with jetr login <token> --api-url <url>.