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

@jstiller/already-seen

v0.0.1

Published

A simple url tracker

Readme

already-seen

This snippet should track all websites and mark them as read It stores the information by localStorage.

Supported Browser

The following Browser are supported. These compatibility informations are based on used the methods and their browser support as mentioned on caniuse.com.

  • IE 9-11
  • Edge 12-14
  • Firefox 3.5-45
  • Chrome 4-49
  • Safari 4-9
  • Opera 12.1-35
  • iOS Safari 5.1-9.1
  • Android Browser 2.3-44
  • Blackberry Browser 7-10
  • Opera Mobile 12.1-33
  • Chrome for Android 46
  • Firefox for Android 42
  • IE Mobile 10-11
  • UC Brwoser for Android 9.9

If you need higher backwards compatibility, you should replace the localStorage with document.cookie. For IE8 support you need to implement a fallback for "map" and "forEach".

Sources

  • http://www.caniuse.com
  • http://kangax.github.io/compat-table/es5/

Notes

If you need to access the collected information on server side, you should also replace localStorage with document.cookie.

How to config

Actually you are able to configurate the sites that should be tracked. Further more you can configurate exceptions by the following object:

var config = {
    rules: [
        {
            location: '/path/',
            exceptions: [
                {
                    location: '/path/exception'
                }
            ]
        }
    ],
    prefix: 'prefix-',
    data: 'name'
};

Rules

The config includes rules that discribes the locations that should be tracked.

The following example tracks everything on a webpage and is set by default.

var config = {
    rules: [
        {
            location: ''
        }
    ];

If you only want to track everything within a specific path

var config = {
    rules: [
        {
            location: '/path'
        }
    ];

If you want to track everything within a specific path without one or more subdirectories, you can define exceptions.

var config = {
    rules: [
        {
            location: '/path',
            exceptions: {
                location: '/path/subdirectory'
            }
        }
    ];
    
    rules: [
        {
            location: '/path',
            exceptions: [
                {
                    location: '/path/subdirectory'
                },
                {
                    location: '/path/anotherSubdirectory'
                }
            ]
        }
    ];

How to style

a[data-*] {
    :after {
    content: 'seen'
    }
}

OR

a[data-name] {
    :after {
    content: 'seen'
    }
}

OR

a[data-name="true"] {
    :after {
    content: 'seen'
    }
}