ThumbmarkJS: A free, open source device fingerprinting JavaScript library for the web

I needed a decent JavaScript fingerprinting library. I wanted something that was 'good enough': not crappy, but didn't need to be perfect. I noticed the great FingerprintJS, but sadly, they changed their license to a paid one. Boo! What is a good alternative to FingerprintJS?

There are alternatives out there too, but to be honest, they all have faults.

  • FingerprintJS is great, but they're monetizing their product in a way that I don't like. I might need hundreds of thousands of requests per month, but I can't pay thousands of dollars. It doesn't need to be perfect either, so I don't want to pay such a high premium.
  • ImprintJS used to be a thing, but it's now archived for a few years already.
  • ClientJS hasn't been updated for a few years either. It is promising, but I find it a little too complicated to extend and I see nowhere any statistics on how good is it.
  • BroprintJS is the new kid on the block and hats off for trying, but it's very limited in its capabilities. And I have my doubts about how much will happen with it.

So, why not create my own, right? So here we go: a free, open-source, easily extendable, easy to use fingerprinting library ThumbmarkJS.🎉🎉🎉

Yes, please check out the GitHub repository and star it if you could 😊. Feel free to fork it too. It's open source. You can also find the npm package at @thumbmarkjs/thumbmarkjs.


I'm at the point where it is meaningful for me to get some field-data from others. If you want to help, please go to the following page:

The page is a demo of the free fingerprinting library. It will give you your fingerprint as well as show the components it consists of. It will log your fingerprint for analysis. The data is anonymous and is only used to improve the library.

How to use it

Usage is simple. just include the library from the CDN and call it, like so:

<script src="https://cdn.thumbmarkjs.com/latest/Thumbmark.js"></script>
<script>
    ThumbmarkJS.getFingerprint().then(
        function(fp) {
            console.log(fp);
        }
    );
</script>

How does it work?

Like so many other fingerprinting libraries, this one relies on common things such as

  • audio fingerprint
  • canvas fingerprint
  • webgl fingerprint
  • available fonts and how they render
  • videocard
  • browser languages and time zone
  • browser permissions
  • available plugins
  • a ton of screen details including media queries
... and a bunch of smaller things

If you are interested in a more technical explanation of how the library works, head over to the more technical details document.

What makes ThumbmarkJS better than the rest?

Well, it's certainly not yet the technical implementation. It doesn't have unit tests and it hasn't been field-tested very well. But it's very well structured and clean. Anyone who knows Typescript will have no issue understanding how to work with it or improve on it. Also, my field is in data analytics and I've put more effort in setting up ways I can easily analyze the data friendly viewers have logged through the Log your Fingerprint page. (Please do me a favor and pay that page a visit would you?)

Comments

Popular posts from this blog

Snowflake UPSERT operation (aka MERGE)