Bloomfilter.js
JavaScript bloom filter using FNV for fast hashing
Install / Use
/learn @jasondavies/Bloomfilter.jsREADME
Bloom Filter
This JavaScript bloom filter implementation uses the non-cryptographic Fowler–Noll–Vo hash function for speed.
Usage
import { BloomFilter } from 'bloomfilter';
const bloom = new BloomFilter(
32 * 256, // number of bits to allocate.
16 // number of hash functions.
);
// Add some elements to the filter.
bloom.add("foo");
bloom.add("bar");
// Test if an item is in our filter.
// Returns true if an item is probably in the set,
// or false if an item is definitely not in the set.
bloom.test("foo");
bloom.test("bar");
bloom.test("blah");
// Serialisation.
const json = JSON.stringify(bloom);
// Deserialisation.
const loadedBloom = BloomFilter.fromJSON(json);
// Automatically pick {m, k} based on number of elements and target false
// positive error rate.
const autoBloom = BloomFilter.withTargetError(1_000_000, 1e-6);
Implementation
Although the bloom filter requires k hash functions, we can simulate this using enhanced double hashing with a single 64-bit FNV-1a hash computation for performance. The 64-bit hash is split into two 32-bit halves to obtain the two independent hash functions required for enhanced double hashing.
Thanks to Will Fitzgerald for his help and inspiration with the hashing optimisation.
Related Skills
node-connect
341.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.4kCommit, push, and open a PR
