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

sidenote-cli

v0.0.1

Published

Comment on your rendered markdown site like a Google Doc; an AI agent resolves the comments into a clean git diff.

Downloads

126

Readme

sidenote

CI License: MIT

Comment on your rendered markdown site like a Google Doc. An LLM resolves the comments into a clean git diff. You never leave the browser.

sidenote is a review layer for content authors. You review your own site on the local dev server, select a passage, and leave a comment, exactly like commenting in Google Docs or Word. A local coding agent (claude or codex) either answers your question in place or patches the source markdown and hands you back a git diff to accept or reject.

It is not an editor. You annotate intent; the agent makes the edit. Source markdown stays the source of truth.

How it works

1. Select a passage on your rendered page and write what you want changed. Google-Docs muscle memory.

Selecting text on the rendered page opens a comment box

2. The comment pins to the rail. From here you can Ask about it or Resolve it into an edit.

The comment pinned as a card in the sidenote rail

3. Ask, and the agent answers in the thread. No file is touched; it is a conversation.

The agent answering the question inline in the rail thread

4. Resolve, and the agent patches the source. You review the real git diff inline, then Accept or Reject.

A real git diff shown inline under the comment, ready to accept or reject

Why

Authoring a blog means bouncing between the browser (to see the rendered page) and the terminal (to ask an agent for a fix). That context-switch is the tax. sidenote closes the loop inside the browser.

What you can do

  • Select and comment on any block of your rendered page (Google-Docs muscle memory).
  • Ask a question about a passage and get an answer in the rail thread, with no edit to the file.
  • Resolve a comment into a real edit, review the git diff inline, then Accept or Reject.
  • Reply to keep discussing, then turn the thread into an edit when you are ready.
  • Watch the agent work live (activity and streamed answer) instead of staring at a spinner.
  • Reject reverses only that comment's patch; a drift guard refuses to patch a passage whose source changed since you commented.

Requirements

  • Node.js 18 or newer.
  • claude or codex on your PATH for real edits (a zero-LLM mock agent is used for tests).
  • A site that renders markdown through remark (for example a Next.js blog).

Quick start

npm install --save-dev remark-sidenote   # the offset stamper for your markdown pipeline
npx sidenote-cli init --agent claude     # one-time wiring (prints 2 steps)
npx sidenote-cli dev                     # run the daemon next to your site

init writes .sidenote/config.json:

{
  "agent": "claude",
  "contentDir": "content",
  "port": 4517,
  "askModel": "haiku",
  "resolveModel": "opus"
}

askModel / resolveModel are optional. Ask/Reply default to a fast model; Resolve keeps the agent's default. See TESTING.md to try the full loop, with or without an LLM.

Layout

packages/
  remark-plugin/   stamps source offsets onto rendered HTML blocks
  daemon/          localhost comment store + resolve loop (claude | codex | mock)
  overlay/         injected browser overlay: select to comment, rail, live diff
bin/sidenote.js    init + dev CLI

Tests

npm test          # remark plugin + daemon suites (no browser)
npm run test:e2e  # full browser flow (needs Playwright)

Contributing

Issues and PRs welcome. See CONTRIBUTING.md and the Code of Conduct.

License

MIT