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

dayjs-core

v0.1.0

Published

A tiny, learning-project clone of Day.js — chainable date manipulation with a plugin system.

Readme

dayjs-clone

A tiny learning-project clone of Day.js: a chainable, mostly-immutable date library with a plugin system for extending core functionality.

Why this structure?

  • src/core.ts — the MyDate class. Every manipulation method (add, subtract, startOf) returns a new instance instead of mutating this. This is the single biggest design decision in a date library — get it wrong and every consumer of your library will eventually get bitten by a shared-reference bug.
  • src/plugin-system.ts — the extend() function. Plugins receive the MyDate class itself and patch its prototype. This keeps core.ts small while letting you ship optional features (relative time, timezones, custom parsing) as separate, tree-shakeable modules — exactly how Day.js keeps its core bundle at ~2KB.
  • src/plugins/relativeTime.ts — an example plugin implementing .fromNow() (e.g. "3 hours ago"), showing the plugin pattern end to end, including how to use TypeScript's declare module to type-augment the core class from a plugin file.

Usage

import dayjsClone, { extend } from 'dayjs-clone';
import relativeTime from 'dayjs-clone/plugins/relativeTime';

const now = dayjsClone();
const nextWeek = now.add(7, 'day');
console.log(nextWeek.format('YYYY-MM-DD'));

extend(relativeTime);
console.log(now.subtract(2, 'hour').fromNow()); // "2 hours ago"

Scripts

| Command | What it does | |-----------------------|------------------------------------------------| | npm install | Install dependencies | | npm run test | Run the test suite once | | npm run test:watch | Run tests in watch mode | | npm run build | Bundle to dist/ (CJS + ESM + .d.ts) | | npm run typecheck | Type-check without emitting files | | npm run dev | Watch mode build |

Where to go next

  1. Add more units to format() — day-of-week names (ddd), 12-hour clock (hh A), millisecond padding.
  2. Add a diff() method — compute the difference between two dates in a given unit.
  3. Add a locale plugin — swap month/weekday names based on a locale object, like Day.js's dayjs/locale/* files.
  4. Add a UTC plugin — right now all getters use local time. A utc() plugin that swaps the internal getters is a good exercise in how much timezone handling complicates a "simple" date library.
  5. Set up CI — GitHub Actions workflow running npm test and npm run typecheck on every push.
  6. Publish to npm — once you're happy with the API, npm publish.