Skip to content
spaulllPublic

Latest commit

 

History

25 Commits

Folders and files

Repository files navigation

HashLens logo

HashLens

A minimal, privacy-friendly hash identifier that runs entirely in your browser.
Paste a hash, get the possible types in milliseconds — nothing is ever uploaded.

Repository · Run Locally · How It Works


Features

  • Identifies 220+ hash types (MD5, SHA variants, bcrypt, NTLM, JWT, …) via the hashid library
  • 100% client-side — no server, no API calls, no tracking; your hashes never leave your machine
  • Fast by design: no webfonts or UI frameworks, PyScript runtime cached by a service worker, and a minimal CSS layer
  • Installable PWA with offline support
  • Auto light/dark mode that follows your system preference
  • Responsive, works on mobile

How It Works

The UI is plain HTML + CSS. Identification happens in Python running in your browser:

  1. PyScript (v2026.7.3) boots a Pyodide/WebAssembly Python runtime on the page
  2. It installs the pure-Python hashid package (declared in scripts/pyscript.json)
  3. On submit, scripts/main.py runs hashid against your input and renders the matches as chips

The first load takes a few seconds (the Python runtime is ~10 MB and cached afterwards); subsequent visits are near-instant thanks to the service worker cache.

Tech Stack

Layer Tech
Client HTML, CSS, PyScript (Pyodide / WASM)
Backend None — everything runs in the browser

Run Locally

Clone and serve the folder (a web server is required so PyScript can fetch its files):

git clone https://github.com/spaulll/HashLens.git
cd HashLens
python3 -m http.server 8000

Then open http://localhost:8000.

Any static file server works, e.g. npx serve or php -S localhost:8000.

Project Structure

HashLens/
├── index.htm            # UI markup
├── style.css            # Minimal modern styling (auto light/dark)
├── scripts/
│   ├── main.py          # PyScript app: hashid + DOM rendering
│   ├── pyscript.json    # PyScript config (packages: hashid)
│   └── script.js        # Loader / readiness handling
├── manifest.json        # PWA manifest
└── service-worker.js    # Offline caching

FAQ

Why is the first load slow? PyScript downloads the Pyodide (Python/WebAssembly) runtime on first visit. After that, both the runtime and the app assets are cached by the service worker, so repeat visits load quickly.

Is my hash sent anywhere? No. Everything runs locally in your browser's sandbox — no network request carries your input.

Author

Contributors

Languages