MurmurHash3 Finalization Mix
fmix is a JavaScript implementation of the MurmurHash3 x86 finalization mix function, a crucial step in the MurmurHash3 algorithm for generating high-quality hash values. The package provides a lightweight, single-purpose utility to apply this finalization step to a given 32-bit number. The current stable version is 1.0.0, released in July 2021. As a focused cryptographic utility, its release cadence is typically slow, with updates primarily addressing environmental compatibility or minor optimizations rather than new features, signifying a mature and stable API. It differentiates itself by offering only the finalization mix, allowing developers to integrate it into custom hashing implementations or use it alongside other MurmurHash3 components like `murmur-32` or `murmur-128` (from the same author) where modularity is desired, rather than a full end-to-end hashing solution. This allows for fine-grained control over the hashing process. The library is dependency-free, ensuring a minimal footprint.
Common errors
-
Error [ERR_REQUIRE_ESM]: require() of ES Module ... fmix/index.js from ... not supported.
cause Attempting to import the `fmix` package using CommonJS `require()` syntax when the package is ESM-only.fixChange `const fmix = require('fmix');` to `import fmix from 'fmix';` in your JavaScript or TypeScript files. Ensure your environment is configured for ESM.
Warnings
- breaking The package converted from CommonJS to ECMAScript Modules (ESM) in v1.0.0.
- breaking Support for older Node.js versions was dropped in v1.0.0.
Install
-
npm install fmix -
yarn add fmix -
pnpm add fmix
Imports
- fmix
const fmix = require('fmix')import fmix from 'fmix'
Quickstart
import fmix from 'fmix';
// The fmix function applies the finalization steps of MurmurHash3
// to an input number, enhancing its distribution and mixing properties.
// This is typically the last step after all input data has been processed
// into a single 32-bit hash state.
const initialHashState = 0xdeadbeef; // Example 32-bit number (hexadecimal)
const finalHash = fmix(initialHashState);
console.log(`Initial hash state: 0x${initialHashState.toString(16)}`);
console.log(`Finalization mix result: ${finalHash}`);
console.log(`Finalization mix result (hex): 0x${finalHash.toString(16)}`);
// Example with a different input
const anotherState = 0x12345678;
const anotherFinalHash = fmix(anotherState);
console.log(`\nAnother state: 0x${anotherState.toString(16)}`);
console.log(`Another finalization mix result: ${anotherFinalHash}`);
// Illustrating the deterministic nature
const sameState = 0xdeadbeef;
const retryFinalHash = fmix(sameState);
console.log(`\nRe-applying to 0x${sameState.toString(16)}: ${retryFinalHash}`);