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

clawendar

v1.1.1

Published

Minimal CLI calendar with timezone support

Readme

local-clawendar (clawendar)

Minimal, file-backed calendar CLI with strict timezone-aware datetimes.

  • Stores events as JSON on disk (default: ~/.clawendar/events.json)
  • Requires ISO-8601 datetimes with a timezone offset (e.g. 2026-02-14T10:00:00+01:00)
  • Written for Node >= 22

Install / run

From this directory:

npm test

# Run without installing:
node ./bin/clawendar.js today

# Optional: install the `clawendar` command into your PATH
npm i -g .
# or (for local dev)
npm link

OpenClaw Skill

This repo ships an OpenClaw Skill at skills/clawendar/SKILL.md.

Install (recommended)

  1. Go to this repo’s GitHub Releases.
  2. Download the attached clawendar.skill file.
  3. Install it into your OpenClaw instance (Skill installer / skills directory).

Install (dev / from source)

Point OpenClaw at this repo’s skills/ directory, e.g. set:

  • skills.load.extraDirs = ["/path/to/local-clawendar/skills"]

Data location

By default the CLI writes to:

  • ~/.clawendar/events.json

Override with:

  • CLAWENDAR_DATA_DIR=/some/dir

Example:

CLAWENDAR_DATA_DIR=/tmp/my-cal node ./bin/clawendar.js week

Datetime format (important)

--start, --end, --from, and --to must be strict ISO-8601 with an explicit offset:

  • 2026-02-14T10:00:00+01:00
  • 2026-02-14 10:00
  • 2026-02-14T10:00:00Z (UTC Z is currently not accepted; use +00:00)

If --end is omitted on add, it defaults to start + 1 hour.

Commands

Add an event

clawendar add "Dinner" \
  --start 2026-02-14T19:00:00+01:00 \
  --end   2026-02-14T21:00:00+01:00 \
  --place "Home" \
  --participants "Alice,Bob" \
  --calendar personal \
  --category family \
  --category important

Notes:

  • The title is the first non-flag argument after add.
  • --participants is a comma-separated string (no spaces) and is stored as an array.
  • --calendar sets calendarId on the event (default is reserved and cannot be assigned to events).
  • --category can be repeated (or provided as comma-separated values) and is stored as normalized lowercase categories.

Add a recurring event

Recurrence is designed to be wall-clock stable in an IANA timezone (for example Europe/Warsaw), meaning a “09:00 weekly meeting” stays 09:00 local time even when DST changes (the offset will change).

clawendar add "Team sync" \
  --start 2026-03-10T10:00:00+01:00 \
  --tz Europe/Warsaw \
  --rrule "FREQ=MONTHLY;INTERVAL=1;BYDAY=TU;BYSETPOS=2"

RRULE notes:

  • Supports nth weekday patterns via BYDAY=<weekday>;BYSETPOS=<n> (e.g. 2nd Tuesday).
  • The --start value must still be a strict ISO-8601 datetime with an explicit offset.

Expand occurrences for a recurring event

clawendar occurrences <id> \
  --from 2026-03-01T00:00:00+01:00 \
  --to   2026-05-01T00:00:00+02:00

Skip a single occurrence (exception)

clawendar skip <id> --date 2026-03-30T09:00:00+02:00

List events

clawendar today
clawendar week

clawendar list \
  --from 2026-03-01T00:00:00+01:00 \
  --to   2026-03-31T23:59:59+01:00

Filtering options for today, week, and list:

  • --calendar <id>: include only one calendar (--calendar default means events without calendarId)
  • --calendars <a,b>: include multiple calendars
  • --category-any <a,b>: OR filter (event has at least one)
  • --category-all <a,b>: AND filter (event has all)

Examples:

clawendar today --calendar birthdays

clawendar list \
  --from 2026-04-01T00:00:00+02:00 \
  --to   2026-04-30T23:59:59+02:00 \
  --calendar default

clawendar list \
  --from 2026-12-01T00:00:00+01:00 \
  --to   2026-12-31T23:59:59+01:00 \
  --category-any family,birthday

clawendar week --calendars personal,holidays --category-all important,travel

Edit an event

clawendar edit <id> --title "New title"
clawendar edit <id> --place "Room 42"
clawendar edit <id> --participants "Alice,Bob,Charlie"
clawendar edit <id> --start 2026-02-14T11:00:00+01:00 --end 2026-02-14T12:00:00+01:00
clawendar edit <id> --calendar birthdays --category family --category birthday

Delete an event

clawendar delete <id>

Output format

Each event prints as a single line:

<id>  <start>  <title>  [<place>]  (<participants...>)  <calendarId>  #cat1,#cat2  {series|occurrence}
  • Place / participants only appear when present.
  • Calendar appears as <calendarId> when present.
  • Categories appear as #cat1,#cat2 when present.
  • Recurring event definitions are tagged {series}.
  • Expanded instances (from occurrences) are tagged {occurrence}.