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

@blebbit/flexicon

v0.0.5

Published

Library for record editing and history tracking.

Downloads

3

Readme

ts/flexicon

TypeScript package for

  • ATProto record editing with history based on https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol
  • more to come...
    • versioning
    • lenses

Usage

pnpm install @blebbit/flexicon

All functions require an authenticated agent to be provided.

createRecord

export async function createRecord({
  agent,
  repo,
  collection,
  record
}: {
  agent: AtpAgent
  repo: string
  collection: string
  record: any
})

Adds createdAt and updatedAt fields to record for you.

updateRecord

export async function updateRecord({
  agent,
  repo,
  collection,
  rkey,
  swapCommit,
  swapRecord,
  recordUpdates
}: {
  agent: AtpAgent
  repo: string
  collection: string
  rkey: string
  swapCommit?: string
  swapRecord?: string
  recordUpdates: any
})

The main helper.

  1. Performs a copy-on-write of the current record, adds $orig to the copy which points at main record.
  2. Performs the update to the main record, adding or extending the $hist list.

getRecord

export async function getRecord({
  agent,
  repo,
  collection,
  rkey,
  cid,
  includeHistory = false,
}: {
  agent: AtpAgent
  repo: string
  collection: string
  rkey: string
  cid?: string
  includeHistory?: boolean
})

Same as the normal getRecord with an option to fetch history and embed the value into the $hist entries.

deleteRecord

export async function deleteRecord({
  agent,
  repo,
  collection,
  rkey,
  includeHistory = true
}: {
  agent: AtpAgent
  repo: string
  collection: string
  rkey: string
  includeHistory?: boolean
})

Same as the normal deleteRecord with the option to also delete any history of the record.

lookupUserInfo

export async function lookupUserInfo(handleOrDID: string) {
  ...
  const url = "https://plc.blebbit.dev/info/" + handleOrDID
  ...
}

Gets basic info about an account from our PLC mirror++

{
  "did": "did:plc:veavz5io7eocwh7dbrhr2thi",
  "pds": "https://mycena.us-west.host.bsky.network",
  "handle": "blebbit.app",
  "plcTime": "2025-01-31T10:21:15.423Z",
  "lastTime": "2025-03-08T02:59:08.017025Z"
}

createAgent

export async function createAgent(handleOrDID: string)

Returns an Agent setup for the account and ready for auth.

createAuthdAgent

export async function createAuthdAgent(handleOrDID: string, password: string)

Returns an auth'd Agent for the account using basic auth.

Development

Setup

Run the following in the repo root to fetch tools and deps for all packages

pnpm i

Create a .test.env file with the following contents

BLUESKY_USERNAME=<handle>
BLUESKY_PASSWORD=<app-password>

Highly recommended to use an app password

https://bsky.app/settings/app-passwords

Running tests

pnpm test