thumb-browser
Version:
A blazing-fast, dependency-free browser fingerprinting library to uniquely identify devices using entropy data. Designed for high performance, privacy-respecting analytics, bot detection, and session tracking in modern web apps.
170 lines (123 loc) • 5.51 kB
Markdown
# Thumb.js – Lightweight Browser Fingerprint Library


Thumb.js is a powerful yet lightweight browser fingerprinting library that generates unique, high-entropy device signatures based on a wide array of browser and hardware characteristics. Perfect for enhancing security, preventing fraud, or implementing robust user identification systems without relying on cookies or local storage.
[ ](https://fb.com/iamjafran)
## ✨ Features
- **Forever FREE & Unlimited** - No dependency, no server cost, runs on regular browser.
- **High Entropy Fingerprinting** - Combines 18+ device and browser characteristics
- **Cryptographically Secure** - Uses SHA-256 hashing for maximum uniqueness
- **Lightweight** - Zero dependencies, only 2KB minified
- **Easy to Implement** - Simple API with promise-based fingerprint generation
- **Cross-Browser Compatible** - Works in all modern browsers
- **Privacy-Focused** - All processing happens client-side; no data is transmitted
## 📦 Installation
### NPM
```bash
npm install thumb-browser
```
### Yarn
```bash
yarn add thumb-browser
```
### Direct Script Include
```html
<script src="https://unpkg.com/thumb-browser@latest/dist/thumb.min.js"></script>
```
## 🚀 Quick Start
```javascript
import Thumb from 'thumb-browser';
// Create a new fingerprinter instance
const fingerprinter = new Thumb();
// Generate a fingerprint
fingerprinter.get()
.then(fingerprint => {
console.log('Your device fingerprint:', fingerprint);
// e.g. "3f4e591c86c9c5f734fc4b54d5322549bf85ec34b4c2f36310490b3e187b733d"
})
.catch(error => {
console.error('Error generating fingerprint:', error);
});
```
## 🔍 How It Works
Thumb.js collects and combines multiple sources of entropy to create a unique, stable fingerprint:
1. **User Agent & Browser Data**
- Browser user agent string
- Language settings
- Do Not Track preferences
2. **Hardware & System Information**
- Screen resolution and color depth
- Device memory & CPU core count
- Touch point capability
- Timezone information
- Window dimensions
3. **Advanced Graphical Fingerprinting**
- Canvas rendering characteristics
- WebGL vendor and renderer details
- Color gamut capabilities
4. **Audio Processing**
- Audio context behavior (unique to hardware)
5. **Additional Signal Sources**
- Installed plugins
- Battery status
- Network connection type
- Random entropy enhancer
All data points are combined and processed through SHA-256 to generate a consistent, high-entropy fingerprint that balances uniqueness with stability across sessions.
## 📊 API Reference
### `new Thumb()`
Creates a new Thumb.js instance.
### `async get()`
Generates and returns the fingerprint.
- **Returns**: `Promise<string>` - The SHA-256 fingerprint hash.
### `async collect()`
Collects all data points used for fingerprinting.
- **Note**: This is called automatically by the `get()` method.
### Other Methods
Several specialized methods collect individual components for fingerprinting:
- `getCanvas()` - Canvas-based rendering fingerprint
- `getAudio()` - Audio processing fingerprint
- `getWebGL()` - WebGL vendor and renderer info
- `getPlugins()` - Browser plugins enumeration
- `getColorGamut()` - Screen color capabilities
- `getBattery()` - Battery level detection
- `getNetwork()` - Network connection information
- `getNoise()` - Random entropy addition
## 🔐 Security Considerations
- Thumb.js is designed for legitimate security purposes like fraud prevention and risk analysis
- Always disclose fingerprinting usage to your users in your privacy policy
- Consider offering opt-out options in compliance with privacy regulations
- The fingerprint is intentionally designed to be stable but not perfectly permanent to balance security with privacy
## 👩💻 Use Cases
- **Fraud Prevention**: Detect suspicious activities across different sessions
- **Enhanced Authentication**: Add an extra security layer to login systems
- **Bot Detection**: Identify automated browsing behavior
- **Secure Transactions**: Add verification without additional user friction
- **Cross-Device Recognition**: Improve user experience without requiring login
## ⚙️ Advanced Customization
You can extend the `Thumb` class to add additional sources of entropy or modify existing collection methods:
```javascript
import Thumb from 'thumb-browser';
class EnhancedThumb extends Thumb {
async collect() {
// Call the original collection method
await super.collect();
// Add custom entropy sources
this.data.push(this.getCustomData());
}
getCustomData() {
// Your custom fingerprinting logic here
return 'custom-entropy-value';
}
}
```
## 📝 License
MIT License - feel free to use and modify as needed.
## 🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
---
Developed by [Jafran Hasan](https://jafran.online), Sr Software Developer at [WPPOOL](https://wppool.dev).